Mybatis映射文件标签详解

小灰灰 2021-12-23 14:49 506阅读 0赞

1.输入映射
ParameterType: 指定输入参数的java类型,可以使用别名或者类的全限定名。它可以接收简单类型、POJO、HashMap。
2.输出映射
**resultType:**使用resultType进行结果映射时,查询的列名和映射的POJO属性名完全一致,该列才能映射成功。
如果查询的列名和映射的pojo属性名全部不一致,则不会创建POJO对象。
如果查询的列名和映射的POJO属性名有一个一致,就会创建POJO对象。
输出单个pojo对象和pojo列表(盛放pojo对象)时,mapper映射文件中的resultType的类型是一样的,mapper接口的方法返回值不同。
输出单个pojo对象和pojo列表(盛放pojo对象)时,同样的mapper映射文件,返回单个对象和对象列表时,mapper接口在生成动态代理的时候,会根据返回值的类型,决定调用selectOne方法还是selectList方法。

3.resultMap输出映射
resultMap进行输出映射时,查询的列名和对应的POJO属性不需要一致,只需要在mapper映射文件中定义一个resultMap,把列名和属性名做一个映射关系即可,但是这列名和属性名都要是正确的。
定义resultMap:

  1. <!--
  2. [id]:定义resultMap的唯一标识
  3. [type]:定义该resultMap最终映射的pojo对象
  4. [id标签]:映射结果集的唯一标识列,如果是多个字段联合唯一,则定义多个id标签
  5. [result标签]:映射结果集的普通列
  6. [column]:SQL查询的列名,如果列有别名,则该处填写别名
  7. [property]:pojo对象的属性名
  8. -->
  9. <resultMap type="user"id="userResultMap">
  10. <id column="id_" property="id"/>
  11. <result column="username_" property="username"/>
  12. <result column="sex_" property="sex"/>
  13. </resultMap>

4.SQL片段
Mybatis提供了SQL片段的功能,可以提高SQL的可重用性。

定义SQL片段
使用sql标签来定义一个SQL片段

  1. <!-- 定义SQL片段 -->
  2. <!--
  3. [sql标签]:定义一个SQL片段
  4. [id]:SQL片段的唯一标识
  5. 建议:
  6. 1、SQL片段中的内容最好是以单表来定义
  7. 2、如果是查询字段,则不要写上SELECT
  8. 3、如果是条件语句,则不要写上WHERE
  9. -->
  10. <sql id="selectUserSql">
  11. id,username,sex,birthday,address
  12. </sql>

引用SQL片段
使用 来引用SQL片段:

  1. <!-- 根据用户id来查询用户信息(使用SQL片段) -->
  2. <!--
  3. [include标签]:引用已经定义好的SQL片段
  4. [refid]:引用的SQL片段id
  5. -->
  6. <select id="findUserByIdSql"parameterType="int" resultType="user">
  7. SELECT <include refid="selectUserSql"/> FROM USER WHEREid=#{id}
  8. </select>

5.动态SQL
动态标签有:if、where、foreach、set等。

If标签作为判断入参来使用的,如果符合条件,则把if标签体内的SQL拼接上。
注意:用if进行判断是否为空时,不仅要判断null,也要判断空字符串‘’;
例如:

  1. <!--
  2. [if标签]:进行动态判断,如果成功则把if标签内的内容拼接到原有SQL上
  3. [test]:填写判断表达式
  4. -->
  5. <select id="findUser4If"parameterType="user" resultType="user">
  6. SELECT * FROM USER WHERE sex=#{sex}
  7. <if test="username != null and username != ''">
  8. AND username LIKE '%${username}%'
  9. </if>
  10. </select>

Where
Where标签可以自动处理它后面的第一个and

  1. <!-- 根据查询条件来查询用户信息,查询条件可能会有性别或者用户名称,有可能什么没有。(学习where标签) -->
  2. <!--
  3. 通过动态SQL可以看出,为了保证SQL语句的正确性,需要在where 后面添加没有任何意义的1=1
  4. [where标签]:使用它可以去掉它后面的第一个and,这样就可以保证SQL的正确性了
  5. -->
  6. <select id="findUser4Where"parameterType="user" resultType="user">
  7. SELECT * FROM USER
  8. <where>
  9. <if test="sex != nulland sex != ''">
  10. AND sex=#{sex}
  11. </if>
  12. <if test="username !=null and username != ''">
  13. AND username LIKE '%${username}%'
  14. </if>
  15. </where>
  16. </select>

Foreach
向sql传递数组或List时,mybatis使用foreach解析数组里的参数并拼接到SQL中。

  1. <!--
  2. [foreach标签]:表示一个foreach循环
  3. [collection]:集合参数的名称,如果是直接传入集合参数,则该处只能填写[list]。
  4. [item]:定义遍历集合之后的参数名称
  5. [open]:开始遍历之前需要拼接的SQL串
  6. [close]:结束遍历之后需要拼接的SQL串
  7. [separator]:遍历出的每个对象之间需要拼接的字符
  8. -->
  9. <select id="findUsersByIdListForEach"parameterType="list" resultType="user">
  10. SELECT * FROM USER
  11. <where>
  12. <if test="list != nulland list.size > 0">
  13. <foreach collection="list"item="id" open="AND id IN(" close=")"separator=",">
  14. #{id}
  15. </foreach>
  16. </if>
  17. </where>
  18. </select>

Set
与where标签用法类似,set标签会去掉它后面第一个半角逗号,

发表评论

表情:
评论列表 (有 0 条评论,506人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis映射详解

    Mybatis映射详解 在最近的工作中,碰到一个比较复杂的返回结果,发现简单映射已经解决不了这个问题了,只好去求助百度,学习mybatis复杂映射应该怎么写,将学习笔记结