1.27 【杂记】hibernate的各种查询方法

时间:2021-10-03 19:32:08

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

       }