时间:2021-05-19
我就废话不多说了,大家还是直接看代码吧~
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE <if test="state != null"> state = #{state} </if> </select>如果state参数为空时,最终生成SQL语句为
SELECT * FROM BLOG
WHERE
执行会出错,当然,你可以在where 后加一个1=1,改成
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE 1=1 <if test="state != null"> and state = #{state} </if> </select>但是这个做法不太“环保”(毕竟引入了一个垃圾条件),其实只要改成<where>...</where>即可
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG <where> <if test="state != null"> and state = #{state} </if> </where> </select>补充知识:mybatis @Select注解中当参数为空则不添加该参数的判断
如下所示:
@Select("select * from "+DEPTTABLE+" ")
List<Dept> selectAllDept();
在mybatis中不用xml文件的形式,selectDept方法执行的就是上面的Sql语句,如果是遇到动态的语句就需要用到下面的形式。
1.用Provider去实现SQL拼接:
@SelectProvider(type=DeptDynaSqlProvider.class,method="count") Integer count(Map<String, Object> params);//DeptDynaSqlProvider.class 类中的方法public String count(Map<String, Object> 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().equals("")){WHERE(" name LIKE CONCAT ('%',#{dept.name},'%') ");}}}}.toString();}2.还有一种方式是用script标签包围,像xml语法一样书写
@Select({"<script>", "SELECT * FROM tbl_order", "WHERE 1=1", "<when test='title!=null'>", "AND mydate = #{mydate}", "</when>", "</script>"})注意:方式1有个隐患就是当传入参数为空的时候,可能会造成全表查询。
复杂SQL用方式2会比较灵活(当然,并不建议写复杂SQL),而且可以抽象成通用的基类,使每个DAO都可以通过这个基类实现基本的通用查询,原理类似Spring JDBC Template。
以上这篇巧妙mybatis避免Where 空条件的尴尬就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
on条件与where条件的区别是: 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。where条件是在临时表生成好
本文实例讲述了thinkphp3.2框架中where条件查询用法。分享给大家供大家参考,具体如下:thinkphp3.2where条件查询在连贯操作中条件whe
numpy.where(condition[,x,y])numpy.where()有两种用法:1.np.where(condition,x,y)满足条件(con
numpy.where(condition[,x,y])numpy.where()有两种用法:1.np.where(condition,x,y)满足条件(con
1、WHERE字句的查询条件里有不等于号(WHEREcolumn!=...),MYSQL将无法使用索引2、类似地,如果WHERE字句的查询条件里使用了函数(如: