Mysql-Mybatis常用动态Sql语句
1.<if>
<select id="" parameterType="" resultType="">
select * from user where 1 = 1
<if test="username != null">
and username = #{username}
</if>
<if test="userCode != null">
and user_code = #{userCode}
</if>
</select>
2.<choose>
<select id="" parameterType="" resultType="">
select * from user where 1 = 1
<choose>
<when test="username != null">
and username = #{username}
</when>
<when test="userCode != null">
and user_code = #{userCode}
</when>
<otherwise>
and user_id = "1"
</otherwise>
</choose>
</select>
相当于Java中的switch语句,当满足when中条件时即执行相应内容,都不满足则执行otherwise中的内容; 它是按顺序执行,只要when中只要满足一条即刻跳出choose,即:所有的when和otherwise条件中只满足一条.
3.<where>
<select id="" parameterType="" resultType="">
select * from user
<where>
<if test="username != null">
username = #{username}
</if>
<if test="userCode != null">
and user_code = #{userCode}
</if>
</where>
</select>
4.<trim>
<select id="" parameterType="" resultType="">
select * from user
<trim prefix="where" prefixOverrides="and |or"> --添加前缀where 去掉第一个and或者or
<if test="username != null">
username = #{username}
</if>
<if test="userCode != null">
and user_code = #{userCode}
</if>
</trim>
</select>
可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;
可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;
trim的此功能,我们可以非常简单的利用trim来代替where元素的功能.
5.<set>
<update id="" parameterType="">
update user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="userCode != null">
user_code = #{userCode},
</if>
</set>
where user_id = #{userId}
</update>
用于更新操作;
如果包含的语句是以逗号结束的话将会把该逗号忽略;
如果set中一个条件都不满足,即set中包含的内容为空的时候就会报错.
6.<foreach>
<select id="" resultType="">
select * from user where user_id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
item表示集合中每一个元素进行迭代时的别名;
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置;
open表示该语句以什么开始;
separator表示在每次进行迭代之间以什么符号作为分隔符;
close表示以什么结束;
在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,
该属性的值是不一样的:
-如果传入的是单参数且参数类型是一个List的时候,collection属性值为list;
-如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array;
-如果传入的参数是多个的时候,把它们封装成一个Map了,当然单参数也可以封装成map,
实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,
所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key
Mysql-Mybatis常用动态Sql语句的更多相关文章
- Mybatis中动态SQL语句中的parameterType不同数据类型的用法
Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型, 此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...
- mybatis 的动态sql语句是基于OGNL表达式的。
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- MyBatis中动态SQL语句完成多条件查询
一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...
- MyBatis 构造动态 SQL 语句
以前看过一个本书叫<深入浅出 MFC >,台湾 C++ 大师写的一本书.在该书中写到这样一句话,“勿在浮沙筑高台”,这句话写的的确对啊.编程很多语言虽然相通,但是真正做还是需要认真的学习, ...
- mysql创建存储过程动态SQL语句
DROP PROCEDURE IF EXISTS x.`wk`; DELIMITER $$ CREATE PROCEDURE `x`.`wk`() BEGIN ); ); SET t = CONCAT ...
- mysql 中常用的 sql 语句
SQL分类: DDL-----数据定义语言(CREATE--创建,ALTER--修改. DROP--删除表,DECLARE--声明) DML-----数据定义语言(SELECT--查询,DELECT- ...
- Mybatis 的动态 SQL 语句
<if>标签 我们根据实体类的不同取值,使用不同的 SQL 语句来进行查询. 比如在 id 如果不为空时可以根据 id 查询, 如果 username 不同空时还要加入用户名作为条件.这种 ...
- 阶段3 1.Mybatis_08.动态SQL_03.mybatis中动态sql语句-foreach和sql标签
foreach标签 in的查询 sql语句好写,但是传参在映射文件里面改怎么传呢 定义一个List<Integer>成员变量,然后生成get和set 定义一个新的查询方法 open:开始符 ...
- 阶段3 1.Mybatis_08.动态SQL_02.mybatis中动态sql语句-where标签的使用
这里的userSex是实体类里面的属性名,而不是数据库内的字段名称 一个老王改成性别女,为了区分一下 增加sex字段的查询 where标签 用上where和刚才的执行效果是一样的 where标签使我们 ...
- Mybatis 动态Sql语句《常用》
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...
随机推荐
- 结构型模式 - 组合模式Composite Pattern
学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 组合模式的定义与特点 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式, ...
- Unity打包资源,进行后台加载
Unity打包资源,进行后台加载 需要项目优化的pa you,这边走:Unity项目优化--Web版 一.前言 因为在下载Three.js,所以趁着这个时间写一下资源打包加载吧 小黑在刚开始学习Uni ...
- JavaScript五花八门的跳转方式
我们最常见的跳转方式是location.href = "http://www.baidu.com", 这种是最常见的,但是常常使用location.replace,location ...
- JavaScript 评测代码运行速度
一.使用 performance.now() API 在 JavaScript 中,可以使用 performance.now() API 来评测代码的运行速度.该 API 返回当前页面的高精度时间戳, ...
- SpringBoot整合Mybatis、SpringBoot整合Spring Data JPA
Springboot Mybatis <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- Tesseract图片文字识别
如何进行图文识别? 百度api收费的,自己训练模型集费时费力,有没有训练好的库,我们拿过来直接用的呢? 有,那就是tesseract. 安装 pipenv install pytesseract pi ...
- .bash_profile等配置文件
brew环境 mysql:数据库,装数据用. redis:缓存用. unrar:解压用. docker:虚拟环境用. node:某些项目依赖这个. python环境 command line tool ...
- [AI-ML]机器学习是什么?一起了解!(一)
机器学习 简单的说,机器学习是一种让计算机系统从数据中学习并自动改进的算法.通俗地说,机器学习就是让计算机从数据中"学习",并使用这些学习成果来做出决策或预测. 学术解释中,机器学 ...
- JZOJ 4319. 【NOIP2015模拟11.5】Lucas的数列
题目 思路 暴力很好打,我们显然可以先把关于 \(k\) 的式子拆开 先二项式展开,然后把外面的 \(m\) 乘进去,把 \(p\) 的分母 \(m\) 消去 \(K = (\sum_{i=1}^m ...
- vue路由中pdfjs插件使用及找不到 viewer.html解决
官方下载: https://mozilla.github.io/pdf.js/getting_started/#download 同目录下pdfjs-2.12.313-dist.zip为官方下载包 此 ...