实例请教hibernate如何实现模糊查询

问题描述

我现在需要做一个东西其中涉及到用hibernate一个模糊查询比如,user表,映射到一个Pojo名字叫user里面有5个属性name,birthday,telephonenumber,address,email现在需要做个查询,要求从页面传入这5个属性,做多个值的联合模糊查询,如果某个属性是空的,那这个属性在查询当中就是不作限制,搜寻所有的值比如,页面输入,name="王",其他4项都是空那么就搜索,名字当中含有“王”字的所有人,比如王军,李王军,李军王我的思路第一,写一个HQL语句SELECT * FROM user WHERE user.name LIKE string1AND user.birthday LIKE string2 AND user.telephonenumber LIKE string3 AND address LIKE string4 AND email LIKE string5第二,对页面传入的值做判断如果某项为空,则这一项的string 值为通配符%如果不为空,则在页面传入的值前后都加上通配符%然后运行HQL语句小弟我新学,水平还比较差不知我的思路可行否,或者有什么问题存在,或者有什么更好的思路各位大侠尤其是专家们多多指教问题补充:QBC是啥不懂哈,请详细说明Criteria我查了些资料,都说得不明不白的,实在是没搞懂问题补充:另外我知道我的HQL写得好像SQL一样实在是不太搞得清楚HQL语法跟SQL语法有什么差别如果高手们有空也请根据这个实例说明一下问题补充:关于volecity感谢兄弟的建议,但是第一俺不会用,需要另外学,增加了项目时间第二这个项目没打算用模板,如果用的话可能是freemarker,但还是不用为佳所以这个方案在此项目中只好不考虑了问题补充:关于数量和速度俺是打算分页的,要另外写分页的类,所以没有写在这个问题里面,到时候关于分页只怕还有问题请教另QBC的话,我的搜索里面某些需要联表查询的,当然这一个是不用的,看了很多资料,都没有涉及QBC在联表方面的用法,这也是我没有用Criteria的原因问题补充:为什么会慢怎么提高速度请ThinkingInAll 教我问题补充:多谢大家解答但是好像只能采纳一个答案不知道能不能像CSDN一样平均散分

解决方案

你直接两边都加上%没关系的。是空的话就让它转换成"",这样子就行了。你用QBC写会比较好看些,维护也简单。List<Stock> list = createCriteria(Expression.eq(StockDomain.STORE_HOUSE_ID, storeHouseID)).add(Expression.like(StockDomain.PRODUCT_NAME, productName,MatchMode.ANYWHERE)).list()MatchMode.ANYWHERE
解决方案二:
就查个User嘛,干嘛还要用lucence。杀鸡焉用牛刀?!关联查询?不是没有,是你没认真看过而以。孙卫琴有本叫《精通Hibernate:javaxxxxxxxx》难得的好书。你可以找来看看,现在的问题里面都会有解答。
解决方案三:
同时取得可能需要的5个值 如果为null 用“”代替 String hql=“select u from user as u where u.uname like /%“+传过来的name+”%/ and u.birthday like /%"+传过来的生日+"%/ and ...以此类推”用hql语句和 sql差不多sql里查询的是表 例 select * from 表名hql查询的是对象 例 select tab from 对象名 as tab(tab是给对象取的别名)sql里还查询表里的列 select * from 表名 where 列明=‘xxx’hql里查询对象的属性 select tab from 对象名 as tab where tab.属性名hql里不能用sql里的聚合函数 比如 avg() sum()等。。。。这是我所知道的 不详细的请其它人补充~~~
解决方案四:
你用了4个like能不慢吗?like又不能用索引不说百万,你搞个几十万条查一下试试看速度就是蜗牛像这种很多like的搜索用全文搜索引擎来搜
解决方案五:
我跟你说,你再怎么分页,数据量上去也不会快~~~~~~~应该会很慢很慢,比如等个几分钟
解决方案六:
引用QBC是啥 不懂哈,请详细说明 Criteria我查了些资料,都说得不明不白的,实在是没搞懂QBC就是query by criteria。就是通过criteria来查询。你有没有看上面的语句,也你的零乱的HQL是不是整洁多了。http://www.souzz.net/html/edu/jsp/J2EE/7193.html帮你找了一个。你看看吧。另外讲一下,你用判断是很差劲的。多余出来太多的代码。
解决方案七:
你这样做,到时候数据量上去,你搜索n慢
解决方案八:
什么都不用的话 你的思路挺好的 没有什么更加省力的方法了
解决方案九:
hibernate把HQL翻译成sql,它会根据不同的数据库翻译成不同的sql
解决方案十:
用Velocity最简单了 不要任何基础
解决方案十一:
STRING SQL="SELECT * FROM user WHERE 1=1 "if(string1不为空){SQL=SQL+"and user.name LIKE string1 "}类推,总的说,和你的一样的思路
解决方案十二:
还是用lucence把
解决方案十三:
用Velocity模板写类似这样#if($stringOne)and string1 like stringOne#else

