MyBatis动态SQL(一)
MyBatis 的强大特性之一便是它的动态 SQL。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。
1.if标签
映射文件配置:
<select id="query" resultMap="baseMap" parameterType="user">
select * from t_user
<!-- 这里的1=1方便测试 -->
where 1=1
<!-- 条件if标签通过判断name参数是否为空决定是否使用这个SQL语句 -->
<if test="name!=null" >
and name=#{name}
</if>
</select>
测试代码name=null的情况下:
@Test
public void test() {
List<User> list = mapper.query(new User());
for (User user : list) {
System.err.println("在name=null的情况下"+user);
}
}
测试结果:
测试代码name!=null的情况下:
@Test
public void test() {
User testUser = new User();
testUser.setName("zhangsan");
List<User> list = mapper.query(testUser);
for (User user : list) {
System.err.println("在name=null的情况下"+user);
}
}
2. choose,when,otherwise
choose选择语句,差不多等同于java语句中的switch语句。通过创建多个标签元素来选择符合要求的元素。when表示在满足某种情况下调用该内容,otherwise表示在所有情况都不满足的情况下调用的内容。
配置标签代码使用方式:
<select id="query" resultMap="baseMap" parameterType="user">
select * from t_user
where 1=1
<!-- 如果满足其中的条件就调用其中的SQL语句 -->
<choose>
<when test="no!=null">
and no=#{no}
</when>
<when test="name!=null">
and name=#{name}
</when>
<otherwise>
<if test="age!=null" >
and age=#{age}
</if>
</otherwise>
</choose>
</select>
3.where
上述配置代码中为了方便测试我都在where后面添加1=1来方便测试,但是有时候我们对where是否使用也需要动态决定。这个时候就可以使用where标签来解决这个问题。
<select id="queryById" resultType="user" parameterType="int">
select *
from t_user
<where>
<if test="no!=null" >
no=#{no}
</if>
</where>
</select>
这里满足条件就会自动添加where并调用其中的SQL代码。
4.set
set标签主要用于SQL更新UPDATE代码中,用法如下代码:
<update id="update" parameterType="user">
update t_user
<!-- 通过set来动态设置更新的参数 -->
<set>
<if test="name!=null">name=#{name}</if>
<if test="age!=null">age=#{age}</if>
</set>
where no = #{no}
</update>
5.trim
trim标签是一个格式化标签,可以用来代替set或者where标签的功能。具体用法如下代码:
<update id="update" parameterType="user">
update t_user
<!-- <set>
<if test="name!=null">name=#{name}</if>
<if test="age!=null">age=#{age}</if>
</set> -->
<!-- prefix表示调用SQL语句时在最前面添加的前缀
prefixOverrides表示调用SQL语句时去掉的第一个指定内容
suffix表示调用SQL语句时在最后面添加的后缀
suffixOverride表示调用SQL语句时去掉的最后一个指定内容
-->
<trim prefix="set" prefixOverrides="and | or">
<if test="name!=null"> and name=#{name}</if>
<if test="age!=null"> or age=#{age}</if>
</trim>
where no = #{no}
</update>
通过这个trim获得了跟set一样的效果,不过更具有灵活性。
MyBatis动态SQL(一)的更多相关文章
- mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
- 自己动手实现mybatis动态sql
发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...
- Mybatis动态SQL单一基础类型参数用if标签
Mybatis动态SQL单一基础类型参数用if标签时,test中应该用 _parameter,如: 1 2 3 4 5 6 <select id="selectByName" ...
- 超全MyBatis动态SQL详解!( 看完SQL爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...
- Mybatis动态SQL简单了解 Mybatis简介(四)
动态SQL概况 MyBatis 的强大特性之一便是它的动态 SQL 在Java开发中经常遇到条件判断,比如: if(x>0){ //执行一些逻辑........ } Mybatis应用中,S ...
- mybatis原理分析学习记录,mybatis动态sql学习记录
以下个人学习笔记,仅供参考,欢迎指正. MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转 ...
- mybatis 动态sql和参数
mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...
- MyBatis动态SQL之一使用 if 标签和 choose标签
bootstrap react https://segmentfault.com/a/1190000010383464 xml 中 < 转义 to thi tha <if test=&qu ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
目录 0 一起来学习 mybatis 1 数据准备 2 if 标签 2.1 在 WHERE 条件中使用 if 标签 2.1.1 查询条件 2.1.2 动态 SQL 2.1.3 测试 2.2 在 UPD ...
随机推荐
- 微信小程序示例
http://www.cnblogs.com/ihardcoder/p/6097941.html http://www.wxapp-union.com/ http://blog.csdn.net/li ...
- Sublime setting 个性修改
{ // 编辑器字体大小 "font_size": 10, // 设置行间距 "line_padding_bottom":5, "line_paddi ...
- What every computer science major should know 每一个计算机科学专业的毕业生都应该都知道的
Given the expansive growth in the field, it's become challenging to discern what belongs in a modern ...
- Docker Tomcat部署
1.下载tomcat镜像 docker pull tomcat 2.上传项目 /etc/tomcat/webapps/ 3.启动tomcat容器 docker run -d --name tomcat ...
- Linux监听的网络服务$ netstat -ntlp$ netstat -nulp$ netstat -nxlp
我一般都分开运行这三个命令,不想一下子看到列出一大堆所有的服务.netstat -nalp倒也可以.不过我绝不会用 numeric 选项 (鄙人一点浅薄的看法:IP 地址看起来更方便). 找到所有正在 ...
- 【CODEVS】倒水问题
题目描述: 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知 ...
- Leetcode56. Merge Intervals合并区间
给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] ...
- 2019阿里云开年Hi购季新用户分会场全攻略!
2019阿里云云上Hi购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段.3月04日-3月16日的新购满返+5折抢购阶段.3月16日-3 ...
- 【linux配置】在VMware中为Redhat HAT配置本地yum源
在VMware中为Redhat HAT配置本地yum源 今天准备使用CM安装大数据环境,到需要几台机器都使用同一套yum源才可以,所以想到将Redhat镜像文件拷贝到虚拟机中,在挂起使用,最后通过ht ...
- opencv2.4.9配置+VS2013
参见:浅墨的(红的的为变动部分) http://blog.csdn.net/poem_qianmo/article/details/19809337 本系列文章由@浅墨_毛星云 出品,转载请注明出处. ...