#MyBatis动态SQL:<if>、<where>、<foreach>、<sql> @FDDLC
发布日期:2021-06-30 20:56:43 浏览次数:2 分类:技术文章

本文共 1457 字,大约阅读时间需要 4 分钟。

一、<sql>与<include>搭配使用

select * from account

 

二、<if>用法1

注意:需要写 像 1=1 这样恒真的条件来解决 【and】 问题!

何为【and】 问题?

我们知道,where后的第一个条件前不需要加and,从第二个条件开始就需要加and了!

这个【第一个条件】就显得很特殊!需要特别处理。如果我们让1=1这样的恒真条件作为第一个条件,则我们的<if>标签就都不可能是第一个条件了,直接给每个<if>标签加and,so easy!

反之,如果不写1=1,请看:

上面的name就有可能是第一,也有可能不是第一,那么,这个and加不加呢?很麻烦对吧!

顺便说一下id,id要么不出现(为null),要么当第一(非null)!当然就不加and喽!加了呢,报错!

所以说1=1也好,2=2也好,虽然不优雅,但好歹能解决问题!

你可能会说,怎么能不优雅呢!我就要优雅嘛!

好,优雅是吧,给你优雅——

 

 

三、<if>用法2

这就很优雅了吧!

注意:你尽可放心地在每个<if>里都写and,不要担心【执行时where接的第一个条件前不能有and】的问题!框架帮你解决了!

多写and没问题,但少写and就可能有问题了。请看:

上面的代码可能报错,也可能不报错!上面有四类情况:id为空name为空;id为空name不为空;id不为空name为空;id不为空name不为空。在这四类情况中,都不为空的情况会报错!

总结一下:框架可以帮我们减and,但不能帮我们加and!

 

四、<foreach>用法

问题提出:如何实现:select * from account where id in (1, 2)

<foreach>说:我来试试。

注意:

1、item值要和#{}里的值保持一致!

2、collection里填实体类中相应的集合成员。

3、test="idList != null and idList.size() != 0"这里的and不能换成&&哦!

4、open里还是and打头哈,跟前面的<if>类似!

5、这个 <foreach collection="idList" open="and id in(" close = ")" separator="," item="ID"> #{ID} </foreach> 怎么理解呢?

就是拼接啦:【open值】 拼上 【第1个ID】 拼上 【separator】 拼上 【第2个ID】 【separator】 …… 【最后一个ID】 拼上 【close】

 

转载地址:https://liuxingchang.blog.csdn.net/article/details/109081091 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:#MyBatis多表查询 #多对一的两种实现方式 @FDDLC
下一篇:#寻找第K大_Java版 #寻找第K大_C++版 @FDDLC

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月19日 17时44分00秒