MyBatis-动态sql常见使用

ops/2024/9/25 2:31:53/

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

1. if

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

<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>

2. where

where和if一般结合使用:

  • 若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
  • 若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>

3. choose、when、otherwise

choose、when、otherwise相当于switch () 、case: 、default;只会选中一个

<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>

4. foreach

foreach 标签用于遍历集合或数组,并在 SQL 语句中动态生成对应的参数。

以下是 foreach 标签的基本用法:

  • 批量插入

方法:int insertMoreEmp(List emps)

sql

<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>
  • 批量删除1

方法:int deleteMoreByArray(int[] eids);

sql

<delete id="deleteMoreByArray">delete from t_emp where<foreach collection="eids" item="eid" separator="or">eid = #{eid}</foreach>
</delete>
  • 批量删除2

方法:int deleteMoreByArray(int[] eids);

sql

<delete id="deleteMoreByArray">delete from t_emp where eid in<foreach collection="eids" item="eid" separator="," open="(" close=")">#{eid}</foreach>
</delete>
  • 批量查询

方法:int selectUsersByIds(int[] ids);

sql

<select id="selectUsersByIds" resultType="User">SELECT * FROM userWHERE id IN<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>

参数解析:

属性:
collection:设置要循环的数组或集合
item:表示集合或数组中的每一个数据
separator:设置循环体之间的分隔符
open:设置foreach标签中的内容的开始符
close:设置foreach标签中的内容的结束符

5. trim

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

如:

<select id="getEmpListByMoreTJ" resultType="Emp">select * from t_emp<trim prefix="where" suffixOverrides="and|or"><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>

参数解析:

常用属性:
prefix:在trim标签中的内容的前面添加某些内容
prefixOverrides:在trim标签中的内容的前面去掉某些内容
suffix:在trim标签中的内容的后面添加某些内容
suffixOverrides:在trim标签中的内容的后面去掉某些内容


http://www.ppmy.cn/ops/17388.html

相关文章

acwing算法提高之图论--有向图的强连通分量

目录 1 介绍2 训练 1 介绍 本博客介绍有向图的强连通分量的题目。 连通分量&#xff1a;是针对有向图的一个概念。对于分量中任意两个结点a、b&#xff0c;必然可以从a走到b&#xff0c;且从b走到a。 强连通分量&#xff1a;是针对有向图的一个概念。极大强连通分量&#xff…

Git下载安装

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

如何使用Vite创建vue项目中配置别名和扩展名

在vite.config.js中&#xff0c;resolve 用于配置模块解析规则&#xff0c;如设置别名、扩展名等。 import {defineConfig} from vite import vue from vitejs/plugin-vue import path from path;export default defineConfig({resolve: {// 别名配置alias: {// 将 指向根目录…

如何安装最新版Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose&#xff0c;您可以使用 YAML 文件来配置应用服务&#xff0c;然后只需一个简单的命令便能创建和启动所有服务。在本篇博客中&#xff0c;我们将详细介绍如何在 Linux 系统上安装 Docker Compos…

Java自带的栈和队列(使用巨方便)

目录 1.Java封装的栈 2.Java自带的队列 2.1 ArrayDeque 2.2 LinkedList 2.3 PriorityQueue 1.Java封装的栈 栈——“后进先出”原则 Stack<T> stack new Stack();/**栈顶添加元素*/ stack.push(T);/**栈顶弹出元素*/ T temp stack.pop();/**查看当前栈顶元素,元素…

算法矩阵提速原理

不管是图形还是AI&#xff0c;如果看过相关的算法&#xff0c;都会注意到矩阵运算&#xff0c;很多讲算法的教程都会说将for转换成矩阵&#xff0c;可以极大的增加效率。 但是这不是为难我们这些数学低能儿吗&#xff1f;矩阵运算这些高级货算是高级数学了&#xff0c;比CURD还…

php中常见的函数和使用方法

PHP 是一种广泛使用的服务器端脚本语言,它提供了许多内置函数来执行各种任务。以下是一些在 PHP 中常见的函数及其使用方法: echo 和 print:用于输出内容到浏览器。echo "Hello, World!"; print "Hello again!";var_dump():用于打印变量的详细信息,包…

03-JAVA设计模式-策略模式

策略模式 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是行为设计模式之一&#xff0c;它使你能在运行时改变对象的行为。在策略模式中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中&#xff0c;…