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(13); 

上面的这个是原始的写法,还有一种更好使的就是把问号的地方换成    :参数的名称  ,这样就不用怕记错顺序了。

  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); 

相关内容