今天遇到一个问题,就是需要根据前端页面发送的条件查询数据库记录,但是前端发送的条件是不确定的。如果使用mybatis的xml方法可以使用if标签灵活的添加判断条件,但是现在我使用的就是单纯的sql。

我是这样解决的:

使用case when 语句可以完成这样的sql拼接。值得注意的是判断的时候用的是is null/is not null,而不要使用=/!=

昨天忘了判断空字符串,修改如下:

之前是直接使用sql实现,今天使用java的方式实现动态添加查询条件:

操作如下:

(1)首先创建一个类封装查询条件

(2)然后创建一个类封装查询方法

public class CustomerPartnerDaoP {public String selectPartner(  GetParmeter getParmeter) {StringBuilder sql = new StringBuilder();String ciname= getParmeter.getCiname();String citelephone= getParmeter.getCitelephone();int cisex= getParmeter.getCisex();String cibirthday= getParmeter.getCibirthday();String cizipcode= getParmeter.getCizipcode();String cifax= getParmeter.getCifax();String ciofficename= getParmeter.getCiofficename();String ciareacode=  getParmeter.getCiareacode();String ciareafullname= getParmeter.getCiareafullname();String ciaddress= getParmeter.getCiaddress();String cimodifiedtime= getParmeter.getCimodifiedtime();sql.append("select  ciid,ciname,citelephone,cisex,cibirthday,cizipcode,cifax,ciofficename,ciareacode ," +"ciareafullname,ciaddress,cimodifiedtime  from   qb_customer_info where 1=1 ");if(!Objects.isNull(ciname) && !"".equals(ciname)){sql.append(" and ciname").append("=").append("'"+ciname+"'");}if(!Objects.isNull(citelephone) && !"".equals(citelephone)){sql.append(" and citelephone").append("=").append("'"+citelephone+"'");}if(!Objects.isNull(cisex) && !"".equals(cisex)){sql.append(" and cisex").append("=").append(cisex);}if(!Objects.isNull(cibirthday) && !"".equals(cibirthday)){sql.append(" and cibirthday").append("=").append("'"+cibirthday+"'");}if(!Objects.isNull(cizipcode) && !"".equals(cizipcode)){sql.append(" and cizipcode").append("=").append("'"+cizipcode+"'");}if(!Objects.isNull(cifax) && !"".equals(cifax)){sql.append(" and cifax").append("=").append("'"+cifax+"'");}if(!Objects.isNull(ciofficename) && !"".equals(ciofficename)){sql.append(" and ciofficename").append("=").append("'"+ciofficename+"'");}if(!Objects.isNull(ciareacode) && !"".equals(ciareacode)){sql.append(" and ciareacode").append("=").append("'"+ciareacode+"'");}if(!Objects.isNull(ciareafullname) && !"".equals(ciareafullname)){sql.append(" and ciareafullname").append("=").append("'"+ciareafullname+"'");}if(!Objects.isNull(ciaddress) && !"".equals(ciaddress)){sql.append(" and ciaddress").append("=").append("'"+ciaddress+"'");}if(!Objects.isNull(cimodifiedtime) && !"".equals(cimodifiedtime)){sql.append(" and cimodifiedtime").append("=").append("'"+cimodifiedtime+"'");}return sql.toString();}

(3)使用@SelectProvider方法调用

如有不同意见,欢迎指正!

sql语句实现动态添加查询条件相关推荐

  1. java中动态查询条件,Java实现动态添加查询条件

    今天遇到一个问题,就是需要根据前端页面发送的条件查询数据库记录,但是前端发送的条件是不确定的.如果使用mybatis的xml方法可以使用if标签灵活的添加判断条件,但是现在我使用的就是单纯的sql. ...

  2. LINQ to SQL 运行时动态构建查询条件

    原文地址:http://msdn.microsoft.com/zh-cn/dd567295.aspx 在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语句 ...

  3. Oracle 数据库 - sql语句筛选出符合查询条件的第一条结果实例演示,sql查询结果只显示指定行数的数据方法

    默认看到查询条件有 3 条结果,我想只查询出日期最晚的那一条记录. -- 默认查询条件 select settledate as "日期", syscalculationmny a ...

  4. mybatis循环Map动态添加查询条件

    使用Map存储键值对,用于动态的拼接where条件后的 列和值 dao层接口: public List<Map<String,Object>> getData(@Param(& ...

  5. 报表下拉框多选查询及一般在sql中添加查询条件

    1.sql SELECT * FROM [销量] where 1=1 ${if(len(销售员1) == 2,"","and 销售员 in (" + 销售员1 ...

  6. mysql给字段添加描述_用sql 语句给字段添加描述

    用sql 语句给字段添加描述 IF not exists (SELECT * FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', ...

  7. JDBC查询数据库时出现 sql语句正确,但是查询英文可以,汉字不行的情况解决办法

    sql语句正确,但是查询英文可以,汉字不行的情况解决办法 出现这种情况是因为编码格式的原因,我们在设置数据库的URL时一般会设置为 Connection conn = DriverManager.ge ...

  8. SQL 语句的多表查询方式

    SQL 语句的多表查询方式 例如:按照 department_id 查询 employees(员工表)和 departments(部门表) 的信息. 方式一(通用型): SELECT ... FROM ...

  9. SQL语句多表关联查询语法

    **sql语句多表关联查询语法** 一.外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join scor ...

  10. 转在同一个sql语句中如何写不同条件的count数量

    今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...

最新文章

  1. python自动整理文件夹_计算机文件和文件夹的Python自动管理,自动化,电脑,及
  2. sleep() wait() notify/notifyAll() 的区别
  3. 【Python项目】CMDB的搭建12(SaltStack配置小结2/2)
  4. MongoDB GridFS 存储文件
  5. 深度复制_Python 列表切片陷阱:引用、复制与深复制
  6. 获取元素到页面顶部的距离_组成网站页面结构的元素有哪些?
  7. 《2012》:让灾难成为一场洗礼
  8. 深度学习中用到的一些函数
  9. atititt.java定时任务框架选型Spring Quartz 注解总结
  10. Spring框架之演示JDBC的模板类
  11. 大学英语综合教程四 Unit 7 课文内容英译中 中英翻译
  12. 程序员要知道的英语词汇
  13. 最全面计算机英语单词列表(四)
  14. 【LeetCode】【VSCode】在VSCode中使用插件刷题
  15. Linux实验5——Apache、虚拟主机
  16. nvidia jetson nano 操作指南
  17. 2019-01-25T01:30:00.000+0000 格式转换
  18. 微信小程序使用日历插件
  19. ecmall 如何新增挂件
  20. 解决ArcGIS 9.3 - 10.2.2的一个BUG

热门文章

  1. 注意!某知名国产软件被曝携带木马病毒
  2. phpstudy升级mysql5.6_phpstudy升级mysql数据库
  3. python制作卡通表情包_python——简单生成表情包
  4. 小米pro15拆机_小米pro拆机图解(8步)
  5. 【转载】如何统计分析网站的访问量
  6. hausaufgabe--python 22- Recurse
  7. Qt QLineedit 控件出发clicked信号问题
  8. 08-22 CDR数据时钟恢复电路
  9. 推荐几款好用的压缩软件
  10. 【每天学点心理学第七期】人性定理:人都是以服务于他自己为目的的!