MyBatis 动态SQL

if元素:

 <if test="name != null and name != ''" >
     ...
     </if>

choose、when、otherwise元素:

<select id="findAnalystByIds" resultType="com.bob.analyst.model.Analyst"
        parameterType="com.bob.analyst.model.Analyst">
        select
        <include refid="Base_Column_List" />
        from tbl_analyst
        where 1=1 
        <choose>
          <when test="name != null and name != ''">
            and  name=#{name}
          </when>
          <when test="userCommentSum != null">
            and  user_comment_sum = #{userCommentSum}
          </when>
          <otherwise>
            and intro is not null
          </otherwise>
        </choose>
</select>   

trim、where、set元素

<select id="findAnalystByIds" resultType="com.bob.analyst.model.Analyst"
        parameterType="com.bob.analyst.model.Analyst">
        select
        <include refid="Base_Column_List" />
        from tbl_analyst
        <where>
             <if test="name != null and name != ''" >
               and  name like concat('%',#{name},'%')
             </if>
             <if test="id != null">
               and id = #{id,jdbcType=BIGINT}
             </if>
        </where>
</select>

当where元素里面的条件成立时,才会加入where这个SQL关键字组装的SQL里面,否则就不加入。
有时候需要去掉一些特殊的SQL语法,比如and、or。而是哟哦那个trim元素也可以达到预期效果:

<select id="findAnalystByIds" resultType="com.bob.analyst.model.Analyst"
        parameterType="com.bob.analyst.model.Analyst">
        select
        <include refid="Base_Column_List" />
        from tbl_analyst
        <trim prefix="where" prefixOverrides="and">
             <if test="name != null and name != ''" >
               and  name like concat('%',#{name},'%')
             </if>
        </trim>
</select>

trim元素意味着要去掉一些特殊的字符串,prefix表示语句的前缀,prefixOverrides代表需要去掉哪种字符串。

foreach 元素
循环语句,作用就是遍历集合,它能够很好地支持数组和List、Set接口的集合。

<select id="findAnalystByIds" resultType="com.bob.analyst.model.Analyst"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from tbl_analyst
        where 1=1 and is_delete = 0
        and id in
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
        #{item}  
       </foreach>
    </select>

collection:传递进来的集合
item:x当前循环中的元素
index:当前元素在集合的位置下标
open和close配置的是以什么符号将这些集合元素包装起来。
separator:是各个元素的间隔符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值