java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))

什么是动态sql

mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

标签介绍

1.if标记if是动态sql中最最常用的标记

动态 SQL 通常要做的事情是有条件地包含 where 子句的一部分。常用形式:

<select id="**" resultType="**"     parameterType="**">
    select * from table where 1=1
        <if test="attr!=null">
            and attrColumn>#{attr}
        </if>
 </select>

2.choose, when, otherwise标记

有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素。常用形式:

select * from table where 1=1
<choose>
       <when test="attr1!=null">
           and attrColumn like #{attr}
       </when>
        ……      
      <otherwise>
           and attr2 is not null
      </otherwise>
</choose>

3.where标记

select * from table 
<where>
    <if test="attr1!=null">
        attr1Column like #{attr1}
    </if>
    <if test="attr2!=null">
        and attr2Column =#{attr2}
    </if>
</where>

可以看到,使用where标记有两个好处:

  •  不再需要在where后面加上1=1这个条件
  • 智能处理and

4.foreach标记

foreach标记是最为强大的一个标记,最基本的功能是用来实现对一个集合进行遍历查询,循环赋值。通常是在构建 IN 条件语句的时候使用。

foreach标记主要是使用一下一些属性标记来实现: 

  •   item:迭代的内容 
  •   collection:循环的集合或指定的类型 
  •   separator:元素之间的分隔符 
  •   open:开始符,可选属性 
  •   close:闭合符,可选属性,一般与open联合使用 
  •   index:list的序号,可选属性 

使用foreach进行遍历查询的常用形式:

select * from table
<where>
        id in
        <foreach item="item" index="index"  collection="list"
            open="(" separator="," close=")">
            #{item}
        </foreach>
    </where>

 

需求

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

mapper.xml

测试代码

sql片段

1.需求

将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。方便程序员进行开发。

2.定义sql片段

3.引用sql片段

在mapper.xml中定义的statement中引用sql片段:

 

foreach(了解)

向sql传递数组或List,mybatis使用foreach解析

1.需求

在用户查询列表和查询总数的statement中增加多个id输入查询。

sql语句如下:

两种方法:

  • SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
  • SELECT * FROM USER WHERE id IN(1,10,16)

2.在输入参数类型中添加List<Integer> ids传入多个id

3.修改mapper.xml

WHERE id=1 OR id=10 OR id=16

在查询条件中,查询条件定义成一个sql片段,需要修改sql片段。

4.测试代码

5.另外一个sql的实现

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值