mybatis学习笔记3 - 动态sql

mybais 的动态sql 可以说是mybatis 的核心, 可以通过表达式进行判断,动态修改sql ,下面着重说一下mybatis的动态sql

  1. if语句
  2. foreach

1.if语句 ,if 用于判断 是否满足条件

<select id="selectOrderList" resultMap="BaseResultMap" parameterType="map">
        SELECT * FROM t_smaug_order WHERE 1=1
        <if test="userId!=null && userId !=0">
            AND UserID = #{userId}
        </if>
</select>

上面的例子 如果传入的 userId 不为空 并且userId != 0 才行userId的匹配

2.foreach
向sql传递list然后循环操作 比如查询多个状态的订单 我们可以这样

select  * from t_smaug_order where state = 2 or state = 3 and state = 4

也可以这样

select * from t_smaug_order where state in(2,3,4)

上面两个语句, 一个用了or 一个 用了in ,很明显, 大部分程序猿喜欢in 但是我们怎么写sql呢? mybatis 的foreach很好的解决了这个问题 在参数中传入 List

SELECT * FROM t_smaug_shop WHERE ShopID IN
    <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
      #{item}
    </foreach>
  </select>
  • collection 指输入的参数
  • item 指遍历list的时候生成的对象
  • open 开始遍历的时候拼接的串 “(“
  • close 结束遍历的时候 “)”
  • separator 分隔符 特指 “,”

3.choose 和代码中的switch 一个意思 代码如下

<select id="selectShopEntity" resultMap="BaseResultMap" parameterType="map">
    SELECT * FROM t_smaug_shop WHERE State = 3
    <choose>
      <when test="shopId != null">
        AND ShopID = #{shopId}
      </when>
      <when test="shopName != null">
        AND ShopName = #{shopName}
      </when>
    </choose>
    <otherwise>
      AND featured = 1
    </otherwise>
  </select>

当 shopId 和 shopName 都不为null 的时候 则otherwise要发挥作用了

猜你喜欢

转载自blog.csdn.net/weixin_39526391/article/details/77150066
今日推荐