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

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语句当中
作⽤:代码复⽤。易维护。
例如
http://www.lryc.cn/news/170521.html

相关文章:

  • element表格 和后台联调
  • 基于SSM的智慧城市实验室主页系统的设计与实现
  • 怒赞,阿里P8推荐的Java面试宝典:41个专题PDF(史上最全+面试必备)
  • 线程池各个参数设置说明
  • springBoot对接多个mq并且实现延迟队列---未完待续
  • Pytorch从零开始实战04
  • 北大C++课后记录:文件读写的I/O流
  • 详解Linux的grep命令
  • spark6. 如何设置spark 日志
  • glibc: strlcpy
  • 如何在 Buildroot 中配置 Samba
  • SSM02
  • day3_QT
  • js-map方法中调用服务器接口
  • docker 已经配置了国内镜像源,但是拉取镜像速度还是很慢(gcr.io、quay.io、ghcr.io)
  • [linux(静态文件服务)] 部署vue发布后的dist网页到nginx
  • 智华计算机终端保护检查系统使用笔记
  • 前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)
  • 汽车电子——产品标准规范汇总和梳理(适应可靠性)
  • 计算机是如何工作的(上篇)
  • 数学建模| 优化入门+多目标规划
  • SSM整合Thymeleaf时,抽取公共页面并向其传递参数
  • 接口测试 —— requests 的基本了解
  • 2023年华为杯数学建模研赛D题思路解析+代码+论文
  • AB试验(三)一次试验的规范流程
  • ROI tracking by using OpenCV
  • (leetcode)二叉树最大深度
  • 【golang】调度系列之P
  • Vue3中watch用法
  • 组里来了一个实习生,一行代码引发了一个惨案