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

java中动态查询条件,Java实现动态添加查询条件相关推荐

  1. java中函数的调用,java中如何调用函数

    java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...

  2. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  3. 在java中使用JMH(Java Microbenchmark Harness)做性能测试

    文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 ...

  4. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  5. Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决

    Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决 参考文章: (1)Java中使用json时java.lan ...

  6. java中的LinkedList(链表)与ArrayList(动态数组):(1)简单辨析

    一.数组的缺点(为什么需要引入JAVA集合): 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合. 首先数组可以存放基本数据类型和对象, ...

  7. java中的静态语言_java是动态语言还是静态语言?

    java是静态语言.Java是在编译时期确定的变量类型且在运行时期不能改变,在类型转换方面也是强制的,例如大范围整数类型转换为小范围整数类型时必须要强转,如int必须强制转换才能得到小范围类型byte ...

  8. java中imp结尾,imp java

    适配器模式之桥梁模式 设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox 桥梁模式 Bridge Pattern ...

  9. Java中的反射和Java中的访问修饰符

    什么是反射? ①在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性 ②对于任何一个对象,我们都能够对它的方法和属性进行调用 总而言之:它反射Java语言中的一种机制,通过这种机制可以动 ...

  10. java中iterator_如何在Java中读取CSV文件-Iterator和Decorator的案例研究

    java中iterator 在本文中,我将讨论如何使用Apache Common CSV读取CSV(逗号分隔值)文件. 从这个案例研究中,我们将学习如何在设计模式的上下文中使用Iterator和Dec ...

最新文章

  1. 递归解决八皇后问题-小昝
  2. Android开发傲娇之作
  3. Android开发之LisitView的图文并排效果实现(源代码分享)
  4. linux 程序定时重启tomcat,linux下实现tomcat定时自动重启
  5. AtCoder Beginner Contest 096 题解
  6. 还原数据库:The backup set holds a backup of a database other than the existing database……
  7. 语法之知识点的改进(Func/Action)
  8. node.js 知识分享网站源码【毕业设计】
  9. java调用万网域名接口
  10. 线和面的方程区别_平面方程和直线方程的区别?
  11. hdoj 1163 Eddy's digital Roots(数学问题,继续分析) .
  12. python(3.10,Win10 64位)的wordcloud安装
  13. 用java画哆啦a梦,来画哆啦A梦吧!
  14. 宝宝出生前妈妈准备物品清单
  15. BUUCTF msic 专题(120)[QCTF2018]X-man-A face
  16. 计算方法--函数插值
  17. 【案例9】sysConfig 中文乱码(方块)
  18. 本机配置nginx后css样式失效
  19. ssh与scp 连接机器与传输文件
  20. 《权威指南》笔记 -- 8.5 、8.6

热门文章

  1. 老任的病房太冷清,夫人憔悴孩子无助
  2. strptime和strftime函数
  3. 解决微信开发者工具:当前系统代理不是安全代理,是否信任
  4. java 项目 断言_Java断言
  5. SSH 登陆失败 Permission denied (publickey) 排错
  6. 【用户画像】ClickHouse中的数据类型、表引擎介绍及使用、项目几个问题的解决办法
  7. Python turtle.onclick()用法及代码示例
  8. dcf是ea211发动机吗_神车发动机解读:EA211到底牛掰在哪儿?
  9. 如果让莎士比亚、海明威编写JavaScript代码
  10. 【TypeScript】一文带你了解什么是TypeScript