在学习这些标签之前,还要if和choose,这些都是动态SQL元素里面的重要元素。
在实际的项目需求中,有很多字段数值为空,这时需要我们采取有效的方式避免空值插入数据库。
比如:插入一条用户信息,空值不允许插入,或者查找用户,不传入完全信息即可查找。
但是在任意的传值中会出现 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表示属性引号中的值)
首先,子查询分为:标量子查询:查询出来的东西是单行单列的
行子查询:查询的是一行
列子查询:查询出来的是一列
表子查询:查询出来的多行多列的
在foreach里面的查询就是一个个行子查询构成的
传参一个集合list....或者数组都可以,语句会解析集合里面的元素,根据这些元素,遍历之后挨个解进行查询
在上面的例子里面。Collection 属性设置为list,因为传参list。item是数据项的一个代号用来遍历。
由于标准sql语句中,list里面的东西是用括号包裹,用逗号封开的,比如下面。
于是就有了用open和close组成的()以及加上separator分割符“,”
这样就能吧list里面的id一个个遍历,然后一句句话的在里面查找并返回
模糊搜索由于之前做过
鲜明的特征就是like加上一个前后带着%的参数,由于常规的做法比较麻烦(其实这个也简单不到哪里去....)直接用
+加号拼接的话会有sql注入的风险,所以这里出现了bind标签,给穿过来的数据进行加上%的处理,并给处理后的参数
起了一个别名,如下。
name设定别名,别名的名字叫_city,他的值是“'%'+city+'%'” 在下面#{}里面使用别名来模糊搜索
这样就解决了给 %+keyword+%的字符串拼接的问题
sql标签有什么用处呢?官方给出的解释是
也就是说,一些代码如果在xml文件里出现的很多,那我们可以给他做一些操作,使他重用的时候更加方便节省代码空间
比如这样,这三个列名经常在我的代码出现,书写起来很啰嗦。那么我把这个语句打包,叫做baseColmn,然后
我在要用到这个语句的时候引用一下,使用
include标签引入定义好的别名,这样直接写refid就可以
这样做的好处是,比如常用的字段很多,有五十个,但是,用到的地方也很多,这样就很麻烦。
解决的方法就是使用sql标签的id
以上就是动态sql和sql标签内的使用学习笔记。