hibernate的2种查询及分页

来源:互联网 发布:qq空间淘宝应用可信吗 编辑:程序博客网 时间:2024/06/15 02:59

很久都没有使用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;// 通过工具类取得sessiontry {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 blocke.printStackTrace();} finally {if (session != null) {session.close();}}}

同样的查询单条数据也可以使用get方法,大家可以自己试试,下面的分页面试中经常有被问到,大家可以着重记录依一下

           //从第一条开始查询            c.setFirstResult(0);            //每次查询10条数据            c.setMaxResults(10);




原创粉丝点击