动态SQL:MyBatis强大的特性之一

一般来说,一个程序的服务器可以部署多个,但是数据库却只能有一个。这么多服务器,如果每天都要给数据库海量的操作数据,数据库的压力就会非常大。

所以为了减轻数据库的压力,我们可以把一些查询数据库的语句简化,并且把简化的这个部分放在服务器中执行,这样数据库的压力就小很多。当然这只是一个特性之一,动态sql还有很多的优点就不一一列举了。

常见的动态SQL标签:

标签

作用:判断一个参数是否有值,如果没有值就会隐藏if中的sql语句。

    

简单地说, 标签就是判断条件中的test条件,如果成立就拼接if语句,否则就不拼接:

//if 不成立
select * from userinfo where 1=1
//if 成立
select * from userinfo where 1=1 and id=#{id}

在数据库中,如果不输入这个id,就默认表示查询所有的数据,加上了id才表示只查询id的那个人。

标签

有的时候不仅仅只有一个条件需要判定是否为空,可能所有的条件都需要判定为空,那么就会出现sql语句被拼接的多出来where条件或者其他的字段。我们就需要使用标签来解决,采用来结合标签。

  • prefix:表示整个语句块,以prefix的值作为前缀,以下演示为 (
  • suffix:表示整个语句块,以suffix的值作为后缀,以下演示为 )
  • prefixOverrides:表示整个语句块要去除掉的前缀
  • suffixOverrides:表示整个语句块要去除掉的后缀,以下演示为 ,
    

动态SQL:MyBatis强大的特性之一_第1张图片

标签

在前面,我们使用了if标签来表示where中的条件,但是因为if标签的不完美,所以还需要加一个1=1这样的条件。我们还可以使用where标签直接把where当成一个条件来使用:

动态SQL:MyBatis强大的特性之一_第2张图片

动态SQL:MyBatis强大的特性之一_第3张图片

还能够去除条件中第一个and。

如果where标签内没有内容,则在SQL语句中直接不会显示where条件。

标签

出现在update语句,和where语句类似,只有当set标签里面有内容的时候才会出现set

动态SQL:MyBatis强大的特性之一_第4张图片

标签

标签中的主要属性介绍:

  • collection:绑定方法参数中的集合,如List、Set、Map或数组对象
  • item:遍历时的每一个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串

我们以删除语句为例子:

delete from userinfo where id in(1,2,3);

那么使用了for each标签后,可以变成:

动态SQL:MyBatis强大的特性之一_第5张图片

collection是mapper中传的形参名,item是接收的参数名。

    int deleteById(List List);

你可能感兴趣的:(sql,mybatis,数据库)