时间: 2024-09-21 15:10:29

实例请教hibernate如何实现模糊查询的相关文章

中文查询失败-hibernate session.createSQLQuery 模糊查询失败

问题描述 hibernate session.createSQLQuery 模糊查询失败 Hibernate: SELECT * from court where is_delete=0 and name like '%成成%' limit ? 将上面的SQL放到工具上面可以执行成功,但是hibernate查询不到数据. 如果我将高尔夫换成英文或者数字就可以查询成功,网上很多人都说是乱码照成的,但是我的SQL显示的不是乱码.请问有谁知道什么原因,并且如何解决. hibernate 版本4.3.5

服务器-hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到

问题描述 hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到 用hibernate做模糊查询,页面传递参数也处理了乱码 @Action(value="searchNameByad") public String searchNameByad()throws Exception{ System.out.println("android发送请求获取的参数是:"+buildingname); //解决乱码问题 String bn = new Str

Java模糊查询方法详解_java

当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where '1'='1'加上list就可以完美解决这个问题了,废话少说,上代码: // 模糊查询方法 public List<person> query() { List<person> list = new ArrayList<>(); Connection con = null

求教 Textbox控件与数据库做类似百度模糊查询

问题描述 求帮忙有没有实例textbox控件做模糊查询! 解决方案 解决方案二:数据库表中数据是同步过来的,在textbox中关联表中数据模糊输入!选中!解决方案三:一般好像都是用数据库语句模糊查询like%aaa%解决方案四:百度的查询可没那么简单简单的模糊查询,一般查询的源都是数据库里的用sql语句实现select*from表where字段like'%查询内容%'解决方案五:利用TextBox文本框模糊查询数据库名称下的相关内容实例//文本框设置<asp:TextBoxCssClass=&quo

hibernate模糊查询条件是中文 但是不能返回值

问题描述 小弟请教一下:我用的hibernate模糊查询页面的数据是utf-8,数据库也是模糊查询的条件是中文他就是返回为空但是是数字他又正确了我保证hql语句正确的用的是SSHspring我配置了characterEncoding=UTF-8请大家赐教 解决方案 解决方案二:你首先要看看不的数据库的中文是否是乱码,是的话那就不能查询出来,数字又正确,说明你的查询语句没错,仔细看下解决方案三:数据库不是乱码,数据是正确的查询语句如下:fromDepartmentdmwheredm.departm

Hibernate模糊查询

和SQL查询一样,Hibernate,HQL使用like关键字进行模糊查询.模糊查询能够比较字符串是否与指定的字符串模式匹配.其中使用通配符表示:如下 %(百分号):匹配任意类型.任意长度的字符串,中文则需要两个百分号"%%" _(下划线):匹配单个任意字符,一般用来限制字符串表达式的长度. 下面举例说明: 1.检索姓名以"M"开头的同学:   String queryString="from studentInfo s where s.sname lik

java留言管理系统中模糊查询实例分享_java

本文分享了一个基于MVC+DAO的留言管理系统,包含增删改查,其中查询,有全部查询和按关键字进行模糊查询的功能,具体内容如下 NoteDAO.Java package cn.mldn.lxh.note.dao ; import java.util.* ; import cn.mldn.lxh.note.vo.* ; public interface NoteDAO { // 增加操作 public void insert(Note note) throws Exception ; // 修改操作

模糊查询分页hibernate struts

问题描述 模糊查询分页hibernate struts 我在数据库里面查询所有记录 (进行了分页),然后在jsp页面想模糊查询后在分页就不知道怎么写了. 用的是hibernate + struts .比如在a.jsp显示所有记录分页,然后提供模糊查询后结果显示在 a.jsp然后将模糊查询的结果也进行分页 ,不知道怎么调用action 解决方案 hibernate -- 分页模糊查询中setParameter 和setParameterListhibernate -- 分页模糊查询中setPara

oracle-在线等,请教一下,hibernate 原生 sql语句 查询lag( , , ),出现语法错误

问题描述 在线等,请教一下,hibernate 原生 sql语句 查询lag( , , ),出现语法错误 String queryString = "select smsid from Sms where smsid = ( select c.p from ( select smsid,lag(smsid,1,0) over (order by smsid) as p from Sms) c where c.smsid= "+ smsid + ")"; SQLQue