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

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

我个人用于测试的,仅供参考,如果读者觉得有问题,可以给我留言交流.

时间: 2024-10-10 19:20:12

java中多条件与不定条件查询的相关文章

mongo java中and、or多条件查询

//and.or多条件联合查询 //age条件(and条件) BasicDBList condList = new BasicDBList(); BasicDBObject cond = new BasicDBObject(); cond.put("$gt",0); cond.put("$lte",40); BasicDBObject composeCod = new BasicDBObject(); composeCod.put("age",

Java中的多个&amp;&amp;(与)连用作为判断条件时的执行问题

在Java中,&&只要第一个条件不满足,后面条件就不再判断. 比如以下代码: public class Test { public static void main(String[] args){ int x=0; int y=0; int k=0; for (int z=0;z<5;z++){ if((++x>2)&&(++y>2)&&(k++>2)){ ++x; ++y; k++; } } System.out.println(x

Java中条件语句和if-else的嵌套原则

if(condition)Statement 在此时的条件语句中的条件是需要用括号把它括起来.   其实,Java中的条件语句和C/C++中的是一样的.而Java常常希望在某个条件为真的时候执行多条语句.此时,我们就会引入一个概念,那就是"块模块(block statement)",具体格式如下,仅供参考: { statement1 statement2 ... } 就拿下面的例子,我们来试试上面的这个格式吧! if(score>=90) system.out.println(&

java中的switch用String作为条件

在开发java程序的过程中,我们遇到了条件判断首选就是switch,但是java中的switch功能不支持字符串作为条件.这时我们该怎么办呢? --使用枚举. 一.枚举简单了解 1.enum是一种数据类型. 特殊:是指在枚举中将变量的值一一列出来,变量的值只限于列举出来的值的范围内. 特殊到一般化:enmu 就是我们根据自己业务需要定义的同"String,int"相同的数据类型.同时enum也就是一种类,可以在enum中定义方法,在使用的时候就按照调用类的方式来调用. 2.定义成枚举的

java中switch语句中的defaul条件的位置

在java中switch语句中,每个case分支就是一个入口,如果都没有满足条件,那么将会走到default分支中.那么这个default分支的位置会不会影响到执行的流程呢? package com.app.statement; import java.util.Scanner; /**  * Created by charles on 2015/7/12.  */ public class SwitchTest {     public static void main(String[] ar

linq中如何实现多个条件的联合查询

目前接触处理数据这一块比较多,在处理内存中的数据源的时候我一般使用的是linq,linq使用起来像sql语句一样,用法简单,功能强大. 最近需要实现一个从两个不同的文件读取不同的数据,然后根据这两个数据的一些字段经行联合,然后把他们的结果放到一个数据源里面里啊,一般的联合查询两个数据源,都是通过一个数据源的字段和另一个数据源的字段经行匹配就可以了,如果是这样的话在linq实现和在sql里面实现其实差不多,下面是单个条件的联合查询的代码如下所示 var result1 = from l1 in l

JAVA性能调优-在循环条件中不要使用表达式

1.JAVA性能调优-在循环条件中不要使用表达式 我们在学习JAVA性能调优的时候,经常能看到这一的一段话:在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. import java.util.vector; class cel { void method(vector vector) { for (int i= 0; i < vector.size (); i++)  //violation ; //... } } 更正:

sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项

emp表中的数据 1. 使用in的时候,忽略为null的,不会查询出comm为null的数据 select * from emp e where e.comm in (300, 500, null); 2. 使用not in的时候,如果 not in后面的选项中没有null,只会查询从comm列不为空的列中过滤,会过滤掉comm为null的数据 select * from emp e where e.comm not in (300, 500); 3. 使用not in 的时候,如果not in

Python学习:基本数据类型与变量(中)与基础之条件及循环(上)

一.数据类型和变量 1.可变与不可变数据类型 可变数据类型:在id不变的情况下,数据类型内部的元素可以改变 列表 字典 不可变数据类型:value改变,id也跟着改变 数字 字符串 布尔 补充: True--->1 False--->0 2.运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: and注解: 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. 在布尔上下文中从左到右演算表达式的