hql的三种查询方式模糊查询(转)
Hibernate中实现模糊查询
(1)HQL查询语句
String hql = "from Subject as s where s.subname like :name and s.subinfo like :info"; // 调用session的获得数据列表方法,传递HQL查询语句
Query query = session.createQuery(hql);
query.setString("name","%"+name+"%");
query.setString("info","%"+info+"%");
(2)HQL查询语句(查询条件只能为英文或数字,汉字在传递到hibernate内部时出现乱码问题)
String hql = "from Subject as s where s.subname like '%"+name+"%' and s.subinfo like '%"+info+"%'";//调用session的获得数据列表方法,传递HQL查询语句
Query query = session.createQuery(hql);
注:Subject为数据库表subject映射的类;它有相应的属性subname、subinfo及相应的get和set方法;sub为Subject的一个实例化对象。
?
/*********
hibernate HQL 模糊查询 3种方式
以下是用 hibernate的HQL(面向对象的查询语言)实现模糊查询的3种方式,其中方式一是这三中方式中最理想的方式,至少方式一可以有效的防止由于查询条件中需要参数的增多导致的代码长度太长出现代码折行的情况(代码太长会给后期的维护和测试带来很大的不便)。但是还有比他更理想的方式,因为方式一在定义 strSQL时使用String ,这就势必会造成当变量过多时strSQL自身太长的问题。一个比较有效的改进办法就是将String 改进为StringBuffer来处理。
方法一:
java 代码
?? 1. public List listUncertainClasses(Object OId) throws Exception{??
?? 2.???? Session session=HibernateUtil.getSessionFactory().getCurrentSession();??
?? 3.???? session.beginTransaction();??
?? 4.???? String strSQL="from Classes as a where a.classno like :name";??
?? 5.???? Query query = session.createQuery(strSQL);??
?? 6.???? query.setString("name", "%"+OId+"%");??
?? 7.???? List result=query.list();??
?? 8. for(int i=0;i
?? 9.???????? Classes classes=(Classes)result.get(i);??
10.???????? String classname=classes.getClassname();??
11.???????? String classno=classes.getClassno();??
12.???????? String specName=classes.getSpeciality().getName();??
13.???????? String departName=classes.getSpeciality().getDepartment().getName();??
14.???????? System.out.println(departName+"\t"+specName+"\t"+classname+"\t"+classno);??
15.???? }??
16.???? session.getTransaction().commit();??
17. return result;??
18. }
方法二:
java 代码
?? 1. public List listUncertainClasses_01(Object OId) throws Exception{??
?? 2.???? Session session=HibernateUtil.getSessionFactory().getCurrentSession();??
?? 3.???? session.beginTransaction();??
?? 4.???? List result=session.createQuery("from Classes as a where a.classno like '%"+OId+"%'").list();??
?? 5. for(int i=0;i
?? 6.???????? Classes classes=(Classes)result.get(i);??
?? 7.???????? String classname=classes.getClassname();??
?? 8.???????? String classno=classes.getClassno();??
?? 9.???????? String specName=classes.getSpeciality().getName();??
10.???????? String departName=classes.getSpeciality().getDepartment().getName();??
11.???????? System.out.println(departName+"\t"+specName+"\t"+classname+"\t"+classno);??
12.???? }??
13.???? session.getTransaction().commit();??
14. return result;??
15. }
方法三:
java 代码
?? 1. public List listUncertainClasses_02(Object OId) throws Exception{??
?? 2.???? Session session=HibernateUtil.getSessionFactory().getCurrentSession();??
?? 3.???? session.beginTransaction();??
?? 4.???? List result=session.createQuery("from Classes as a where a.classno like :name").setParameter("pid",OId).list();??
?? 5. for(int i=0;i
?? 6.???????? Classes classes=(Classes)result.get(i);??
?? 7.???????? String classname=classes.getClassname();??
?? 8.???????? String classno=classes.getClassno();??
?? 9.???????? String specName=classes.getSpeciality().getName();??
10.???????? String departName=classes.getSpeciality().getDepartment().getName();??
11.???????? System.out.println(departName+"\t"+specName+"\t"+classname+"\t"+classno);??
12.???? }??
13.???? session.getTransaction().commit();??