Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Hibernate的2种查询及分页

很久都没有使用hibernate做开发了,好多东西都有点生疏了。今天忽然想到了顺便自己就复习了一下,觉得hibernate还是很方便的至少他提供了统一的分页。开发就不会为换了数据库而去修改大量的代码了。hibernate的查询有这么2种,一种是hql查询,Criteria查询。2种我觉得使用起来都比较方便1.hql的带参数查询有一个小小的技巧,可以不用索引的方式
  1. Query q=session.createQuery("update StudentInfo set username=? where fid=?"); 
  2.             q.setString(0, "刘若英"); 
  3.             q.setInteger(1, 3); 
上面的这个是原始的写法,还有一种更好使的就是把问号的地方换成   :参数的名称  ,这样就不用怕记错顺序了。
  1. Query q=session.createQuery("update StudentInfo set username=:username where fid=:fid"); 
  2.             q.setString("username", "刘若英"); 
  3.             q.setInteger("fid", 3); 
2.使用Criteria查询数据,这种方式不需要写hql语句,个人觉得简单的使用这种方法也是足够了。Restrictions带有很多的查询条件如or,in都有相应支持
  1. public void otherQuery() { 
  2.         Session session = null
  3.         Transaction tra = null
  4.         // 通过工具类取得session  
  5.         try { 
  6.             session = HibernateUtil.getSession(); 
  7.             tra = session.beginTransaction(); 
  8.             Criteria c=session.createCriteria(StudentInfo.class); 
  9.             //c.add(Restrictions.eq("username", "潘玮柏"));  
  10.                         c.add(Restrictions.or(Restrictions.lt("fid", 5))); 
  11.                         //从第一条开始查询  
  12.                         c.setFirstResult(0); 
  13.                         //每次查询10条数据  
  14.                         c.setMaxResults(10); 
  15.             List<StudentInfo> all = c.list(); 
  16.             //查询单条数据  
  17.             //StudentInfo info=(StudentInfo)c.uniqueResult();  
  18.             for (StudentInfo studentInfo : all) { 
  19.                 System.out.println("姓名:"+studentInfo.getUsername()); 
  20.             } 
  21.             tra.commit(); 
  22.  
  23.         } catch (HibernateException e) { 
  24.             // TODO Auto-generated catch block  
  25.             e.printStackTrace(); 
  26.         } finally { 
  27.             if (session != null) { 
  28.                 session.close(); 
  29.             } 
  30.         } 
  31.     } 
同样的查询单条数据也可以使用get方法,大家可以自己试试,下面的分页面试中经常有被问到,大家可以着重记录依一下
  1. //从第一条开始查询  
  2.  c.setFirstResult(0); 
  3.  //每次查询10条数据  
  4.  c.setMaxResults(10);