Mybaits动态Sql
什么是动态SQL?
MyBatis的强大之处便是它的动态SQL,如果你使用JDBC那么在根据不同条件查询时,拼接SQL语句是多么的痛苦。 比如查询一个学生信息,可以根据学生的姓名,性别,班级,年龄,学历等信息来查询,并且多个条件可以任意组合。 而MyBatis中集成了非常强大的 OGNL表达式,可以帮助我们解决这个问题。
if标签
if标签作为mybatis动态sql中的条件判断,它可以判断你是否传入某个字段的值以决定你是否执行这条sql语句。
<select id="selectIf" parameterType="Map" resultMap="Employee">
select * from tal_employee where 1=1
<if test="lastName!=null and lastName!=''">
and last_name=#{lastName},
</if>
<if test="email!=null and email!=''">
and email=#{email},
</if>
<if test="gender!=null and gender!=''">
and gender=#{gender},
</if>
</select>
使用IF标签可以完成我们的动态sql语句并且,我们很多时候可能判断这个的时候却又不判断那个,我们只好分成几个方法写,有了这个if标签我们就可以很好根据业务需求完成自己的语句拼接合并成一个方法。
where标签
where标签可以替代if和choose标签,不需要添加多余的where 1=1条件。当where中的条件没有一个满足时,不输出where关键字。如果条件满足,会去掉第一个开头的and或者or。
<select id="findAll" resultMap="Employee" parameterType="Map">
select * from tal_employee
<!-- 使用where会去除前面 and/or -->
<where>
<if test="lastName!=null and lastName!=''">
and last_name=#{lastName}
</if>
<if test="email!=null and email!=''">
and email=#{email}
</if>
<if test="gender!=null and gender!=''">
and gender=#{gender}
</if>
</where>
</select>
choose标签
有些时候,我们不想用到所有的条件语句,而只想从中择其一二。 choose标签为Mybatis中的提供多重条件判断,使用when和otherwise标签进行条件判断,多个条件中只有一个被执行。
<select id="chooseTest" parameterType="Map" resultMap="Employee">
select * from tal_employee
<choose>
<when test="lastName != null and lastName != ''">
and last_name like concat('%',#{lastName},'%')
</when>
<when test="gender != null and gender != ''">
and gender = #{gender}
</when>
<!-- 如果上面两个条件不成立,那么会选择otherwise标签相当于ifelse -->
<otherwise>
and id = #{id}
</otherwise>
</choose>
</select>
set标签
set标签主要用于在update更新值时,动态添加更新的列,如果列没有值则不添加。避免使用多余的,号。
<update id="update" parameterType="Map">
update tal_employee
<!-- 使用set会去除末尾逗号 -->
<set>
<if test="lastName!=null and lastName!=''">
last_name=#{lastName},
</if>
<if test="email!=null and email!=''">
email=#{email},
</if>
<if test="gender!=null and gender!=''">
gender=#{gender},
</if>
</set>
where id = #{id}
</update>
有了set这个标签就想指定更新那个字段就是那个字段,高端大气上档次。
trim标签
where默认是将第一个的and或者or去掉,set是将更新中的,去掉,如果用户想自定义一些规则,则需要使用另外一个自定义标签<trim>。

<!-- 替代set标签 -->
<trim prefix="set" suffixOverrides=",">
<if test="lastName!= null"></if>
</trim>
<!-- 替代where标签 -->
<trim prefix="where" prefixOverrides="and|or">
<if test="lastName!= null"></if>
</trim>
foreach标签
foreach标签这个标签是用来迭代我们的集合对象,它支持list,array,map。它有属性:
collection:循环集合或指定类型
item:每次迭代的结果
separator:设置分隔符
open:开始符号(前缀)可选
close:结束符号(后缀)可选
index:list和数据的序号,可选
<select id="manyID" parameterType="List" resultMap="Employee">
select * from tal_employee where id
in
<foreach collection="list" item="id" open="(" close=")"
separator=",">
#{id}
</foreach>
</select>
SQL标签
用来定义常量,通过include来引用
<sql id="select">
select * from tal_employee
</sql>
<select id="findAll" resultMap="Employee">
<!--select * from tal_employee -->
<!-- 引入已经定义好的sql -->
<include refid="select"></include>
</select>
Mybaits动态Sql的更多相关文章
- JAVA框架 Mybaits 动态sql
动态sql 一:if标签使用: 我们在查询的时候,有时候由于查询的条件的不确定性,导致where的后面的条件的不同,这时候就需要我们进行where后面的条件进行拼接. Mapper配置文件: < ...
- mybaits动态SQL中的DECIMAL
数据库:mysql数据库字段类型:decimal(11,2)java程序类型:java.math.BigDecimal 使用mybatis的动态语句 <if test ="money! ...
- MyBaits动态sql语句
1 在接口中书写方法 public interface EmployeeMapperDynamicSQL { public List<Employee> getEmpsTestInnerP ...
- mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- [刘阳Java]_MyBatis_动态SQL标签用法_第7讲
1.MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 2.MyBatis中用于实现动态SQL的元素主要有 if choose(when,otherwi ...
- Mybatis解析动态sql原理分析
前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...
- 【转】mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
转自:除非申明,文章均为一号门原创,转载请注明本文地址,谢谢! 转载地址:http://blog.csdn.net/kutejava/article/details/9164353#t5 1. if ...
- 自己动手实现mybatis动态sql
发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...
- mybatis 动态sql和参数
mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...
随机推荐
- webpack指定第三方模块的查找路径
通常我们会使用一些地方模块在我们的项目中,比如bootstrap import 'bootstrap' 导入的bootstrap默认会查找当前目录的node_modules文件,但是如果这个文件没有, ...
- Java创建文件和文件夹
java代码: import java.io.*;//导入所需的包public class IOTest {//类 public static void main(String[] args){//主 ...
- vue 学习笔记—axios(替代vue-resource)
一.使用 1. 引入CDN的方式 https://unpkg.com/axios@0.16.2/dist/axios.min.js 或者 npm方式 npm install axios --sa ...
- vue2.0安装
vue2.0环境安装 参考网站http://www.open-open.com/lib/view/open1476240930270.html (以上博客vue init webpack-simple ...
- openstack Q版部署-----安装报错问题
1.实例开机提示找不到磁盘Booting from Hard Disk... GRUB. 开启 CPU 虚拟化支持. 将计算节点 nova.conf 配置修改如下即可: [libvirt] cpu_m ...
- python基础-----变量和简单数据类型
初识变量 1.变量命名规则: a.字母 b.数字(不能开头) c.下划线 ps.硬性规定,命名必须是字母,数字,下划线,且不能以数字开头. 软性规则,以下划线分割 2.实例: a.写法: age_of ...
- 20165231 实验一 Java开发环境的熟悉
实验报告封面 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:王杨鸿永 学号:20165231 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 ...
- 【VMware vSphere】ESXi系统设置静态IP
写在前面: 为了方便管理,一般将ESXi系统的IP设置为静态 ESXi6.5系统和6.0系统类似,这里以ESXi6.0系统为例 1, 进入系 ...
- Caching漫谈--关于Cache的几个理论【转】
转自:https://www.cnblogs.com/asis/p/cache-pattern.html 如今缓存是随处可见了,如果你的程序还没有使用到缓存,那可能是你的程序并发量很低,或对实时性要求 ...
- ios webview调试
chrome://inspect/#devices if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) { WebView.setWe ...