MyBatis 的基本要素—SQL 映射文件

MyBatis 真正的强大在于映射语句,相对于它强大的功能,SQL 映射文件的配置却是相当简单。对比 SQL 映射配置和 JDBC 代码,发现使用 SQL 映射文件配置可减少 50% 以上的代码,并且MyBatis 专注于SQL,对于开发人员来说,也可极大限度地进行 SQL 调优,以保证性能。

SQL 映射文件的几个顶级元素(按照定义的顺序)

  ➣ mapper:映射文件的根元素节点,只有一个属性 namespace(命名空间) 。


   namespace 作用如下
     1、用于区别不同的 mapper,namespace 和 子元素的 id 联合保证全局唯一。
     2、绑定DAO接口。即面向接口编程,当 namespace 绑定某一接口之后,可以不用书写该接口的实现类,MyBatis 会通过接口的完整限定名查找到对应的 mapper 配置来执行 SQL 语句。因此 namespace 的命名必须跟某个接口同名,接口中的方法与映射文件中 SQL 语句 id 一一对应。

 

  ➣ cache :配置给定命名空间的缓存

  ➣ cache-ref :从其他命名空间引用缓存配置

  ➣ resultMap:用来描述数据库结果集和对象的对应关系

  ➣ sql:可以重用的 SQL 块,也可以被其他语句引用

  ➣ insert:映射插入语句

  ➣ update:映射更新语句

  ➣ delete:映射删除语句

  ➣ select:映射查询语句

 

  关于 MyBatis 的 SQL 映射文件中的 mapper 元素的 namespace 属性有如下要求。
      (1) namespace 的命名必须跟某个 DAO 接口同名,同属于 DAO 层,故代码结构上,映射文件与该 DAO 接口应放置在同一 package 下,并且习惯上都是以 Mapper 结尾( UserMapper.java、 UserMapper.xml)。
      (2)在不同的 mapper 文件中,子元素的 id 可以相同,MyBatis 通过 namespace 和子元素的 id 联合区分。接口中的方法与映射文件中 SQL 语句 id 应一一对应。

 

Mybatis 中的别名

  完全限定名:如:cn.mybatis.pojo.User

   别名:User / user  

  对于普通的 Java 类型,有许多内建的类型别名,并且它们对大小写不敏感。如:基础数据类型 “string” ,这是一个别名,代表 String ,属于一个内建的类型别名。

别名 string int byte long short integer arraylist double float boolean date map hashmap list decimal bigdecimal object collection iterator
映射的类型 String Integer Byte Long Short Integer ArrayList Double Float Boolean Date Map HashMap List BigDecimal BigDecimal Object Collection Iterator

 

   说明:

    1、除了内建的类型别名外,还可以为自定义的设置别名,使用 ( typeAliases )在 mybatis-config.xml 中的设置,在映射文件中可直接使用别名,以减少配置文件的代码。

    2、别名对大小写不敏感,即不区分大小写。

 

select 元素

  select:表示查询语句,是 MyBatis 最常用的元素之一,select 语句有很多属性可以详细配置每一条语句。

    常用属性如下:

     id 属性:命名空间中唯一的标识符,与  DAO 接口中某一方法名一一对应,可以被用来引用这条语句。DAO 接口中的方法名与映射文件中的 SQL 语句 id 一一对应。
     resultType 属性:表示 SQL 查询语句返回值类型的完全限定名或别名。

      parameterType 属性:表示查询语句传入参数的类型的完全限定名或别名。它支持基础数据类型和复杂数据类型。说明:参数传递使用 #{参数名}  
        基础数据类型:int、String、Date等,只能传入一个,通过#{参数名}即可获取传入的值。
        复杂数据类型:Java实体类、Map等,通过 #{属性名} 或者 #{map 的 keyName}即可获取传入值

 

    说明:

      1、insert、update、delete 元素的 id 属性、parameter 属性与 select 元素用法一样。

      2、insert、update、delete 元素中均没有 resultType 属性,只有查询操作需要对返回结果类型(resultType / resultMap)进行相应的指定。

 

Mybatis 的 SQL 映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="">

    <select id=""  resultType=""  parameterMap="">
              SQL 语句  ......
    </select>
    
</mapper>

 

 

 

 

原文地址:https://www.cnblogs.com/wxdestiny/p/9744615.html