java中多条件与不定条件查询

网站或各类管理系统都会用到搜索,会用到一个或多个不确定条件搜索,单条件搜索比较简单,有时候会有多个条件共同查询,如果系统中已经提供了相关的方法供你使用最好,像我做这老系统改版,需要添加搜索,就要自己写了。开始也没管那么多,就是拼sql,但是后来发现要加搜索地方不少,总是这样写既增加了工作量,还要做很多重复工作,说不定以后还会做这样的工作,所以还是写一个比较通用的查询方法。

package com.test;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.poi.hssf.record.formula.functions.T;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import com.ams.bo.webapi.dto.Agent;
public class MultiTaskSearch {
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Resource(name = "storeFrontDAO")
private Map search() {
String name="公司";
String email="@163";
String invoiceTitle="公司";
int sign=1;
String at="2012-04-26";
Map<String, Object> map=new LinkedHashMap<String, Object>();//保持添加顺序
//        Map<String, Object> map=new HashMap<String, Object>();//无固定顺序
map.put("name like", name);
map.put("email like", email);
map.put("invoiceTitle like", invoiceTitle);
map.put("sign =", sign);
map.put("addtime>=", at);
return map;
}
public <T> List<T> dbSearch(Class typeClass,Map<String, Object> map,String orderby) {
String paths[] = { "ams-servlet.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
List<T> TList=null;
String tablename = typeClass.getName().substring(
typeClass.getName().lastIndexOf(".") + 1);
StringBuffer sql=new StringBuffer("select * from ");
sql.append(tablename);
if (map.size()!=0) {
sql.append(" t where 1=1");//后面只需拼接and条件
}
Set<Entry<String, Object>> set=map.entrySet();
Iterator iterator=set.iterator();
for (int i = 0; i < set.size(); i++) {
Map.Entry mapEntry=(Entry) iterator.next();
if (!"".equals(mapEntry.getValue().toString())) {
//模糊匹配
if (mapEntry.getKey().toString().contains("like")) {
//                sql.append(" and t."+mapEntry.getKey()+" "+mapEntry.getValue()+" ");
sql.append(" and t."+mapEntry.getKey()+" '%"+mapEntry.getValue()+"%'");
//精确匹配
}else {
//                sql.append(" and t."+mapEntry.getKey()+" '%"+mapEntry.getValue()+"%'");
sql.append(" and t."+mapEntry.getKey()+" "+mapEntry.getValue()+" ");
}
}
}
if (null!=orderby&&!"".equals(orderby)) {
sql.append(orderby);
}
System.out.println("SQL:"+sql.toString());
TList=jdbcTemplate.query(sql.toString(),new Object[] {}, new BeanPropertyRowMapper<T> (typeClass));
return TList;
}
public static void main(String[] args) {
MultiTaskSearch mt=new MultiTaskSearch();
Map map=mt.search();
String orderby=" order by addTime desc";
List<Agent> agents=mt.dbSearch(Agent.class, map,orderby);
for (Agent agent : agents) {
System.out.println(agent.getName());
}
System.out.println("****************"+agents.size());
}
}

或者可以用拼sql的方法实现
使用union关键字可以在一个文本框内搜索出多个条件的数据
select  t1.* from
(
select *  from agent where name like '"2%' 
union 
select *  from agent where email like '"2%' 
union 
select *  from agent where ContactPerson like '"2%'

) t1

这种查询结果是所有的集合,也可以把union换成or
我个人用于测试的,仅供参考,如果读者觉得有问题,可以给我留言交流.

转载于:https://www.cnblogs.com/xm1-ybtk/p/4966470.html

java中多条件与不定条件查询相关推荐

  1. java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...

