sql语句实现动态添加查询条件

标签: sql 条件查询
32人阅读 评论(0) 收藏 举报
分类:

今天遇到一个问题,就是需要根据前端页面发送的条件查询数据库记录,但是前端发送的条件是不确定的。如果使用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中如何动态加WHERE条件

关于sql中如何动态加WHERE条件
  • zhzongqiang0635
  • zhzongqiang0635
  • 2016-11-28 12:06:19
  • 2689

关于java多条件查询SQL语句拼接的小技巧

关于java多条件查询SQL语句拼接的小技巧最近在实验室做项目的时候遇到了java的多条件查询,翻看了论坛上其他大牛们的博客,都没有给出一个详细的解答。自我探索了一会后给出了下面这样的使用技巧,还算方...
  • ibelievefly
  • ibelievefly
  • 2015-07-11 09:02:56
  • 9050

mysql动态添加字段存储过程

USE `db`; DROP PROCEDURE IF EXISTS schema_change;   DELIMITER // CREATE PROCEDURE schema_change()...
  • changyuan101
  • changyuan101
  • 2016-11-25 09:33:55
  • 670

MyBatis执行动态sql及存储过程

MyBatis调用动态SQL和存储过程
  • liangwenmail
  • liangwenmail
  • 2015-08-20 21:49:13
  • 2905

查询功能:动态的添加列名和条件

js中动态的添加一行条件,删除,及获取表单添加的值
  • qq_30051139
  • qq_30051139
  • 2016-03-28 10:51:53
  • 996

MySQL中动态生成多条件查询语句

        在做搜索页面时,我们经常会遇到多条件查询,且这些条件是不定的,也就是说当用户输入的条件参数为空时,该条件是不应该加到SQL语句中去的。举例来说,我们要对一个产品表product进行搜索...
  • daihongyan
  • daihongyan
  • 2007-10-24 22:34:00
  • 8285

多条件查询的sql语句字符串拼接

  StringBuffer sqlBuf = new StringBuffer("select * from goods where");  String sql="";  if(!"".equal...
  • ystyaoshengting
  • ystyaoshengting
  • 2011-02-25 13:36:00
  • 3254

通过Ajax+jquery实现的动态增加一组查询条件的实例

我们在做信息搜索的时候,可能会需要动态的添加一组搜索条件,如下图(1),我们可能需要同时想搜索 海南省海口市秀英区 以及 山西省太原市太原理工大学 的信息,甚至更多的省市区学校的条件约束,那么,我们就...
  • chongan_wang
  • chongan_wang
  • 2010-02-07 15:17:00
  • 4957

一个数据库查询方法(可以动态设置查询参数,设置查询条件),很巧妙的组合sql语句

public QueryResult getScrollData(Class entityClass,String wherejpql,Object[] queryParams,   int fir...
  • gaoge19861207
  • gaoge19861207
  • 2009-09-27 18:07:00
  • 3082

拼接查询条件为list集合的sql函数

当deptId 为1时 sql语句不做更改 当deptId 为其他数字时 list中的id项作为sql查询条件刚开始编写的时候思路是用or语句进行循环遍历 重复加上or的sql语句来查询 发现...
  • sinat_29774479
  • sinat_29774479
  • 2017-08-30 23:42:57
  • 1344
    个人资料
    等级:
    访问量: 78
    积分: 50
    排名: 177万+
    文章存档