精华内容
下载资源
问答
  • java 代码实现模糊查询

    千次阅读 2019-09-17 17:26:53
    转载于:https://my.oschina.net/u/3774949/blog/1923563

    转载于:https://my.oschina.net/u/3774949/blog/1923563

    展开全文
  • java代码实现模糊查询用以筛选list中数据 List<IOTDeviceStatus> list = returnList.stream().filter(d -> d.getName().contains(iotMindDevice.getDeviceName())).collect(Collectors.toList()); ...

    java代码实现模糊查询用以筛选list中数据

     List<IOTDeviceStatus>  list = returnList.stream().filter(d -> d.getName().contains(iotMindDevice.getDeviceName())).collect(Collectors.toList());
    
    展开全文
  • Java实现模糊查询

    2020-09-22 09:40:57
    一、前端页面的代码 <div> <form action="${pageContext.request.contextPath}/ProductServlet" method="get"> <input type="hidden" name="action" value="findAllProductsByTJ"> &...

    一、前端页面的代码

    	<div>
    			<form action="${pageContext.request.contextPath}/ProductServlet" method="get">
    				<input type="hidden" name="action" value="findAllProductsByTJ">
    				<select name="cid">
    					<c:forEach items="${categoryList}" var="category">
    						<option value="${category.cid}">${category.cname}</option>
    					</c:forEach>
    				</select>
    				<input type="text" name="pname">
    				<input type="submit" value="搜索">
    			</form>
    		</div>
    

    页面的样式:

    <style type="text/css">
    			div{
    				position:absolute;/*绝对定位*/
    				left:529px;
    				top:80px;
    			}
    		</style>
    

    点击搜索,提交表单后,跳转到ProductServlet执行代码:

    /*
        *多条件组合查询
        * */
        public void findAllProductsByTJ(HttpServletRequest request, HttpServletResponse response) throws ServletException,
                IOException {
            //获得请求参数 cid pname
            String cid=request.getParameter("cid");
            String pname=request.getParameter("pname");
            //调用service 层多条件组合查询的方法
            List<Product> productList=service.findAllProductsByTJ(cid,pname);
            //将查询结果保存request域中
            request.setAttribute("productList",productList );
            //转发到product_list.jsp
            request.getRequestDispatcher("/product_list.jsp").forward(request,response );
        }
    

    service层代码:

    /*
        * 多条件组合查询
        * */
        public List<Product> findAllProductsByTJ(String cid, String pname) {
            return dao.findAllProductsByTJ(cid,pname);
        }
    

    dao层代码:

    /*
        * 多条件查询
        * */
        public List<Product> findAllProductsByTJ(String cid, String pname) {
            //1.获得JDBCTemplate
            JdbcTemplate template=new JdbcTemplate(DRUIDUtils.getDataSource());
            //2.编写临时SQL语句
            StringBuilder sb=new StringBuilder("select * from product where 1=1 ");
            //3.定义一个list集合存储SQL语句占位符的值
            ArrayList<Object> list=new ArrayList<>();
            //判断cid
            if(cid!=null && !cid.trim().equals("")){
                sb.append("and cid=? ");
                list.add(cid);
            }
            //判断pname
            if(pname!=null && !pname.trim().equals("")){
                sb.append("and pname like ?");
                list.add(pname);
            }
            //生成最终SQL语句
            String sql=sb.toString();
            //设置实际参数
            Object[] params=list.toArray();
            //执行查询操作
            List<Product> products=template.query(sql,new BeanPropertyRowMapper<>(Product.class) ,params );
            return products;
        }
    
    展开全文
  • 比如法律条款,医疗术语,拿到这些数据主要是用于模糊查询,我对相关代码进行了改动,把原来固定的通过某些字段的模糊查询改为可选择通过哪些字段进行模糊查询,下面看一下代码    控制层...

      下面说说看到的工作项目中的代码,是这个样子的,事先查询一次数据库,将查询到的整张表的数据存到内存,以后使用时不再查询数据库,而直接操作内存中的数据,这主要用于数据库中的数据比较稳定,不会轻易改变的情况,比如法律条款,医疗术语,拿到这些数据主要是用于模糊查询,我对相关代码进行了改动,把原来固定的通过某些字段的模糊查询改为可选择通过哪些字段进行模糊查询,下面看一下代码

     

      控制层,服务层没什么可说的,直接看代码

    package study.fuzzysearch.controller;
    
    import java.util.List;
    
    import study.fuzzysearch.bean.User;
    import study.fuzzysearch.service.UserService;
    
    public class UserController {
        public List<User> getUserByFuzzySearch(String searchStr, String[] searchFields, boolean startMatch)
        {
            return new UserService().getUserByFuzzySearch(searchStr, searchFields, startMatch);
        }
    }
    package study.fuzzysearch.service;
    
    import java.util.List;
    
    import study.fuzzysearch.bean.User;
    import study.fuzzysearch.dao.UserDao;
    
    public class UserService {
        public List<User> getUserByFuzzySearch(String searchStr, String[] searchFields, boolean startMatch)
        {
            return new UserDao().getUserByFuzzySearch(searchStr, searchFields, startMatch);
        }
    }

      DAO层实现如下

    package study.fuzzysearch.dao;
    
    import java.util.List;
    
    import study.fuzzysearch.bean.User;
    import study.fuzzysearch.interf.Filter;
    import study.fuzzysearch.interf.impl.FuzzyImpl;
    
    public class UserDao {
        // 模拟从数据库取数据
        User[] users = new User[]{
            new User("10001", "zihan", "zh"),
            new User("zh002", "zuosan", "zs"),
            new User("10003", "zisha", "zs"),
            new User("10004", "zizhai", "zw"),
            new User("10005", "zaohu", "zh"),
            new User("10006", "zhanghu", "zh")
        };
        public List<User> getUserByFuzzySearch(String searchStr, String[] searchFields, boolean startMatch)
        {
            // 可以初始化一次保存起来,留以后用
            FuzzyImpl<User> fuzzy = new FuzzyImpl<User>(users) {
                public String getName(User t) {
                    return t.getUserName();
                }
                
                public String getPy(User t) {
                    return t.getPy();
                }
                
                public String getUserId(User t) {
                    return t.getUserId();
                }
            };
            
            final String[] finalSearchFields = searchFields;
            return fuzzy.search(searchStr, new Filter<User>() {
                
                public String[] searchFields() {
                    return finalSearchFields;
                }
                
                // 这里可以定制一些情况,比如张三在黑名单里,不返回张三
                public boolean match(User t) {
                    if(t.getUserId().equals("10006"))
                        return false;
                    
                    return true;
                }
            }, startMatch);
        }
    }

      再看下两个接口

    package study.fuzzysearch.interf;
    
    public interface Filter<T> {
        public boolean match(T t);
        public String[] searchFields();
    }

      上面的接口的match可以过滤掉无效的结果,searchFields指定通过哪些字段进行模糊查询

    package study.fuzzysearch.interf;
    
    public interface Fuzzy<T> {
        
        String getName(T t);
        String getPy(T t);
        String getUserId(T t);
    }

      上面的接口指定可以通过名字,拼音码,id进行模糊查询,如果有更多的选择,可以增加方法

      下面看一下最核心的方法FuzzyImpl类

    package study.fuzzysearch.interf.impl;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import study.fuzzysearch.interf.Filter;
    import study.fuzzysearch.interf.Fuzzy;
    
    public abstract class FuzzyImpl<T> implements Fuzzy<T>{
        private T[] datas;
        private Map<String, List<T>> nameMap = new HashMap<String, List<T>>();
        private Map<String, List<T>> pyMap = new HashMap<String, List<T>>();
        private Map<String, List<T>> userIdMap = new HashMap<String, List<T>>();
        private Map<String, Map<String, List<T>>> allMap = new HashMap<String, Map<String, List<T>>>();
        
        public FuzzyImpl(T[] datas)
        {
            this.datas = datas;
            
            List<T> temp = null;
            if(null != datas && datas.length > 0)
            {
                for(int i = 0; i < datas.length; i++)
                {
                    temp = nameMap.get(getName(datas[i]));
                    if(temp == null)
                    {
                        temp = new ArrayList<T>();
                    }
                    
                    temp.add(datas[i]);
                    nameMap.put(getName(datas[i]), temp);
                    
                    temp = pyMap.get(getPy(datas[i]));
                    if(temp == null)
                    {
                        temp = new ArrayList<T>();
                    }
                    
                    temp.add(datas[i]);
                    pyMap.put(getPy(datas[i]), temp);
                    
                    temp = userIdMap.get(getUserId(datas[i]));
                    if(temp == null)
                    {
                        temp = new ArrayList<T>();
                    }
                    
                    temp.add(datas[i]);
                    userIdMap.put(getUserId(datas[i]), temp);
                }
                
                allMap.put("py", pyMap);
                allMap.put("userId", userIdMap);
                allMap.put("name", nameMap);
            }
        }
        
        public List<T> search(String searchStr, Filter<T> f, boolean startMatch)
        {
            List<T> result = new ArrayList<T>();
            List<T> temp = new ArrayList<T>();
            if(null != searchStr && searchStr.length() > 0)
            {
                String[] searchFields = f.searchFields();
                if(null != searchFields && searchFields.length > 0)
                {
                    for(int i = 0; i < searchFields.length; i++)
                    {
                        Map<String, List<T>> tempSearchMap = allMap.get(searchFields[i]);
                        temp.addAll(search(searchStr, tempSearchMap, startMatch));
                    }
    
                    Set<T> tempSet = new HashSet<T>(temp);
                    temp = new ArrayList<T>(tempSet);
                    
                    for(int i = 0; i < temp.size(); i++)
                    {
                        if(f.match(temp.get(i)))
                        {
                            result.add(temp.get(i));
                        }
                    }
                }
            }
            
            return result;
        }
        
        public List<T> search(String searchStr, Map<String, List<T>> compMap, boolean startMatch)
        {
            List<T> result = new ArrayList<T>();
            Set<String> keys = compMap.keySet();
            Iterator<String> keyIte = keys.iterator();
            while(keyIte.hasNext())
            {
                String next = keyIte.next();
                if(startMatch)
                {
                    if(next.startsWith(searchStr))
                    {
                        result.addAll(compMap.get(next));
                    }
                }
                else
                {
                    if(next.contains(searchStr))
                    {
                        result.addAll(compMap.get(next));
                    }
                }
            }
            
            return result;
        }
        
        public T[] getAllDatas()
        {
            return datas;
        }
    }

      构造器中将名字,拼音码,ID分别存在了Map中,而且相同的名字,拼音码,ID存在了一起,这样减小了查询时的次数,search方法根据searchFields从名字,拼音码或者ID的Map中查询结果,并将结果合并去重得到最终结果

      再看一下测试代码

    package study.fuzzysearch.test;
    
    import study.fuzzysearch.controller.UserController;
    
    public class Test {
        public static void main(String[] args) 
        {
            // getUserByFuzzySearch
            UserController controller = new UserController();
            
            System.out.println(controller.getUserByFuzzySearch("zh", new String[]{"name", "userId", "py"}, true));
            System.out.println(controller.getUserByFuzzySearch("zh", new String[]{"name", "py"}, false));
        }
    }

      结果如下

      可以对照着users的内容分析结果

      代码是jdk5.0下的,所以没有用到什么高级特性,其中值得说的地方就是Fuzzy接口中的方法,里面的方法实现是在新建FuzzyImpl对象的时候,因为这时会确定要进行模糊查询的对象是什么,从而得到对象的名字,拼音码,ID,这里算是个技巧了,在对象不同的情况下通过统一的方法获取想要的数据,至于Filter接口,是用来确定查询范围与结果范围的。

      好了,就说到这里吧,有喜欢的评论一下吧。

    转载于:https://www.cnblogs.com/liunianfeiyu/p/10125720.html

    展开全文
  • java模糊查询

    万次阅读 多人点赞 2017-06-26 22:23:55
    今晚笔者将详细讲解java模糊查询的细节及要点,希望能给大伙带来启发。 2.实现方案 后台代码: ①UserInfo实体类的定义 public class UserInfo { private String username; private Integer age; pr
  • * 查询列表 * @return */ public String findJkjkMalfuncExperiencList() { StringBuilder hql =new StringBuilder("from JkjkMalfuncexperience "); boolean b = true; if...
  • The Sixth------JAVA关于ssm实现模糊查询 关键代码 UserMapper.xml文件 <select id="findUserByName" resultType="user"> select * from tb_user where username like concat('%' #{username} '%') limit #{...
  • 主要介绍了Java操作mongodb的模糊查询和精确查询,使用regex关键字实现模糊查询操作,具体实现代码大家参考下本
  • //这个代码该怎么改成行键的模糊查询呢 List<UFile> list=new ArrayList(); Table table=conn.getTable(TableName.valueOf("yunpro")); Get get = new Get(Bytes.toBytes("lrd")); get.addColumn(Bytes....
  • java实现模糊搜索算法

    2020-08-15 12:55:40
    java实现模糊搜索算法介绍代码 介绍 这里说的模糊查询不是sql中like的效果,是相当于lucene中的FuzzyQuery效果。 比如:搜索值是"hella",匹配的数据是"hello",则模糊度为1匹配上该数据。 代码 算法: public ...
  • 最近想在网上找些使用jdbc连接操作SQLserver的完成模糊查询或者多条件Java代码,可是网上鱼龙混杂,很少有关于模糊查询和多条件查询的资料,不过还好最终我解决了,把这个Java方法分享给大家。 准备工作 开发工具...
  • AutoCompleteTextView实现模糊查询

    千次阅读 2018-03-17 11:59:30
     今天,我要用AutoCompleteTextView实现模糊查询和自动提示,模块比较简单,先来看下效果图:上海:北京:下面贴出代码:MainActivity.java:import android.support.v7.app.AppCompatActivity; ...
  • 短视频平台源码,java中ArrayList模糊查询实现的相关代码 //原数据 private Lsit<String> mDataList = new ArrayList(); //模糊搜索后的数据 private List<String> mSearchResult = new ArrayList(); ...
  • 关于jeecg模糊查询实现 在网上看了一些解决方法,最终解决, 其实网上有一些是对的,但是对的不完全 解决方法: 在jeecg的代码中找到PageValueConvertRuleEnum.java文件,注意路径,有同名文件 org.jeecgframework....
  • 首先在文章的开头声明一下哈,本文只是介绍一种Java蛮力键树的实现,并没有什么高深的数据结构,所以数据量不超过百万字符的可以参考,数据量太大的另请高明吧。另外,后面的键树代码实际上不仅适用于中文存储和查找...
  • 使用Java语言开发项目的时候,在查询这一方面通常是直接利用查询的SQL语句完成的,但是当我们选择使用Java提供的容器(Array,List,HashMap…)作为临时数据,需要实现查询的功能如何实现呢? 本文将介绍一种模糊...
  • 有一个需求 ,查询医院科室 根据名字实现模糊搜索 ,返回页面展示层级结构 ,目前只实现了两级的层级结构,详情代码 实体类: public class Test implements Serializable { private Integer id; private String ...
  • 还记得之前的图书管理吗?学习了集合以后,使用集合来进行图书信息的存储吧!...​ 2.4根据图书名称模糊查找图书 ​ 2.5查看所有图书(三种排序) ​ 2.5.1价格从高到低排序 ​ 2.5.2价格从低到高排序
  • iBATIS模糊查询实现是如何的呢?让我们先看看例子,仿照Java的Spring+Ibatis+Struct用Castle+IBatisNet+Asp.net的开发框架的DAO的基类:BaseSqlMapDao内定义了一个内部类来辅助模糊查询。内部类代码如下: ...
  • 针对mongodb亿级别或者十亿级别的模糊查询,效率不高,解决方式是使用Es查询,这样就需要把数据导入的ES中 完整的代码实现如下所示:(仅供参考) import java.io.IOException; import java.net....
  • 如何实现模糊查询LIKE

    2020-12-17 23:05:39
    Java 代码中拼接%%(比如name = "%" + name + "%"; ),直接LIKE。因为没有预编译,存在SQL 注入的风险,不推荐使用。 2、CONCAT(推荐) <when test="empName != null and empName != ''"> AND e.emp_...
  • 模糊查询

    2021-01-20 21:30:56
    模糊查询实现有两种方式, 一是 java 代码中给查询数据加上“%” ; 二是在 mapper 文件 sql 语句的条件位置加上“%” 。 需求:查询姓名有“鹿”的学生。 例 1: java 代码中提供要查询的 “%鹿%” 接口方法: ...
  • 首先是在mongo VUE 里面使用搜索。然后是Java代码里面实现。 忽略大小写,全名称搜索 ...java 代码操作,查询不区分大小写。...// 模糊查询,不区分大小写 criteria.orOperator(Criteria
  • 如果你是看了菜鸟教程上的链接,那下面我的东西是值得你使用的。 很奇怪的是,在网上搜到的java与mogodb链接有两种方式,一种是使用一系列mogodb前缀的方法,详见... 闲话少说,直接看代码,这个java代码实现的就...
  • 我仿照Java的Spring+Ibatis+Struct用Castle+IBatisNet+Asp.net的开发框架的DAO的基类:BaseSqlMapDao内定义了一个内部类来辅助模糊查询。内部类代码如下: protected internal class KeyWordSearch { private IList ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 209
精华内容 83
关键字:

java模糊查询实现代码

java 订阅