MyBatis【六】动态sql

转载自:MyBatis之动态sql


我们需要知道的是,使用mybatis重点是对sql的灵活解析和处理。在原先的UserMappser.xml中,我们这样查询表中满足条件的记录 :

<select id="findUserList" parameterType="userQueryVo" resultType="user">
        select id,username,birthday from user where username like '${value}'
</select>
  
  
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

上述语句在表中查询满足username条件的记录,这样写查询语句有一个弊端,就是该语句只能通过username查询数据库。当我们在多条件中查询时,如果不需要username条件而是需要其它多个查询条件时,那UserMapper.xml文件中的这个查询条件就没用了。

需求:将自定义查询条件查询用户列表和查询用户列表总记录数改为动态sql。需要使用if标签和where标签。

1.if和where

使用if标签和where标签在UserMapper.xml中添加如下内容:
修改自定义查询条件查询用户列表代码:
这里写图片描述
修改自定义查询条件查询用户列表总记录数代码:
这里写图片描述
发现< where>和< if>在上述两个查询语句中重复的代码出现了两次,那这里我们是否可以把相同的sql片段拿出来单独写在一个sql片段中然后再在不同的查询语句中应用呢?答案是肯定的,看下面的sql片段。


2.sql片段

通过sql片段可以将通用的sql语句抽取出来,单独定义,在其它的statement中可以引用sql片段。其中通用的sql语句,一般用在:where条件、查询列。

2.1定义sql片段

在UserMapper.xml中添加< sql>标签代表sql片段:
这里写图片描述
这样就完成了sql片段的定义,然后才能使用sql片段。

2.2使用sql片段

使用< include>标签对上面定义的sql片段加以引用:
这里写图片描述

这里写图片描述
测试类代码不变,这样我们便完成了对sql片段的引用。

有时候我们希望查询语句是这样select id,username,birthday from user where username like ‘%codingXiaxw%’ and id in (1,2),那我们又应该在sql片段中如何添加代码呢?这时候需要用到< foreach>标签。


3.foreach标签

在statement通过foreach遍历parameterType中的集合类型。首先我们需要在UserQueryVo中定义Listids属性:
这里写图片描述
并添加相应的get和set方法。

然后我们在UserMapper.xml中使用foreach修改where语句,使用foreache遍历list:
这里写图片描述
各属性说明见代码注释,然后是测试代码:
这里写图片描述
通过这5篇文章,我们便完成了MyBatis学习的基础知识。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值