首页 > 数据库 >Mybatis动态SQL

Mybatis动态SQL

时间:2024-08-10 15:23:41浏览次数:9  
标签:trim Map set 标签 测试 SQL Mybatis 动态 where

1.动态SQL编写

1.1 if标签

if标签是我们最常使用的。在查询、删除、更新的时候很可能会使用到。必须结合 test 属性联合使用

a. 在WHERE 条件中使用 if 标签

这是常见的一种现象,我们在进行按条件查询的时候,可能会有多种情况。

在此 SQL 语句中, where 1=1 是多条件拼接时的小技巧, 后面的条件查询就可以都用 and 了。

测试:

结果:

测试:

此 if 标签的 test 属性值是一个符合 OGNL 的表达式,表达式可以是 true 或 false。如果表达式返回的是数值,0为 false, 非 0 为 true

b. 在UPDATE更新列中使用 if 标签

有时候我们不希望更新所有的字段,只更新有变化的字段

测试:

结果:只修改了teacher_name列

c. 在 INSERT 动态插入中使用 if 标签

我们插入数据库中的一条记录, 不是每一个字段都有值的, 而是动态变化的。在这时候使用 if 标签,可以我们解决这个问题。

测试:

插入数据成功

接口:

1.2choose标签

choose when otherwise 标签可以帮我们实现 if else 的逻辑。一个 choose 标签至少有一个 when, 最多一个otherwise。when 相当于java中的if, otherwise 相当于java中的else,when..otherwise相当于java中的if..else结构

获取老师的数量:

当age!=0时,按照age查找老师的数量

当age=0时,按照name查找老师

上述的二者都不满足条件时,返回0

测试: age和name都不满足条件

测试: age不满足条件,name满足条件

1.3trim(set、where)标签

