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




你可能感兴趣的:(hibernate分页,hibernate)