title: MyBatis之动态sql
tags: MyBatis
categories: MyBatis
若图片无法显示,请前往我的博客查看,相应文章链接:http://codingxiaxw.cn/2016/11/09/36-mybatis%E5%8A%A8%E6%80%81sql/
我们需要知道的是,使用mybatis重点是对sql的灵活解析和处理。在原先的UserMappser.xml中,我们这样查询表中满足条件的记录 :
上述语句在表中查询满足username
条件的记录,这样写查询语句有一个弊端,就是该语句只能通过username查询数据库。当我们在多条件中查询时,如果不需要username条件而是需要其它多个查询条件时,那UserMapper.xml文件中的这个查询条件就没用了。
需求:将自定义查询条件查询用户列表和查询用户列表总记录数改为动态sql。需要使用if标签和where标签。
1.if和where
使用if标签和where标签在UserMapper.xml中添加如下内容:
修改自定义查询条件查询用户列表代码:
[图片上传失败...(image-308993-1526379499869)]
修改自定义查询条件查询用户列表总记录数代码:
[图片上传失败...(image-81f269-1526379499869)]
发现
和
在上述两个查询语句中重复的代码出现了两次,那这里我们是否可以把相同的sql片段拿出来单独写在一个sql片段中然后再在不同的查询语句中应用呢?答案是肯定的,看下面的sql片段。
2.sql片段
通过sql片段可以将通用的sql语句抽取出来,单独定义,在其它的statement中可以引用sql片段。其中通用的sql语句,一般用在:where条件、查询列。
2.1定义sql片段
在UserMapper.xml中添加
标签代表sql片段:
[图片上传失败...(image-4c7432-1526379499869)]这样就完成了sql片段的定义,然后才能使用sql片段。
2.2使用sql片段
使用
标签对上面定义的sql片段加以引用:
[图片上传失败...(image-85fcc-1526379499869)]
和
[图片上传失败...(image-64f3c0-1526379499869)]
测试类代码不变,这样我们便完成了对sql片段的引用。
有时候我们希望查询语句是这样select id,username,birthday from user where username like '%codingXiaxw%' and id in (1,2)
,那我们又应该在sql片段中如何添加代码呢?这时候需要用到
标签。
3.foreach标签
在statement通过foreach遍历parameterType中的集合类型。首先我们需要在UserQueryVo中定义List
并添加相应的get和set方法。
然后我们在UserMapper.xml中使用foreach修改where语句,使用foreache遍历list:[图片上传失败...(image-8d9844-1526379499870)]
各属性说明见代码注释,然后是测试代码:
[图片上传失败...(image-26f1f9-1526379499870)]
通过这5篇文章,我们便完成了MyBatis学习的基础知识。
2018.3.19更
欢迎加入我的Java交流1群:659957958。群里目前已有1800人,每天都非常活跃,但为了筛选掉那些不怀好意的朋友进来搞破坏,所以目前入群方式已改成了付费方式,你只需要支付9块钱,即可获取到群文件中的所有干货以及群里面各位前辈们的疑惑解答;为了鼓励良好风气的发展,让每个新人提出的问题都得到解决,所以我将得到的入群收费收入都以红包的形式发放到那些主动给新手们解决疑惑的朋友手中。在这里,我们除了谈技术,还谈生活、谈理想;在这里,我们为你的学习方向指明方向,为你以后的求职道路提供指路明灯;在这里,我们把所有好用的干货都与你分享。还在等什么,快加入我们吧!
2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。群2作为群1的附属群,除了日常的技术交流、资料分享、学习方向指明外,还会在每年互联网的秋春招时节在群内发布大量的互联网内推方式,话不多说,快上车吧!
4.联系
If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.
Blog@codingXiaxw's blog
Weibo@codingXiaxw
Zhihu@codingXiaxw
Github@codingXiaxw