Junhc

岂止于博客

MyBatis常用标签

1. 定义SQL语句
1.1. select标签
  • id: 唯一的标识符
  • parameterType: 入参的全路径名或别名
  • resultType: 返回值类型或别名(resultType 与resultMap 不能并用)
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Object">
  select * from student where id=#{id}
</select>
1.2. insert标签
  • id: 唯一的标识符
  • parameterType: 入参的全路径名或别名
1.3. update标签
  • id: 唯一的标识符
  • parameterType: 入参的全路径名或别名
1.4. delete标签
  • id: 唯一的标识符
  • parameterType: 入参的全路径名或别名
2. 动态SQL拼接
2.1. if标签
<if test="name != null and name != ''">
  and NAME = #{name}
</if>
2.2. foreach标签
  • collection: collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为: List、数组、map集合。
  • item: 表示在迭代过程中每一个元素的别名
  • index: 表示在迭代过程中每次迭代到的位置(下标)
  • open: 前缀
  • close: 后缀
  • separator: 分隔符,表示迭代时每个元素之间以什么分隔
<select id="select" resultMap="BaseResultMap">
  select name,hobby
           from student where id in
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
      #{item}
  </foreach>
</select>
2.3. choose标签
<select id="getStudentListChoose" parameterType="Student" resultMap="BaseResultMap">     
  select * from student    
  <where>     
      <choose>     
          <when test="Name!=null and student!='' ">     
            and name like CONCAT(CONCAT('%', #{student}),'%')      
          </when>     
          <when test="hobby!= null and hobby!= '' ">     
            and hobby = #{hobby}      
          </when>                   
          <otherwise>     
            and age = 15  
          </otherwise>     
      </choose>     
  </where>     
</select>   
3. 格式化输出
3.1. where标签

当name值为null时,查询语句会出现where and的情况,
解决该情况除了将where改为“where 1=1之外,还可以利用where标签
这个where标签会知道如果它包含的标签中有返回值的话,它就插入一个where
此外,如果标签返回的内容是以andor开头的,则它会剔除掉

<select id="getStudentListWhere" parameterType="Object" resultMap="BaseResultMap">     
  select * from student      
  <where>   
   <if test="name!=null and name!='' ">     
      name like CONCAT(CONCAT('%', #{name}),'%')      
   </if>     
   <if test="hobby!= null and hobby!= '' ">     
      and hobby = #{hobby}      
   </if>  
  </where>        
</select>   
3.2. set标签

没有使用if标签时,如果有一个参数为null,都会导致错误
当在update语句中使用if标签时,如果最后的if没有执行,则或导致逗号多余错误
使用set标签可以将动态的配置set关键字,和剔除追加到条件末尾的任何不相关的逗号

<update id="updateStudent" parameterType="Object">     
  update student   
  <set>     
    <if test="name!=null and name!='' ">     
        name = #{name},      
    </if>     
    <if test="hobby!=null and hobby!='' ">     
        major = #{major},      
    </if>
    <if test="hobby!=null and hobby!='' ">     
        hobby = #{hobby}    
    </if>     
  </set>     
  where id = #{id};      
</update>   
3.3. trim标签

格式化输出,也可以通过trim标签设定或忽略前后缀来实现

  • prefix: 前缀覆盖并增加其内容
  • suffix: 后缀覆盖并增加其内容
  • prefixOverrides: 前缀判断的条件
  • suffixOverrides: 后缀判断的条件
4. 配置关联关系
4.1. collection标签
4.2. association标签
5. 定义常量及引用
5.1. sql标签
<sql id="Base_Column_List">
  ID,MAJOR,BIRTHDAY,AGE,NAME,HOBBY
</sql>
5.2. include标签
<select id="selectAll" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
    FROM
    student
    <include refid="Example_Where_Clause" />
</select>