当前位置:网站首页 > 技术博客 > 正文

sql动态拼接查询条件



 详解动态SQL

<if>标签、<trim>标签、<where>标签、<set>标签、<foreach>标签、<include>标签 & <SQL>标签

也就是SQL语句中指定的属性,若我们不想输入进行查询,插入,修改

那么我们就忽略掉这个属性。就当做它不存在,怎么做到呢?这就是动态SQL。

在插入时,如果不想填写某些属性,那么我们用if标签来实现。

有一个属性test。填的是条件

假如gender为null,我们就不添加这个gender。它会自动使用默认值。

 

 我们进行测试, 当我们设置gender的值为1。

我们进行测试, 当我们不设置gender的值后gender默认为0了。

如果有多个 if 标签。会存在,的拼接位置不对的badSQL问题。

有四个属性,

1.prefix=""给代码块最前面加字符串,

2.suffix=""给代码块最后面加字符串。

3.prefixOverrides=""去除代码块最前面指定的字符串,

4.suffixOverrides=""去除代码块最后面的指定字符串

比如用if标签除去的属性,若除去最后面的属性

那么此时代码就会多出一个逗号,导致SQL编译失败。此时就可以使用trim标签的suffixOverrides属性来去除掉它了。

我们分别用trim标签

去掉代码块最前面的逗号,和去掉最后面的逗号,

增加代码块最前面的左括号 ( 和增加代码块最后面的右括号 ) 

 

此时我们就可以任意传入参数也不会报错了。 

我们在淘宝买东西,筛选的时候。系统会根据我们的筛选条件,动态组装where 条件

1.用于方便并列查询时,若不选其中一个属性SQL语句中的and多余问题。

<where>标签只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或 OR

2.并且若查询条件为空,where标签自动会去掉SQL语句中的where语句。直接查询所有的信息

以上标签也可以使用 <trim prefix="where"  prefixOverrides="and"> 替换,但是此种 情况下,当子元素都没有内容时,where关键字也会保留。

 

使用where标签,解决了and多余的问题。 

2.若查询条件为空,where标签自动会去掉SQL语句中的where语句。直接查询所有的信息 

用于更新操作时,解决出现多余逗号的问题。(用于update语句中)

去除整个代码块最后的逗号。

以上标签也可以使用<trim prefix="set"  prefixOverrides=","> 替换。

需求:根据传入的用户对象属性来更新用户数据,可以使用标签来指定动态内容.

接口定义:根据传入的用户 id 属性,修改其他不为 null 的属性

 

对集合进行遍历时可以使用该标签。标签有如下属性:

• collection:绑定方法参数中的集合,如List,Set,Map或数组对象

• item:遍历时的每一个对象

• open:语句块开头的字符串

• close:语句块结束的字符串

• separator:每次遍历之间间隔的字符串

需求:根据多个userid,删除用户数据 

接口方法:void deleteByIds(List ids);

是一个循环,用于批量操作,比如批量删除

SQL:

delete form userinfo where id in (14,15,16)

有如下属性

1.collection表示从哪里拿的数据,

2.separator表示用什么符号分割

3.open表示以什么符号开始,

4.close表示以什么符号结束

5.item表示每一个元素的名字

 

 

 

注:如果使用的是aliyun的依赖,那么collection="ids"会报错,需要写成collection="list" 

用于解决代码重复的问题,可以理解为用SQL标签,定义了一个字符串

想用的时候,用<include>标签导入进去就可以了。

SQL标签:定义可重复SQL代码

<include>标签:通过属性refid,指定包含的SQL片段

eg:

 

与XML一样,只是将标签换成注解。注解的缺陷在于不会有任何报错提醒。

注解括号中我们使用

"<script>"标签

来代表这是动态SQL。

可能是某个引号错了,很难发现错误点在哪里。其实是item前面多了个单引号。

由于已经使用双引号拼接了,因此foreach标签中的属性使用单引号。

 

 

将这里的设置中的编码方式都改成 UTF-8 方式编码。

已经乱码的不能恢复了

改完之后新的码就不会乱码了

新建文件项目也改一下。

相当于Mybatis升级版,在原有基础上加了更多功能,让我们使用更加方便。

1.查询所有数据

2.根据主键查询...

版权声明


相关文章:

  • seq2seq模型优缺点2025-05-23 12:01:07
  • mysql 增删查改2025-05-23 12:01:07
  • rand函数产生随机整数2025-05-23 12:01:07
  • log4net 日志文件路径2025-05-23 12:01:07
  • struct timeval结构体2025-05-23 12:01:07
  • 指标体系构建方法有哪些?2025-05-23 12:01:07
  • 如何修改封装好的系统2025-05-23 12:01:07
  • java hashcode有什么用2025-05-23 12:01:07
  • 批处理文件命令2025-05-23 12:01:07
  • 原型原型链概念2025-05-23 12:01:07