SSM框架学习-MyBatis篇 动态SQL(trim、foreach、bind)以及sql标签的使用

SSM框架学习-MyBatis篇 动态SQL(trim、foreach、bind)以及sql标签的使用

在学习这些标签之前,还要if和choose,这些都是动态SQL元素里面的重要元素。

trim篇:

在实际的项目需求中,有很多字段数值为空,这时需要我们采取有效的方式避免空值插入数据库。

比如:插入一条用户信息,空值不允许插入,或者查找用户,不传入完全信息即可查找。

但是在任意的传值中会出现 and 或者一些连接字符无法正确匹配的时候,就像我之前在写fhweb里面有个模糊搜索一样,你不知道用户传来的到底是时间?还是关键字?

那么trim就派上了用场,样例如下

在这里就不用考虑用户传来的到底是特喵city还是country了。prefix设置了前缀自动补齐“WHERE”子句suffixOverrides自动给你取出了最后一个参数后面的and。那么语句就不存在

select * from table where name=#{name}and

  这种情况了。where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去自动补齐“WHERE”子句

在官方给的例子里面,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。如果 where 元素没有按正常套路出牌,我们可以通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:

prefix:表示在trim标签内sql语句加上前缀,会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)

            它的作用是移除所有指定在 prefixOverrides 属性中的内容,并且插入 prefix 属性中指定的内容。

suffix:表示在trim标签内sql语句加上后缀

suffixOverrides:表示去除最后一个后缀

ps:(xxx表示属性引号中的值)

 

For each篇:

首先,子查询分为:标量子查询:查询出来的东西是单行单列的

                              行子查询:查询的是一行

                              列子查询:查询出来的是一列

                              表子查询:查询出来的多行多列的

在foreach里面的查询就是一个个行子查询构成的

传参一个集合list....或者数组都可以,语句会解析集合里面的元素,根据这些元素,遍历之后挨个解进行查询

在上面的例子里面。Collection 属性设置为list因为传参listitem是数据项的一个代号用来遍历。

由于标准sql语句中,list里面的东西是用括号包裹,用逗号封开的,比如下面。

 于是就有了用open和close组成的()以及加上separator分割符“,”

这样就能吧list里面的id一个个遍历,然后一句句话的在里面查找并返回

 

bind标签实现模糊搜索:

模糊搜索由于之前做过

鲜明的特征就是like加上一个前后带着%的参数,由于常规的做法比较麻烦(其实这个也简单不到哪里去....)直接用

+加号拼接的话会有sql注入的风险,所以这里出现了bind标签,给穿过来的数据进行加上%的处理,并给处理后的参数

起了一个别名,如下。

name设定别名,别名的名字叫_city,他的值是“'%'+city+'%'” 在下面#{}里面使用别名来模糊搜索

这样就解决了给 %+keyword+%的字符串拼接的问题

 

SQL标签<include/>设置常用列的别名:

sql标签有什么用处呢?官方给出的解释是

也就是说,一些代码如果在xml文件里出现的很多,那我们可以给他做一些操作,使他重用的时候更加方便节省代码空间

比如这样,这三个列名经常在我的代码出现,书写起来很啰嗦。那么我把这个语句打包,叫做baseColmn,然后

我在要用到这个语句的时候引用一下,使用<include/>标签

include标签引入定义好的别名,这样直接写refid就可以

这样做的好处是,比如常用的字段很多,有五十个,但是,用到的地方也很多,这样就很麻烦。

解决的方法就是使用sql标签的id

 

 

以上就是动态sql和sql标签内的使用学习笔记。

总结:trim标签用来解决sql语句中的 and/or/where 前后缀的问题

                  foreach标签解决传参集合遍历查找的问题

                  bind用来模糊搜索,这种方式可能更高级一些...

                  sql标签的使用很实用,简化代码书写

猜你喜欢

转载自blog.csdn.net/Xenoverse/article/details/83043345
今日推荐