这三个其实解决的是类似的问题。如我们在写前面的[在 WHERE 条件中使用 if 标签 SQL 的时候, where 1=1 这个条件我们是不希望存在的。

where标签

测试:

set

测试:

trim

set和where其实都是trim标签的一种类型,该两种功能都可以使用trim标签进行实现。

trim 来表示 where

如where标签,我们也可以写成

表示当trim中含有内容时,添加where并且第一个and或or会将其去掉。

如果没有内容,则不添加 where。

trim来表示set

 set标签可以如下表示

表示当trim中含有内容时,添加set,且最后的内容为”,”时,会将其去掉。

trim 的几个属性

prefix:当trim元素包含有内容时,增加prefix所指定的前缀

prefixOverrides:当trim元素包含有内容时,去除prefixOverrides指定的前缀

suffix:当 trim元素包含有内容时,增加 suffix 所指定的后缀

suffixOverrides:当trim元素包含有内容时,去除suffixOverrides指定的后缀

1.4foreach 标签

foreach标签可以对数组,Map,List集合进行遍历。

foreach中有以下几个属性:

collection:必填, 集合/数组/Map的名称

item:变量名。即从迭代的对象中取出的每一个值

index:索引的属性名。当迭代的对象为 Map 时,该值为 Map 中的 Key

open:循环开头的字符串

close:循环结束的字符串

separator:每次循环的分隔符

a.在where中使用foreach标签

  collection 中值的设定:

跟接口方法中的参数相关。1,只有一个数组参数或集合参数默认情况:集合collection=list, 数组是collection=array

当参数为集合类型时:

当参数为数组时:

2,使用 @Param 来指定参数的名称,如我们在参数前@Param("ids"),则就填写 collection=ids

3,如果参数是Map,指定为 Map 中的对应的 Key 即可。其实上面的@Param最后也是转化为 Map的。

方法一:将paramMap放到另一个map中,当成参数进行传值

将List集合放到Map中

方法一存在缺点:需要创建一个map,用它来存放paramMap

方法二:使用 @Param

4、如果参数是对象使用属性即可。

测试

b. foreach 实现批量插入

测试

标签:trim,Map,set,标签,测试,SQL,Mybatis,动态,where
From: https://blog.csdn.net/Moon_Drop_LAN/article/details/141091435

相关文章

  • Sql语句出现ORA-00933: SQL command not properly ended的解决方法
    目录1.问题所示2.原理分析3.解决方法1.问题所示执行sql语句的时候出现如下问题:ORA-00933:SQLcommandnotproperlyended截图如下所示:2.原理分析ORA-00933:SQLcommandnotproperlyended是Oracle数据库中的错误,指示SQL语句存在语法问题MyS......
  • MySQL 中 LIMIT 使用详解
        操作数据库时,经常会遇到需要查询前几条或者后几条数据的情况,尤其在数据量非常大时,这时就需要用到LIMIT,通过使用语句可以很好提高查询性能。LIMIT基本语法:select*fromtable_namelimitoffset,rows|rowsOFFSEToffset;参数说明:offset:偏移量(即从哪一行开......
  • mysql学习笔记
    数据库基础知识范式第一范式:属于第一范式关系的所有属性都不可再分,即数据项不可分。第二范式:要求实体的属性完全依赖于主关键字。(其余的字段和主键关系很强)要求一个数据库表中不包含已在其它表中包含的非主关键字信息,即数据不能存在传递关系,即每个属性都跟主键有......
  • Python网络爬虫抓取动态网页并将数据存入数据库MySQL
    简述以下的代码是使用python实现的网络爬虫,抓取动态网页http://hb.qq.com/baoliao/。此网页中的最新、精华下面的内容是由JavaScript动态生成的。审查网页元素与网页源码是不同。以上是网页源码以上是审查网页元素所以此处不能简单的使用正则表达式来获取内容。......
  • C#高级:在SQLserver中使用视图和存储过程
    一、视图1.视图是什么,有什么作用?①一个虚拟表②简化查询2.视图和存储过程有什么区别?①视图:用于简化查询和数据展示②存储过程:用于执行一系列SQL语句,包含增删改查等,即业务逻辑得处理。3.建立一个视图,名为PersonBorrowView,SQL已给出: SELECTU.Name,BW.BoTime,BI.Bo......
  • MySQL教程
    1、初识MySQL#JavaEE:企业级Java开发Web前端(页面:展示,数据!)后台(连接点:连接数据库JDBC,连接前端(控制,控制视图跳转,给前端传递数据))数据库(存数据,Txt,Excle,word)学好数据库:操作系统,数据结构与算法。离散数学,数字电路,体系结构,编译原理。1.1什么是数据库#数据库(DB,DataBase)概念:数......
  • Springboot+Mybatis实现最简单的增删改查
    1.创建一个SpringBoot项目 2.导入依赖勾选上web下面的SpringWeb和sql下面的MySQL和Mybatis依赖 然后等待依赖下载导入2.1 依赖导入后的页面3.创建需要的包和Mybatis配置文件 3.1在原来的com.mybatis包下创建了entity,controller,service,mapper四个包3.2在resource......
  • SQL Server给表添加及删除主键Primary Key及默认值Default约束
    1.添加表的主键(PrimaryKey)和默认值(Default)约束在SQLServer中,给表添加主键(PrimaryKey)及默认值(Default)约束是数据库设计和维护中常见的操作。这些操作可以通过ALTERTABLE语句在表已存在的情况下执行,也可以通过CREATETABLE语句在创建表时直接指定。下面分别介绍这两种情......
  • MySQL——添加数据(一)为表中所有字段添加数据
            要想操作数据表中的数据,首先要保证数据表中存在数据。MySQL使用INSERT语句向数据表中添加数据,并且根据添加方式的不同分为三种,分别是为表的所有字段添加数据、为表的指定字段添加数据、同时添加多条记录。    通常情况下,向数据表中添加的新记录应该......
  • MySQL——添加数据(二)为表的指定字段添加数据
            为表的指定字段添加数据,就是在INSERT语句中只向部分字段中添加,而其他字段的值为表定义时的默认值。为表的指定字段添加数据的基本语法格式如下所示:INSERTINTO表名(字段1,字段2..)VALUES(值1,值2..)        在上述语法格式中,“字段1......