当前位置: 首页 > news >正文

【MyBatis】动态SQL

9、动态SQL

Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。

9.1、if

if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中的内容不会执行

<!--List<Emp> getEmpListByCondition(Emp emp);-->
<select id="getEmpListByMoreTJ" resultType="Emp">select * from t_emp where 1=1<if test="ename != '' and ename != null">and ename = #{ename}</if><if test="age != '' and age != null">and age = #{age}</if><if test="sex != '' and sex != null">and sex = #{sex}</if>
</select>

9.2、where

where和if一般结合使用:

  1. 若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
  2. 若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的and去掉

注意:where标签不能去掉条件最后多余的and

<select id="getEmpListByMoreTJ2" resultType="Emp">select * from t_emp<where><if test="ename != '' and ename != null">ename = #{ename}</if><if test="age != '' and age != null">and age = #{age}</if><if test="sex != '' and sex != null">and sex = #{sex}</if></where>
</select>

9.3、trim

trim用于去掉或添加标签中的内容

常用属性:

prefix:在trim标签中的内容的前面添加某些内容

prefixOverrides:在trim标签中的内容的前面去掉某些内容

suffix:在trim标签中的内容的后面添加某些内容

suffixOverrides:在trim标签中的内容的后面去掉某些内容

<select id="getEmpListByMoreTJ" resultType="Emp">select * from t_emp<trim prefix="where" suffixOverrides="and"><if test="ename != '' and ename != null">ename = #{ename} and</if><if test="age != '' and age != null">age = #{age} and</if><if test="sex != '' and sex != null">sex = #{sex}</if></trim>
</select>

更多关于trim标签的资料可以参考: https://www.cnblogs.com/zhihongming/p/15627939.html

9.4、choose、when、otherwise

choose、when、 otherwise相当于if…else if…else

<!--List<Emp> getEmpListByChoose(Emp emp);-->
<select id="getEmpListByChoose" resultType="Emp">select <include refid="empColumns"></include> from t_emp<where><choose><when test="ename != '' and ename != null">ename = #{ename}</when><when test="age != '' and age != null">age = #{age}</when><when test="sex != '' and sex != null">sex = #{sex}</when><when test="email != '' and email != null">email = #{email}</when></choose></where>
</select>

9.5、foreach

<!--int insertMoreEmp(List<Emp> emps);-->
<insert id="insertMoreEmp">insert into t_emp values<foreach collection="emps" item="emp" separator=",">(null,#{emp.ename},#{emp.age},#{emp.sex},#{emp.email},null)</foreach>
</insert><!--int deleteMoreByArray(int[] eids);-->
<delete id="deleteMoreByArray">delete from t_emp where<foreach collection="eids" item="eid" separator="or">eid = #{eid}</foreach>
</delete><!--int deleteMoreByArray(int[] eids);-->
<delete id="deleteMoreByArray">delete from t_emp where eid in<foreach collection="eids" item="eid" separator="," open="(" close=")">#{eid}</foreach>
</delete>

9.6、SQL片段

sql片段,可以记录一段公共sql片段,在使用的地方通过include标签进行引入

<sql id="empColumns">
eid,ename,age,sex,did
</sql>select <include refid="empColumns"></include> from t_emp

本文章参考B站 【尚硅谷】SSM框架全套教程,MyBatis+Spring+SpringMVC+SSM整合一套通关,仅供个人学习使用,部分内容为本人自己见解,与尚硅谷无关。

http://www.lryc.cn/news/5965.html

相关文章:

  • LeetCode(剑指offer) Day1
  • 1、MyBatis框架——JDBC代码回顾与分析、lombok插件的安装与使用
  • 笔记-GPS设备定位方式
  • 2023秋招携程SRE算法岗面试经验分享
  • 4.9 内部类
  • ncnn模型精度验证
  • IB-PYP幼儿十大素质培养目标
  • 02.13:监督学习中的分类问题
  • leetcode刷题 | 关于二叉树的题型总结3
  • 设计模式-结构型
  • 【新】华为OD机试 - 预订酒店(Python)| 运气好 会考到原题
  • 【编程基础之Python】4、安装Python开发工具
  • 5. 最长回文子串
  • 内网渗透(二十四)之Windows协议认证和密码抓取-Mimikatz读取sam和lsass获取密码
  • 【THREE.JS】网页中的炫酷3D
  • Go语言之 下载安装go以及vscode配置go环境
  • RBAC权限 API声明四种kubernetes对象
  • CDGP仿真选择题4
  • 典型相关分析与R语言实现
  • 【蓝桥集训】第一天——前缀和
  • 2022-03-19青少年软件编程(C语言)等级考试试卷(六级)解析
  • [JavaScript 刷题] 特殊数组的特征值, leetcode 1608
  • 各种素材网站大全【全部倾倒,福利倒计时-JS,HTML,游戏素材,UI,图片素材等
  • 影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入
  • 【新】华为OD机试 - 数组的中心位置(Python)| 运气好,这就是原题
  • 小米电视安装 Plex 打造家庭影院
  • Elasticsearch:Combined fields 查询
  • uart 子系统
  • SpringBoot 整合EasyExcel详解
  • VScode+cuda编程:常见环境问题