Mybatis-学习笔记(5)动态SQL
1、Mybatis采用功能强大的基于ONGL的表达式来完成动态SQL。
2、ONGL常用的元素有:

1》if
<if test="id != null ">
and id = #{id}
</if>
Mybatis中,#{id}表达式获取参数有两种方式:一是从HashMap中获取集合中的property对象;二是从Java Bean中获取property对象。
2》choose
<choose>
<when test="id != null">
and id = #{id}
</when>
<when test="loginname != null and password != null">
and loginname = #{loginname} and password = #{password}
</when>
<otherwise>
and sex = '男'
</otherwise>
</choose>
3》where
<where>
<if test="state != null ">
state = #{state}
</if>
<if test="id != null ">
and id = #{id}
</if>
<if test="loginname != null and password != null">
and loginname = #{loginname} and password = #{password}
</if>
</where>
where元素知道只有在一个以上的if条件有值的情况下才去插入where子句。而且,如果最后的内容是“and”或“or”开头,where元素也知道如何将它们去掉。
4》set
update tb_employee
<set>
<if test="loginname != null">loginname=#{loginname},</if>
<if test="password != null">password=#{password},</if>
<if test="name != null">name=#{name},</if>
<if test="sex != null">sex=#{sex},</if>
<if test="age != null">age=#{age},</if>
<if test="phone != null">phone=#{phone},</if>
<if test="sal != null">sal=#{sal},</if>
<if test="state != null">state=#{state}</if>
</set>
where id=#{id}
set元素可以动态前置set关键字,同时也会消除无关的逗号。
5》foreach
<select id="selectEmployeeIn" resultType="com.lfy.bean.Emp">
SELECT *
FROM tb_employee
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
该元素主要应用于构建in条件语句。doreach元素的功能非常强大,它允许指定一个集合,声明可以用在元素体内的集合项和索引变量。也可以指定开闭匹配的字符串以及在迭代中间放置分隔符。
6》bind
<select id="selectEmployeeLikeName" resultType="com.lfy.bean.Emp">
<bind name="pattern" value="'%' + _parameter.getName() + '%'" />
SELECT * FROM tb_employee
WHERE loginname LIKE #{pattern}
</select>
bind元素可以从ONGL表达式中创建一个变量并将其绑定到上下文。
Mybatis-学习笔记(5)动态SQL的更多相关文章
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL
- Mybatis学习笔记(六) —— 动态sql
通过mybatis提供的各种标签方法实现动态拼接sql. 需求:根据性别和名字查询用户 查询sql: SELECT id, username, birthday, sex, address FROM ...
- Mybatis学习笔记之---动态sql中标签的使用
动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...
- 1.3(Mybatis学习笔记)动态SQL
一.<if> 使用<if>可以根据具体情况来拼接SQL语句,使其更加灵活更加适应我们的需求. <if>的标签体中是需要拼接的语句,满足条件才会将其进行拼接. < ...
- Mybatis学习笔记14 - 动态sql之foreach标签
一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...
- Mybatis学习笔记10 - 动态sql之if判断
示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import java.util.List; public ...
- Mybatis学习笔记13 - 动态sql之set标签
示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public interface EmployeeMapp ...
- Mybatis学习笔记12 - 动态sql之choose(when otherwise)标签
choose (when, otherwise):分支选择:带了break的swtich-case 示例代码: 接口定义: package com.mybatis.dao; import com.my ...
- Mybatis学习笔记11 - 动态sql之trim标签
trim标签体中是整个字符串拼串后的结果.prefix="" 前缀: prefix给拼串后的整个字符串加一个前缀prefixOverrides="" 前缀覆盖: ...
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...
随机推荐
- haproxy教程
一.haproxy简介 HAProxy is a free, very fast and reliable solution offering high availability, load bala ...
- JAVA笔记20-容器之四Map接口、自动打包、泛型(重要)
一.Map接口 Map提供的是key到value的映射.key不能重复,每个key只能映射一个value. 注:重复是指equals,但用equals()方法效率低,所以此处用hashCode()方法 ...
- null转为数字的坑
在项目中,需要用到某个字段等于0时来处理逻辑 if (+item.ext === 0) {} // 前面的+号是转为数字 // 如果item.ext 为 null时, +item.ext 就等于 0 ...
- 2. ClustrixDB 文件/参数说明
一.日志/data/clustrix/log/query.log 记录节点慢SQL/错误SQL/DDL 等信息,节点分开记录 Each entry in the query.log is catego ...
- 分组统计 over(partition by
sum( CASE WHEN ISNULL(b.zl, 0) = 0 THEN C.LLZL ELSE b.zl END * c.pccd * b.sl) over(partition by b.dj ...
- ps -aux显示信息COMMAND不全
ps -aux结果: ps -auxwww结果:
- 【C++】关键字struct
网址连接 https://www.cnblogs.com/zhengfa-af/p/8144786.html 主要内容: 1. C语言中,结构体的3中不同声明和定义方式: 2. struct在C和C+ ...
- Firefox_64.0 中selenium ide_3.4.4的使用教程(实操)
说明:旧版的selenium IDE有很多功能,在新版中都去除了,很多功能都做不了. 写于:2018.12.31 一.安装selenium IDE 下载和安装这里推荐参考文章:https://blo ...
- spring cloud:feign-hystrix
producer 1. File-->new spring starter project 2.add dependency <dependency> <group ...
- 4、kubernetes资源清单快速入门190625
一.资源清单概念 资源/对象的类型 工作负载型资源:Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob, ... 服务发 ...