文档章节

MyBatis之动态sql

 瑟青豆
发布于 06/20 11:24
字数 629
阅读 15
收藏 1

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

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

上述语句在表中查询满足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:
各属性说明见代码注释,然后是测试代码:

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 22
码字总数 38004
作品 0
石家庄
私信 提问
基于注解的Mybatis mapper 接口注意事项

原文:http://my.oschina.net/doctor2014/blog/411580 基于注解的Mybatis mapper 接口功能没有mapper xml配置文件丰富,而且动态sql语句的灵活性不能和xml配置相比。 这里只说一下基于注解的...

Beaver_
2015/05/06
6.3K
2
MyBatis体系大纲

1.MyBatis优势 2.MyBatis总体流程 3.MyBatis功能架构 4.MyBatis框架架构 5.MyBatis动态SQL语句 5.1.MyBatis动态传入表名,字段名参数 要实现动态传入表名、列名,需要做如下修改 添加属性sta...

微尘鉴
2015/09/17
72
0
MyBatis基础学习:动态SQL和SQL语句构建器类

Mybatis介绍 MyBatis(http://www.mybatis.org/) 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可...

Jia
2016/09/22
1K
0
Java面试----2018年MyBatis常见实用面试题整理

Java面试----2018年MyBatis常见实用面试题整理 1、什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 2、讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存...

优惠券活动
04/29
0
0
Mybatis3.4.x技术内幕(十七):Mybatis之动态Sql设计原本(上)

上一篇博文中,介绍了可复用的sql片段,通过<include>标签进行引入,而<include>标签内一般存放的是静态sql,其实,sql片段也是可以放置动态sql标签内容。 1. Mybatis支持的动态sql及基本用法...

祖大俊
2016/08/20
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

springboot中filter的用法

一、在spring的应用中我们存在两种过滤的用法,一种是拦截器、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在springmvc中的用法基本上一样,只是配置上面有点区别。 二、f...

xiaomin0322
1分钟前
0
0
java项目修改了更换了jdk版本报错进行修改

java项目原来用的是1.8版本的,改成1.7版本后,项目会报错,要进行的修改是 然后是clean一下项目,然后是选中项目的buildpath,然后是configurebuildpath,然后是看jdk是否进行修改...

myAll_myAll
13分钟前
0
0
Gartner 2018 数据库系列报告发布 巨杉数据库连续两年入选

近期,Gartner陆续发布了2018年的数据库系列报告,包括《数据库魔力象限》《数据库核心能力》以及《数据库推荐报告》。其中,SequoiaDB巨杉数据库作为业界领先的金融级分布式交易型数据库产品...

巨杉数据库
15分钟前
0
0
Navicat闲置一段时间卡死问题的解决

先关闭连接,再右键点击所需要设置的链接,进入编辑连接,进入高级项,勾选保持连续间隔(秒):时间设置短一些,比如30秒,完成!!

joyStalker
15分钟前
0
0
理解Java中的弱引用(Weak Reference)

1. What——什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference<T>类,我们首先来看一下官方文档对它做的说明: 弱引用对象的存在不会阻止它所指向的对象变被垃圾回收器回...

绝地逢生
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部