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