    [单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...

  2. java中重写和重载的条件

    一.重写条件: 1.子类方法名必须与被覆盖方法名一致 2.子类方法访问修饰符权限必须等于或大于被覆盖方法的访问修饰符权限 3.子类方法的返回值类型必须与被覆盖方法返回值类型一致 4.子类方法抛出异常必 ...

  3. java中实现对list的模糊查询

    比如我有下面这样一个List,里面存放的是多个Employee对象.然后我想对这个List进行按照Employee对象的名字进行模糊查询.有什么好的解决方案么? 比如我输入的查询条件为"wa ...

  4. JAVA中oracle分页语句,oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

  5. java中的批处理_Java中的批处理

    什么是批处理? Java中的批处理用于执行一组查询或批处理,因为一次又一次地执行单个查询会浪费时间并降低性能.因此,使用批处理可以一次执行多个查询.这样可以提高程序的性能. 批处理可以通过使用Java ...

  6. Java中Hbase查询,复杂,条件范围,时间范围,精确查询等等

    java中Hbase各种查询 根据列族名,key,范围查询等 网上看到很多Hbase查询,没找到一个相对全面的,这里我来总结一下吧 声明下面conn是什么 public static Connecti ...

  7. Java中使用es条件构造器BoolQueryBuilder

    前言 由于es在java中查询没法像mybatis那样方便,而且es的构造器使用也比较繁琐,理解不是很方便,所以写一篇文章来记录es构造器BoolQueryBuilder查询时各种条件的构造的正确姿势 ...

  8. 实战 Java 第5天:开发商品查询(模糊查询与条件查询)接口

    实战 Java 第5天:开发商品查询接口 前言 一.在 ProductService 类中添加接口 二.在 ProductMapper 类中添加接口 三.增加 sql 语句 四.在 ProductCo ...

  9. java if and_关于java:if语句中可以有两个条件吗

    我是Java编码的初学者,因此我会定期浏览以我的基本知识查找初学者项目. 最近,我正在创建一个聊天程序,用户可以在其中与我的计算机聊天. 这是代码的一部分,因为我不需要显示整个代码: System.o ...

最新文章

  1. hdi-shared Service plan的分配
  2. 如何在Java中使用重复项查找整数数组中的K个缺失数字?
  3. 2090. 「ZJOI2016」旅行者 分治,最短路
  4. 孪生神经网络_轩辕实验室:数字孪生:基于机器学习的汽车数字孪生模型
  5. 几款Java开发者必备常用的工具,准点下班不在话下
  6. 使用ViewModel模式简化WPF TreeView
  7. android之提示Cleartext HTTP traffic to not permitted
  8. 共享一款基于 jQuery 的多功能对话框插件 jBox,强不强大,用了才知道:)
  9. stm32最小系统板原理图_嵌入式单片机之STM32F103C8T6最小系统板电路设计参考
  10. 全国计算机考试一级在线模拟,全国计算机等级考试一级模拟试题和答案
  11. 中小型企业网络IP地址规划案例
  12. win10、win7安装SQLServer2000最详细教程
  13. [TJOI2019]唱、跳、rap和篮球 题解
  14. 李嘉诚14句经典成功格言
  15. ireport 5.6.0 添加 Conditional Style 动态加粗字体
  16. 网络营销相关名词解释
  17. 压缩感知稀疏基之离散余弦变换(DCT)和离散正弦变换(DST)
  18. 将字符串转化为字符串数组
  19. iPerf 3.13 的交叉编译,移植,使用
  20. python math库 sqrt eval_Python 在线基础课程

热门文章

  1. ucOS_II移植:Stm32启动代码分析
  2. muduo学习笔记 - 第五章 高效的多线程日志
  3. 第十一届河南省赛--H : Attack City and Capture Territory
  4. vscode 上刷leetcode算法题(含配置)
  5. pygame中Rect(left, top, width, height)的参数详解
  6. win7 easybcd 安装centos7.5 双系统
  7. Ubuntu 上更新 Flash 插件
  8. linux+qt导入构建,如何在Qt Creator项目向导中添加自定义构建步骤?
  9. c++ 9.程序流程结构
  10. 7-二路归并排序C实现(递增递减的简单转换)