zoukankan      html  css  js  c++  java
  • 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
     
    我个人用于测试的,仅供参考,如果读者觉得有问题,可以给我留言交流.
     
  • 相关阅读:
    如何在IIS添加MIME扩展类型
    如何在ASP.NET的web.config配置文件中添加MIME类型
    Entity Framework 数据库先行、模型先行、代码先行
    Entity Framework 代码先行之约定配置
    netcore3.0 IOptions 选项(一)
    netcore3.0 IFileProvider 文件系统
    netcore3.0 IServiceCollection 依赖注入系统(三)
    netcore3.0 IServiceCollection 依赖注入系统(二)
    netcore3.0 IServiceCollection 依赖注入系统(一)
    netcore3.0 IConfiguration配置源码解析(四)
  • 原文地址:https://www.cnblogs.com/xm1-ybtk/p/4966470.html
Copyright © 2011-2022 走看看