MyBatis进阶

MyBatis进阶 动态SQL动态SQL能够完成不同条件下不同的SQL语句的拼接是MyBatis的强大特性之一1.if标签在某个软件中设置个人的基本信息的时候可以看到有些信息是可以不用设置的但是有些信息又是要必须设置的。那么我们在后端该如何实现首先我重新设置了表的结构将usernamepasswordage字段设置成了可以为空方便后面的演示。当我所有的字段都不为空的时候发现是可以插入成功的但是我现在不想传密码了此时就可以用到if标签可以看到程序成功运行注意如果在SQL字段上写了if那么在下面的参数部分也要写上if标签让字段的个数和属性的个数对应起来否则会报错。如果下面不写那么执行的时候password为空此时有两个字段但是values对应的是三个属性值此时就会对应不起来就会报错。2.trim标签在引入trim标签之前先通过一个例子来引入为什么要使用trim标签还拿上面这个例子来进行举例。对于上面的例子不只是password为空username也可以为空同样age也可以为空那么就需要在每个字段和每个属性上都加上ifinsert idinsertUserOne insert into user_info ( if testusername!null username, /if if testpassword!null password, /if if testage!null age /if ) values ( if testusername!null #{username}, /if if testpassword!null #{password}, /if if testage!null #{age} /if );此时接口的代码就为上述的代码但是这样会出问题当我不传age属性的时候此时就会报错可能有人会问那么我将逗号放在前面不就好了吗即 ,password等等。但是这样也容易出问题因为username属性也可以为空的那么“,password”前面的这个逗号就无法去除所以也是会报错的。此时就可以引入trim标签了trim 标签用于“增加”或“去掉”特殊字符(前缀或后缀)当然也要具体情况具体分析可以看到程序可以正常运行对于“prefix” 和 “suffix”的使用场景在上面的例子中也可以看出来可以看到都是图中标出来的括号我们也可以使用trim标签来去掉让trim标签自动添加可以看到代码正常运行数据也插入成功了注意trim标签中的属性不知能增加或去掉标点符号耶尔可以去除字符串同样使用注解的方式也能够生成动态SQL只不过会非常麻烦需要写在一个script/script中Insert(script insert into user_info( trim prefixOverrides\,\ suffixOverrides\,\ if testusername!null username,/if if testpassword!null password,/if if testage!null age,/if if testgender!null gender,/if if testphone!null phone,/if /trim ) values( trim prefixOverrides\,\ suffixOverrides\,\ if testusername!null #{username},/if if testpassword!null #{password},/if if testage!null #{age},/if if testgender!null #{gender},/if if testphone!null #{phone},/if /trim ) /script) Integer insertUserOne(UserInfo userInfo);上面就是一个用注解的方式实现的动态SQL很麻烦。这里不推荐3.where标签在介绍where标签之前我们还是通过一个例子引入对于整个例子结合if标签 和 trim标签是可以完成的但是如果传入的password和gender属性都为空此时进行查的话就会多一个where那么该如何解决方式1在where后面加一个 “11”(开发中常用的手段)方式2使用where标签注意当where语句块中没有内容时即所有的属性都为空的时候回去除where关键字此时就变为查询全表当where语句块有查询条件时会添加where关键字还回去出最前面的 and 关键字4.set标签在介绍set之前还是通过一个例子来引入对于上面的例子虽然能够正常运行但是还没进行去除“”。这里我们可以使用set标签set标签的主要作用就是生成set关键字如何去除多余的逗号(,)5.foreach标签foreach标签主要用于拼接多条数据当删除查询插入多条数据的时候我们该如何操作首先站在后端的视角来看就是要拼接SQL拼接SQL的时候要注意四点①.前缀②.后缀③.每一个元素 ④.元素和元素之间的分隔符对于上面的这条记录前缀是 “(”后缀是 “)”每一个元素为 id元素和元素之间的分隔符为 “,”那么就可以使用foreach标签来构造数据了对于上面这条记录没有前缀和后缀分隔符为“or”那么就可以使用foreach标签来构造数据了对于上述的SQL语句没有前缀和后缀分隔符为“”那么就可以使用foreach标签来构造数据了6.sql标签和include标签sql标签是用来定义可重用的SQL片段的include标签通过refid属性指定包含的SQL片段可以看到不同的接口使用了同样的SQL语句那么我们就可以使用sql标签将相同的SQL语句提取出来