巧妙mybatis避免Where 空条件的尴尬

网友投稿 641 2023-03-06

巧妙mybatis避免Where 空条件的尴尬

巧妙mybatis避免Where 空条件的尴尬

我就废话不多说了,大家还是直接看代码吧~

SELECT * FROM BLOG

WHERE

state = #{state}

如果state参数为空时,最终生成SQL语句为

SELECT * FROM BLOG

WHERE

执行会出错,当然,你可以在where 后加一个1=1,改成

SELECT * FROM BLOG

WHERE 1=1

and state = #{state}

但是这个做法不太“环保”(毕竟引入了一个垃圾条件),其实只要改成...即可

SELECT * FROM BLOG

and state = #{state}

补充知识:mybatis @Selhttp://ect注解中当参数为空则不添加该参数的判断

如下所示:

@Select("select * from "+DEPTTABLE+" ")

List selectAllDept();

在mybatis中不用xml文件的形式,selectDept方法执行的就是上面的Sql语句,如果是遇到动态的语句就需要用到下面的形式。

1.用Provider去实现SQL拼接:

@Selechttp://tProvider(type=DeptDynaSqlProvider.class,method="count")

Integer count(Map params);

//DeptDynaSqlProvider.class 类中的方法

public String count(Map params){

return new SQL(){{SELECT("count(*)");FROM(DEPTTABLE);if(params.get("dept") != null){Dept dept = (Dept) params.get("dept");if(dept.getName() != null && !dept.getName().eqBJgnUKfuals("")){WHERE(" name LIKE CONCAT ('%',#{dept.name},'%') ");}}}}.toString();}

2.还有一种方式是用script标签包围,像xml语法一样书写

@Select({""})

注意:方式1有个隐患就是当传入参数为空的时候,可能会造成全表查询。

复杂SQL用方式2会比较灵活(当然,并不建议写复杂SQL),而且可以抽象成通用的基类,使每个DAO都可以通过这个基类实现基本的通用查询,原理类似Spring JDBC Template。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序跳转其他小程序(小程序跳转其他小程序配置)
下一篇:windows如何使用bat脚本后台启动/停止和重启jar包服务
相关文章

 发表评论

暂时没有评论,来抢沙发吧~