Mybatis学习笔记9 动态SQL

Mybatis学习笔记8 查询返回专题_biubiubiu0706的博客-CSDN博客

动态SQL的业务场景:

例如

批量删除

get请求 uri?id=18&id=19&id=20 或者post id=18&id=19&id=20

String[] ids=request.getParameterValues("id")

那么这句SQL是需要动态的

还有像如下的多条件查询

可能不提供条件: 0条件 select & from t_product;

当选择了一个或多个条件: select * from t_product where 条件1=#{xxx} and 条件2=#{xxx2}

新建模块

1. if标签

2.where标签 作用让where子句更加动态智能

当所有条件都为空时,where标签保证不会生成where子句

自动去除某些条件前面多余的and和or

3.trim标签

prefix:在trim标签中的语句前添加内容
suffix:在trim标签中的语句后 添加 内容

prefixOverrides:前缀覆盖掉(去掉)
suffixOverrides:后缀 覆盖掉(去掉)

trim会自动判断里面if来考虑是否添加where 并且自动判断是否去掉 and或者or

4.set标签
主要使⽤在update语句当中,⽤来⽣成set关键字,同时去掉最后多余的","



5.choose when otherwise
< choose >
< when ></ when >
< when ></ when >
< when ></ when >
< otherwise ></ otherwise >
</ choose >
一般<choose>会和<when><otherwise>联合使用
等价于
if (){
} else if (){
} else if (){
} else if (){
} else {
}
只有⼀个分⽀会被选择!!!! 只要一个分支执行,条件语句结束 只有⼀个分⽀会被选择,且必会选择!!!!只有⼀个分⽀会被选择,且必会选择!!!!只有⼀个分⽀会被选择,且必会选择!!!!只有⼀个分⽀会被选择,且必会选择!!!!只有⼀个分⽀会被选择,且必会选择!!!!只有⼀个分⽀会被选择,且必会选择!!!!
比如说下面的三个参数都是""或者 null
那么 最后执行
select * from t_car where car_type= "" 或者 select * from t_car where car_type= null

实际使用比如
比如需求是:先根据品牌查,没有提供品牌按价格查,没有提供价格按类型查


这里注意下

6.foreach标签
循环数组或集合,动态⽣成sql
批量删除:
id=1&id=2&id=3
String[] ids=request.getParameterValues("id");
String[] ids={"1","2","3"}
int[] intArray = new int[idValues.length];
for (int i = 0; i < idValues.length; i++) {
try {
intArray[i] = Integer.parseInt(idValues[i]);
} catch (NumberFormatException e) {
}
delete from t_car where id in ( 1 , 2 , 3 );
delete from t_car where id = 1 or id = 2 or id = 3 ;
第一种方式: delete from t_car where id in ( 1 , 2 , 3 );


第二种方式: delete from t_car where id = 1 or id = 2 or id = 3 ;


批量插入
比如 一次插入多条数据
insert into user(id,name,age) values(1,'zs',18),(2,'ls',19),(3,'ww',21)



7 sql标签与include标签
sql标签⽤来声明sql⽚段
include标签⽤来将声明的sql⽚段包含到某个sql语句当中
作⽤:代码复⽤。易维护。
例如

相关推荐
工大一只猿5 分钟前
51单片机学习
嵌入式硬件·学习·51单片机
c0d1ng24 分钟前
量子计算学习(第十四周周报)
学习·量子计算
Hello_Embed7 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中8 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Grassto8 小时前
RAG 从入门到放弃?丐版 demo 实战笔记(go+python)
笔记
Magnetic_h9 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
研梦非凡9 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d
limengshi13839210 小时前
机器学习面试:请介绍几种常用的学习率衰减方式
人工智能·学习·机器学习
知识分享小能手11 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
周周记笔记12 小时前
学习笔记:第一个Python程序
笔记·学习