Mybatis常用标签详解

  • trim

    <trim prefix="" suffix="" prefixOverrides="" suffixOverrides=""></trim>
    属性:
    	prefix:给sql语句拼接前缀
    	suffix:给sql语句拼接后缀
    	prefixOverrides:去除sql语句前由prefixOverrides指定的的关键字或者字符
    	suffixOverrides:去除sql语句后由suffixOverrides指定的的关键字或者字符
    
    示例1:
    	当第一个条件不生效时,prefixOverrides会将符合条件紧跟WHERE关键词的if中语句前的AND关键词去掉
    <trim prefix="WHERE" prefixOverrides="AND">
    	<if test="state != null">
    	  state = #{state}
    	</if> 
    	<if test="title != null">
    	  AND title like #{title}
    	</if>
    	<if test="author != null and author.name != null">
    	  AND author_name like #{author.name}
    	</if>
    </trim>
    
    示例2:
    	新增时动态添加列名。若最后一个条件不生效,语句就会多出一个逗号。suffixOverrides则会将其去掉
    INSERT INTO user
    <trim prefix="(" suffix=")" suffixOverrides=",">
    	<if test="id != null">
    	  id ,
    	</if> 
    	<if test="name != null">
    	  name ,
    	</if>
    	<if test="author != null and author.age != null">
    	  age
    	</if>
    </trim>
    values (....)
    
    示例3
    	修改时可动态拼接需要set的列
    update xazq_system_mail
    <trim prefix="set" suffixOverrides=",">
        <trim prefix="from =case" suffix="end,">
            <foreach collection="list" item="i" index="index">
                <if test="i.standardFromUuid!=null">
                when id=#{i.id} then #{i.standardFromUuid}
                </if>
            </foreach>
        </trim>
        <trim prefix="to =case" suffix="end,">
            <foreach collection="list" item="i" index="index">
                <if test="i.standardToUuid!=null">
                when id=#{i.id} then #{i.standardToUuid}
                </if>
            </foreach>
        </trim>
    </trim>
    WHERE ....
    
  • foreach

    <foreach collection="" index="" item="" open="" separator="" close=""></foreach>
    	separator表示在每次迭代之间以什么符号作为分隔符,
        item表示集合中每一个元素进行迭代时的别名,
        index表示在迭代过程中,每次迭代到的下标位置,
        open表示循环语句以什么开始,
        close表示循环语句以什么结束。
    
    1. parameterType传入一个list
    		List list = new ArrayList();
    		
    <select id="test" parameterType="java.util.List" resultType="User">
            select * from user where id in
    	<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
            #{item}
    	</foreach>
    </select>
    
    2. parameterType传入一个数组
    		int[] ids = new int[3];
    		
    <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="User">
      	select * from user where id in
      <foreach collection="ids" index="index" item="item" open="(" separator=","close=")">
      	#{item}
      </foreach>
    </select>
    
    3. 传入参数为多个又需要使用foreach循环使用,可将所有参数封装为一个map传入
    		Map<String,Object> map = new HashMap<>();
    
      <update id="updateBatch" parameterType="java.util.Map">
          update user
          <trim prefix="set" suffixOverrides=",">
              <trim prefix="name =case" suffix="end,">
                  <foreach collection="map" item="i" index="index">
                      <if test="i.standardFromUuid!=null">
                      	when id=#{i.id} then #{i.standardFromUuid}
                      </if>
                      </foreach>
                      </trim>
                      <trim prefix="standard_to_uuid =case" suffix="end,">
                      <foreach collection="list" item="i" index="index">
                      <if test="i.standardToUuid!=null">
                      	when id=#{i.id} then #{i.standardToUuid}
                      </if>
                      </foreach>
                      </trim>
                  </foreach>
              </trim>
          </trim>
          where id in
          <foreach collection="map" item="i" open="(" separator="," close=")">
          	#{i.id}
          </foreach>
      </update>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值