hibernate中各种查询方法的总结:
1. 使用HQL语句
Query q = session.createQuery("select e from com.sun.demo.Emp e");
2. 使用Load方法(主键查询)
Emp e = (Emp)session.load(Emp.class, 1141);
3. 使用get方法(主键查询)
Emp e = (Emp)session.get(Emp.class, 1141);
4. 参数化查询(使用?通配符,或者命令通配符)
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename=?");
q.setParameter(0, "SMITH");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like ?");
q.setParameter(0, "%M%");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like :lkename");
q.setParameter("lkename", "%L%");
5. 命名查询
<query name="myquery">
<![CDATA[
from com.sun.hibernate.Employer where job = ?
]]>
</query>
Query q = session.getNamedQuery("myquery");
q.setParameter(0, "MANAGER");
6. 属性查询
Query q = session.createQuery("select max(sal) from Employer e where sal is not null");
Query q = session.createQuery("select distinct job from Employer e");
7. 实例化查询
步骤如下:
1.编写你的HQL语句
2.创建普通的Java类 -------------------与POJO类不同,它与数据库没有任何关系
3.在该java类中你需要创建和查询结果对应的字段
4.在该java类中,你需要创建合适的构造函数
5.完善你的HQL语句,使用实例化查询的方式进行包装
6.通过list.get(i)获取的结果就不再是一个数组,而是一个包装后的对象
例子:
Query q = session.createQuery("SELECT new com.sun.demo.UserDate(ename,SYSDATE) FROM Userinfo");
List list = q.list();
for(int i=0;i<list.size();i++){
UserDate u = (UserDate)list.get(i);
System.out.println(u.getEname());
}
8. 多态查询
对于pojo来说,java中的这种关系被扩展到了数据库表中
hibernate在查询一个表的同时,会检查该表所对应的POJO类有没有子类,如果有,一起查询出来
9. 分页查询
//查询第三到五条
q.setFirstResult(3);//从第三条开始
q.setMaxResults(3);//提取三条
10. uniqueResult方法查询(查询结果只能是一个字段)
Query q = session.createQuery("select count(*) from Employer");
Long count = (Long)q.uniqueResult();
11. Criteria查询(通过面向对象化的设计,将数据查询条件封装为一个对象)
Criteria c = session.createCriteria(Employer.class);
c.addOrder(Order.asc("sal")); //按薪水升序查询
c.setFirstResult(3);
c.setMaxResults(3);
List list = c.list();
for(int i=0;i<list.size();i++){
Employer emp = (Employer)list.get(i);
System.out.println(emp.getEname() + " : " + emp.getSal());
}