Mybatis 中xml和注解映射,分分钟搞定

MyBatis 提供了XML配置和注解配置两种方式 。今天就来搞搞这两种方式是如何实现的 。

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在 。由于它的异常强大,映射器的 XML 文件就显得相对简单 。如果拿它跟具有相同功能的JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码 。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码 。
来自官网 。
Mybatis映射九个顶级元素:
Mybatis 中xml和注解映射,分分钟搞定

文章插图
 
  • mApper:映射文件的根节点,只有一个属性namespace(命名空间),作用如下:
  • 用于区分不同的mapper,全局唯一 。
  • 绑定DAO接口,即面向接口编程,当绑定一个接口,就不用写此接口的实现类,会通过接口的完全限定名找到对应的mapper配置来执行SQL语句,所以,namespace的命名必须要写接口的完全限定名 。
  • cache:配置给定命名空间的缓存 。
  • cache-ref:从其他命名空间引用缓存配置 。
  • resultMap:用来描述数据库结果集和对象的对应关系 。
  • sql:可以重用的SQL块,也可以被其他语句引用 。通常是存放一些公用性的SQL 。
  • insert:映射插入语句 。
  • update:更新映射语句 。
  • delete:删除映射语句 。
  • select:映射查询语句 。
 
Mybatis 中xml和注解映射,分分钟搞定

文章插图
 
xml方式九个顶级映射元素对应标签:
<mapper namespace="com.tian.mybatis.mapper.UserMapper"><resultMap id="" type=""></resultMap><sql id=""></sql><cache blocking="" ></cache><cache-ref namespace=""></cache-ref><select id="selectUserById"></select><insert id="insert" ></insert><update id=""></update><delete id=""></delete></mapper>select详解 
Mybatis 中xml和注解映射,分分钟搞定

文章插图
 
可以看得出,后面可选项还是蛮多的 。下面是官网对每项的解释 。
Mybatis 中xml和注解映射,分分钟搞定

文章插图
 
select使用案例<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.tian.mybatis.mapper.UserMapper"><select id="selectUserById"resultType="com.tian.mybatis.entity.User" parameterType="int" >select * from m_user where id = #{id}</select></mapper>
  • id必须在这个Mapper中是唯一的,可以被用来引用这条语句,这个id必须与之对应的是XxxMapper.JAVA中的方法,必须是一一对应 。
  • 返回类型:User类型,resultType:查询语句返回结果类型的完全限定名或别名 。别名使用方式和parameterType是一样的 。
  • 参数:整形,表示查询语句传入参数的类型和完全限定名或别名 。支持基础数据类型和复杂数据类型 。
#{参数名}:告诉MyBatis生成的PreparedStatement参数,相对于JDBC中,该参数被标识为‘?’ 。
别名与参数映射类型如下:
Mybatis 中xml和注解映射,分分钟搞定

文章插图
 
返回类型中别名的使用,注意:
如果是我们的entity类,那么resultType是无法使用别名的,只能使用resultMap才可以使用别名 。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.tian.mybatis.mapper.UserMapper"><resultMap id="User" type="com.tian.mybatis.entity.User"/><select id="selectUserById"resultMap="User" parameterType="int" >select * from m_user where id = #{id}</select></mapper>但是如果使用的上面映射表里,也可以直接使用别名 。
数据库里有两条数据:
Mybatis 中xml和注解映射,分分钟搞定

文章插图
 
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.tian.mybatis.mapper.UserMapper"><select id="countUser" resultType="int">select count(1) from m_user</select></mapper>


推荐阅读