查询语句中的if
来源:互联网 发布:数据库黑匣子 编辑:程序博客网 时间:2024/05/18 01:45
查询语句中的if;以上为我们定义的一个人的属性,数据库中也有一个人的数据表。现在假设需要查询人中的所有男性,同时如果输入参数中年龄不为空,就根据性别和年龄查询。在没有使用动态SQL之前,按照我们的惯有思路,我们需要在Mapper接口中定义两个查询方法,同时分别对应在SQL映射文件中定义两个语句,如下:
select * from person where GENDER = '男'成华区无痛人流医院咨询
温江人流打胎多少钱
龙泉区妇科在线咨询
金堂人流正规医院
春熙路做无痛人流的收费是怎样的
select * from person where GENDER = '男' and AGE = #{age}
这样一来,随着类似的需要越来越多,我们的方法和SQL语句量会增加到很多,并且会发现,其实语句中存在很多重复部分。那么有没有办法能同时应对类似的相关需求,同时减少代码量呢?动态SQL就提供了相关的功能实现这些需求,例如上述场景,我们即可只需定义一个方法,对应的SQL语句写成如下:
select * from person where GENDER = '男' 双流看宫颈糜烂好的医院
青羊区做人流手术的较佳时间?
天府新区治疗子宫肌瘤专业的医院
青白江治白带异常好的医院
and AGE = #{age}
在这项我们将确定的(静态的的部分)select * from person where GENDER = '男'和后面的部分结合起来,通过动态SQL提供的标签给语句预加一层判断,test属性值为布尔类型,true或者false,当为true(即真)时,才会把标签下的内容添加到语句中响应为值,这里的test中即判断输入参数中年龄是否为空,不为空则添加【and AGE = #{age}】到【select * from person where GENDER = '男'】后面,为空则不加,这样就达到了同时满足两种需要,但只定义了一个方法和一条SQL。