二、框架学习 (一)Hibernate框架学习 (4)Hibernate查询操作

Hibernate的查询方式

         1 对象导航查询

                   (1)根据id查询某个客户,再查询这个客户里面所有的联系人

         2 OID查询

                   (1)根据id查询某一条记录,返回对象

         3 hql查询。

                   (1) Query对象,写hql语句实现查询

         4 QBC查询。

                   (1) Criteria对象

         5 本地sql查询

                   (1) SQLQuery对象,使用普通sql实现查询

测试数据库如下

t_customer表:

 t_linkman表:

 

 

一、 对象导航查询

  1 查询某个客户里面所有联系人过程,使用对象导航实现

  客户类:

 1 package cn.itcast.entity;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 public class Customer {
 7     private Integer cid;
 8     private String custName;
 9     private String custLevel;
10     private String custSource;
11     private String custPhone;
12     private String custMobile;
13     
14     private Set<LinkMan> setLinkMan=new HashSet<LinkMan>();
15 
16     public Integer getCid() {
17         return cid;
18     }
19 
20     public void setCid(Integer cid) {
21         this.cid = cid;
22     }
23 
24     public String getCustName() {
25         return custName;
26     }
27 
28     public void setCustName(String custName) {
29         this.custName = custName;
30     }
31 
32     public String getCustLevel() {
33         return custLevel;
34     }
35 
36     public void setCustLevel(String custLevel) {
37         this.custLevel = custLevel;
38     }
39 
40     public String getCustSource() {
41         return custSource;
42     }
43 
44     public void setCustSource(String custSource) {
45         this.custSource = custSource;
46     }
47 
48     public String getCustPhone() {
49         return custPhone;
50     }
51 
52     public void setCustPhone(String custPhone) {
53         this.custPhone = custPhone;
54     }
55 
56     public String getCustMobile() {
57         return custMobile;
58     }
59 
60     public void setCustMobile(String custMobile) {
61         this.custMobile = custMobile;
62     }
63 
64     public Set<LinkMan> getSetLinkMan() {
65         return setLinkMan;
66     }
67 
68     public void setSetLinkMan(Set<LinkMan> setLinkMan) {
69         this.setLinkMan = setLinkMan;
70     }
71 
72     @Override
73     public String toString() {
74         return "Customer [cid=" + cid + ", custName=" + custName + ", custLevel=" + custLevel + ", custSource="
75                 + custSource + ", custPhone=" + custPhone + ", custMobile=" + custMobile 
76                 + "]";
77     }
78     
79     
80     
81 }

    客户类对应的xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <!-- 1配置类和表对应
 7         c1ass标签
 8         name属性:实体类全路径
 9         tab1e属性:数据库表名称 
10     -->
11     <class name="cn.itcast.entity.Customer" table="t_Customer">
12         <!-- 2配置实体类id和表id对应
13             hibernate要求实体类有一个属性唯一值
14             hibernate要求表有字段作为唯一值
15         -->
16         <!-- id标签
17             name属性:实体类里面主d属性名称
18             co1umn属性:生成的表字段名称
19         -->
20         <id name="cid" column="cid">
21             <!-- 设置数据库表id增长策略
22                 native:生成表id值就是主键自动增长 
23             -->
24             <generator class="native"></generator>
25         </id>
26         <!-- 
27             配置其他属性和表字段对应
28             name属性:实体类属性名称
29             column属性:生成表字段名称
30          -->
31         <property name="custName" column="custName"></property>
32         <property name="custLevel" column="custLevel"></property>
33         <property name="custSource" column=" custSource"></property>
34         <property name="custPhone" column=" custPhone"></property>
35         <property name="custMobile" column=" custMobile"></property>
36         <!-- 一对多设置 -->
37         <set name="setLinkMan" cascade="save-update,delete" inverse="true">
38             <key column="clid"></key>
39             <one-to-many class="cn.itcast.entity.LinkMan"/>
40         </set>
41     </class>
42 </hibernate-mapping>

 

     联系人类:

 1 package cn.itcast.entity;
 2 
 3 public class LinkMan {
 4     private Integer lkm_id;
 5     private String lkm_name;
 6     private String lkm_gender;
 7     private String lkm_phone;
 8     private Customer customer;
 9     
10     
11     
12     
13     
14     
15     public Customer getCustomer() {
16         return customer;
17     }
18     public void setCustomer(Customer customer) {
19         this.customer = customer;
20     }
21     public Integer getLkm_id() {
22         return lkm_id;
23     }
24     public void setLkm_id(Integer lkm_id) {
25         this.lkm_id = lkm_id;
26     }
27     public String getLkm_name() {
28         return lkm_name;
29     }
30     public void setLkm_name(String lkm_name) {
31         this.lkm_name = lkm_name;
32     }
33     public String getLkm_gender() {
34         return lkm_gender;
35     }
36     public void setLkm_gender(String lkm_gender) {
37         this.lkm_gender = lkm_gender;
38     }
39     public String getLkm_phone() {
40         return lkm_phone;
41     }
42     public void setLkm_phone(String lkm_phone) {
43         this.lkm_phone = lkm_phone;
44     }
45     @Override
46     public String toString() {
47         return "LinkMan [lkm_id=" + lkm_id + ", lkm_name=" + lkm_name + ", lkm_gender=" + lkm_gender + ", lkm_phone="
48                 + lkm_phone + ", customer=" + customer + "]";
49     }
50     
51     
52     
53     
54     
55 }

      联系人类对应的xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <!-- 1配置类和表对应
 7         c1ass标签
 8         name属性:实体类全路径
 9         tab1e属性:数据库表名称 
10     -->
11     <class name="cn.itcast.entity.LinkMan" table="t_LinkMan">
12         <!-- 2配置实体类id和表id对应
13             hibernate要求实体类有一个属性唯一值
14             hibernate要求表有字段作为唯一值
15         -->
16         <!-- id标签
17             name属性:实体类里面主d属性名称
18             co1umn属性:生成的表字段名称
19         -->
20         <id name="lkm_id" column="lkm_id">
21             <!-- 设置数据库表id增长策略
22                 native:生成表id值就是主键自动增长 
23             -->
24             <generator class="native"></generator>
25         </id>
26         <!-- 
27             配置其他属性和表字段对应
28             name属性:实体类属性名称
29             column属性:生成表字段名称
30          -->
31         <property name="lkm_name" column="lkm_name"></property>
32         <property name="lkm_gender" column="lkm_gender"></property>
33         <property name="lkm_phone" column="lkm_phone"></property>
34         <!-- 一对多设置 -->
35         <many-to-one name="customer" class="cn.itcast.entity.Customer" column="clid"></many-to-one>
36     </class>
37 </hibernate-mapping>

      代码:

 1 package cn.itcast.hibernatetest;
 2 
 3 import java.util.HashSet;
 4 import java.util.List;
 5 import java.util.Set;
 6 
 7 import org.hibernate.Session;
 8 import org.hibernate.SessionFactory;
 9 import org.hibernate.Transaction;
10 import org.junit.Test;
11 
12 import cn.itcast.entity.Customer;
13 import cn.itcast.entity.LinkMan;
14 import cn.itcast.utils.HibernateUtils;
15 
16 public class test {
17     @Test
18     public void test1(){
19         //获取sessionFactory对象,HibernateUtils是自己编写的工具类
20         SessionFactory sessionFactory=HibernateUtils.getSessionFactory();
21         //通过sessionFactory获取session对象
22         Session session=sessionFactory.openSession();
23         //开启事务
24         Transaction tx=session.beginTransaction();
25         
26         
27         Customer customer=session.get(Customer.class,10);
28         
29         Set<LinkMan> set=customer.getSetLinkMan();
30         for (LinkMan linkMan : set) {
31             System.out.println(linkMan);
32         }
33         
34         //提交事务
35         tx.commit();
36         //关闭session和sessionFactory
37         session.close();
38         sessionFactory.close();
39         
40     }
41 }

结果:

Hibernate:

    select

        customer0_.cid as cid1_0_0_,

        customer0_.custName as custName2_0_0_,

        customer0_.custLevel as custLeve3_0_0_,

        customer0_.custSource as custSour4_0_0_,

        customer0_.custPhone as custPhon5_0_0_,

        customer0_.custMobile as custMobi6_0_0_

    from

        t_Customer customer0_

    where

        customer0_.cid=?

Hibernate:

    select

        setlinkman0_.clid as clid5_1_0_,

        setlinkman0_.lkm_id as lkm_id1_1_0_,

        setlinkman0_.lkm_id as lkm_id1_1_1_,

        setlinkman0_.lkm_name as lkm_name2_1_1_,

        setlinkman0_.lkm_gender as lkm_gend3_1_1_,

        setlinkman0_.lkm_phone as lkm_phon4_1_1_,

        setlinkman0_.clid as clid5_1_1_

    from

        t_LinkMan setlinkman0_

    where

        setlinkman0_.clid=?

LinkMan [lkm_id=53, lkm_name=1, lkm_gender=222, lkm_phone=123456789, customer=Customer [cid=10, custName=苹果苹果, custLevel=1, custSource=null, custPhone=18763897307, custMobile=3434492]]

LinkMan [lkm_id=51, lkm_name=3, lkm_gender=222, lkm_phone=123456789, customer=Customer [cid=10, custName=苹果苹果, custLevel=1, custSource=null, custPhone=18763897307, custMobile=3434492]]

LinkMan [lkm_id=54, lkm_name=4, lkm_gender=222, lkm_phone=123456789, customer=Customer [cid=10, custName=苹果苹果, custLevel=1, custSource=null, custPhone=18763897307, custMobile=3434492]]

LinkMan [lkm_id=52, lkm_name=2, lkm_gender=222, lkm_phone=123456789, customer=Customer [cid=10, custName=苹果苹果, custLevel=1, custSource=null, custPhone=18763897307, custMobile=3434492]]

 

 

二、 OID查询

    test代码:

 1 package cn.itcast.hibernatetest;
 2 
 3 import java.util.HashSet;
 4 import java.util.List;
 5 import java.util.Set;
 6 
 7 import org.hibernate.Session;
 8 import org.hibernate.SessionFactory;
 9 import org.hibernate.Transaction;
10 import org.junit.Test;
11 
12 import cn.itcast.entity.Customer;
13 import cn.itcast.entity.LinkMan;
14 import cn.itcast.utils.HibernateUtils;
15 
16 public class test {
17     @Test
18     public void test2(){
19         SessionFactory sessionFactory=null;
20         Session session=null;
21         Transaction tx=null;
22         
23         try {
24             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
25             sessionFactory=HibernateUtils.getSessionFactory();
26 
27             //通过sessionFactory获取session对象
28             session=sessionFactory.openSession();
29             
30             //开启事务
31             tx=session.beginTransaction();
32             
33             //OID查询就是使用get方法查询出一条记录
34             LinkMan linkMan=session.get(LinkMan.class, 52);
35             System.out.println(linkMan);
36             
37             //提交事务
38             tx.commit();
39         } catch (Exception e) {
40             //异常回滚
41             tx.rollback();
42         }finally{
43             //关闭session和sessionFactory
44             session.close();
45             sessionFactory.close();
46         }
47     }
48 }

 

三、 HQL查询。

      HQL查询是使用Hibernate Query Language进行的一种查询方式,在这种查询方式中必须要写HQL语句才能查询

1 查询所有

  查询所有的hql语句格式为:from 实体类名称(以查询所有商品为例)

      代码:

    

 1     @Test
 2     public void test3(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10 
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             // 1、得到Query对象,并写入hql语句
18             Query query = session.createQuery("from LinkMan");
19             //2、使用Query对象的list方法得到数据集合
20             List<LinkMan> list = query.list();
21             //3、遍历集合获取数据
22             for (LinkMan linkMan : list) {
23                 System.out.println(linkMan);
24             }
25             
26             //提交事务
27             tx.commit();
28         } catch (Exception e) {
29             //异常回滚
30             tx.rollback();
31         }finally{
32             //关闭session和sessionFactory
33             session.close();
34             sessionFactory.close();
35         }
36     }

 

2、条件查询

  条件查询有准确查询和模糊查询,使用hql语句完成。

  (1)准确查询hql语句:from 实体类名 where 实体属性名 = ? and 实体类属性名 = ?。

  准确查询代码:

 1     @Test
 2     public void test4(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             // 1、得到Query对象,并写入hql语句
20             Query query = session.createQuery("from LinkMan where lkm_gender = ?");
21             //2、填写上一步中占位符的内容
22             query.setParameter(0, "男");
23             //3、使用Query对象的list方法得到数据集合
24             List<LinkMan> list = query.list();
25             //3、遍历集合获取数据
26             for (LinkMan linkMan : list) {
27                 System.out.println(linkMan);
28             }
29             
30             //提交事务
31             tx.commit();
32         } catch (Exception e) {
33             //异常回滚
34             tx.rollback();
35         }finally{
36             //关闭session和sessionFactory
37             session.close();
38             sessionFactory.close();
39         }
40     }

  (2)模糊查询hql语句:from 实体类名 where 实体类属性名 like  ?。

  模糊查询代码:

 1     @Test
 2     public void test5(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             // 1、得到Query对象,并写入hql语句
20             Query query = session.createQuery("from LinkMan where lkm_phone like ?");
21             //2、填写上一步中占位符的内容
22             query.setParameter(0, "%1025%");
23             //3、使用Query对象的list方法得到数据集合
24             List<LinkMan> list = query.list();
25             //3、遍历集合获取数据
26             for (LinkMan linkMan : list) {
27                 System.out.println(linkMan);
28             }
29             
30             //提交事务
31             tx.commit();
32         } catch (Exception e) {
33             //异常回滚
34             tx.rollback();
35         }finally{
36             //关闭session和sessionFactory
37             session.close();
38             sessionFactory.close();
39         }
40     }

3、排序查询

  排序查询hql语句:正序: form 实体类名称 order by 实体类属性名 asc

           倒序:from 实体类名称 order by 实体类属性名 desc

  (1)正序查询代码

 1     @Test
 2     public void test6(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             // 1、得到Query对象,并写入hql语句
20             Query query = session.createQuery("from LinkMan order by lkm_name asc");
21             //2、使用Query对象的list方法得到数据集合
22             List<LinkMan> list = query.list();
23             //3、遍历集合获取数据
24             for (LinkMan linkMan : list) {
25                 System.out.println(linkMan);
26             }
27             
28             //提交事务
29             tx.commit();
30         } catch (Exception e) {
31             //异常回滚
32             tx.rollback();
33         }finally{
34             //关闭session和sessionFactory
35             session.close();
36             sessionFactory.close();
37         }
38     }

    (2)倒序查询代码:

 1     @Test
 2     public void test7(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             // 1、得到Query对象,并写入hql语句
20             Query query = session.createQuery("from LinkMan order by lkm_name desc");
21             //2、使用Query对象的list方法得到数据集合
22             List<LinkMan> list = query.list();
23             //3、遍历集合获取数据
24             for (LinkMan linkMan : list) {
25                 System.out.println(linkMan);
26             }
27             
28             //提交事务
29             tx.commit();
30         } catch (Exception e) {
31             //异常回滚
32             tx.rollback();
33         }finally{
34             //关闭session和sessionFactory
35             session.close();
36             sessionFactory.close();
37         }
38     }

4、分页查询

  在mysql数据库中分页使用limit实现,在Hibernate中使用Query对象的两个方法实现。

  分页查询代码:

 1     @Test
 2     public void test8(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             // 1、得到Query对象,并写入hql语句
20             Query query = session.createQuery("from LinkMan");
21             //2、使用Query的方法实现分页
22             //2.1设置第一个要查询的位置(计算公式:(当前页数-1)*每页的记录数)
23             query.setFirstResult(0);
24             //2.2设置每页显示的最大记录数
25             query.setMaxResults(2);
26             // 2、使用Query对象的list方法得到数据集合
27             List<LinkMan> list = query.list();
28             // 3、遍历集合获取数据
29             for (LinkMan linkMan : list) {
30                 System.out.println(linkMan);
31             }
32             
33             
34             
35             //提交事务
36             tx.commit();
37         } catch (Exception e) {
38             //异常回滚
39             tx.rollback();
40         }finally{
41             //关闭session和sessionFactory
42             session.close();
43             sessionFactory.close();
44         }
45     }

5、投影查询

  投影查询概念:查询的不是表中的所有字段,而是一部分字段

  代码:

 1     @Test
 2     public void test9(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             // 1、得到Query对象,并写入hql语句
20             Query query = session.createQuery("select lkm_name from LinkMan");
21             // 2、使用Query对象的list方法得到数据集合
22             List<Object> list = query.list();
23             // 3、遍历集合获取数据
24             for (Object object: list) {
25                 System.out.println(object);
26             }
27             
28             
29             
30             //提交事务
31             tx.commit();
32         } catch (Exception e) {
33             //异常回滚
34             tx.rollback();
35         }finally{
36             //关闭session和sessionFactory
37             session.close();
38             sessionFactory.close();
39         }
40     }

 

6、聚集函数查询

  常用聚集函数:count  avg  max  min  sum

  以count为例进行说明

  hql语句:select count(*) from 实体类名称

    代码:

 1     @Test
 2     public void test10(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             // 1、得到Query对象,并写入hql语句
20             Query query = session.createQuery("select count(*) from LinkMan");
21             //2、获取结果(结果为long类型)
22             Object obj = query.uniqueResult();
23             //3、转化为long(类型为long,转为int会报错)
24             
25             Long long1 = (Long) obj;
26             int count = long1.intValue();
27             System.out.println(count);
28             
29             
30             
31             //提交事务
32             tx.commit();
33         } catch (Exception e) {
34             //异常回滚
35             tx.rollback();
36         }finally{
37             //关闭session和sessionFactory
38             session.close();
39             sessionFactory.close();
40         }
41     }

 

四、 QBC查询。

    使用QBC不在需要写hql语句,而是使用criteria对象的各种方法来实现

1、查询所有

 1     @Test
 2     public void test11(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             //1、创建criteria对象,指定要查询的实体类的名称
20             Criteria criteria = session.createCriteria(LinkMan.class);
21             //2、调用方法得到数据
22             List<LinkMan> list = criteria.list();
23             for (LinkMan linkMan : list) {
24                 System.out.println(linkMan);
25             }
26             
27             
28             
29             //提交事务
30             tx.commit();
31         } catch (Exception e) {
32             //异常回滚
33             tx.rollback();
34         }finally{
35             //关闭session和sessionFactory
36             session.close();
37             sessionFactory.close();
38         }
39     }

2、条件查询

  (1)准确查询

 1     @Test
 2     public void test12(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             //1、创建criteria对象,指定要查询的实体类的名称
20             Criteria criteria = session.createCriteria(LinkMan.class);
21             
22             /**
23              * 使用方法设置查询条件
24              * 使用criteria的add方法添加条件
25              * 使用Restrictios的静态方法设置条件
26              */
27             criteria.add(Restrictions.eq("lkm_id", 1));
28             
29             //2、调用方法得到数据
30             List<LinkMan> list = criteria.list();
31             for (LinkMan linkMan : list) {
32                 System.out.println(linkMan);
33             }
34             
35             
36             
37             //提交事务
38             tx.commit();
39         } catch (Exception e) {
40             //异常回滚
41             tx.rollback();
42         }finally{
43             //关闭session和sessionFactory
44             session.close();
45             sessionFactory.close();
46         }
47     }

    (2)模糊查询

 1     @Test
 2     public void test13(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             //1、创建criteria对象,指定要查询的实体类的名称
20             Criteria criteria = session.createCriteria(LinkMan.class);
21             
22             /**
23              * 使用方法设置查询条件
24              * 使用criteria的add方法添加条件
25              * 使用Restrictios的静态方法设置条件
26              */
27             criteria.add(Restrictions.like("lkm_phone", "%1025%"));
28             
29             //2、调用方法得到数据
30             List<LinkMan> list = criteria.list();
31             for (LinkMan linkMan : list) {
32                 System.out.println(linkMan);
33             }
34             
35             
36             
37             //提交事务
38             tx.commit();
39         } catch (Exception e) {
40             //异常回滚
41             tx.rollback();
42         }finally{
43             //关闭session和sessionFactory
44             session.close();
45             sessionFactory.close();
46         }
47     }

3、排序查询

  (1)正序查询

 1     @Test
 2     public void test14(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             //1、创建criteria对象,指定要查询的实体类的名称
20             Criteria criteria = session.createCriteria(LinkMan.class);
21             
22              /**
23              * 使用方法设置查询条件 
24              * 使用criteria的addOrder方法添加排序
25              *  使用Order的静态方法设置排属性
26              */
27             criteria.addOrder(Order.asc("lkm_name"));
28             
29             //2、调用方法得到数据
30             List<LinkMan> list = criteria.list();
31             for (LinkMan linkMan : list) {
32                 System.out.println(linkMan);
33             }
34             
35             
36             
37             //提交事务
38             tx.commit();
39         } catch (Exception e) {
40             //异常回滚
41             tx.rollback();
42         }finally{
43             //关闭session和sessionFactory
44             session.close();
45             sessionFactory.close();
46         }
47     }

    (2)降序查询:

 1     @Test
 2     public void test15(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             //1、创建criteria对象,指定要查询的实体类的名称
20             Criteria criteria = session.createCriteria(LinkMan.class);
21             
22             /**
23              * 使用方法设置查询条件 
24              * 使用criteria的addOrder方法添加排序
25              *  使用Order的静态方法设置排属性
26              */
27             criteria.addOrder(Order.desc("lkm_name"));
28             
29             //2、调用方法得到数据
30             List<LinkMan> list = criteria.list();
31             for (LinkMan linkMan : list) {
32                 System.out.println(linkMan);
33             }
34             
35             
36             
37             //提交事务
38             tx.commit();
39         } catch (Exception e) {
40             //异常回滚
41             tx.rollback();
42         }finally{
43             //关闭session和sessionFactory
44             session.close();
45             sessionFactory.close();
46         }
47     }

4、分页查询

 

 1     @Test
 2     public void test16(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             
18             
19             //1、创建criteria对象,指定要查询的实体类的名称
20             Criteria criteria = session.createCriteria(LinkMan.class);
21             
22              //设置第一个要查询记录的位置
23             criteria.setFirstResult(0);
24             //2、设置每页最大的记录是
25             criteria.setMaxResults(2);
26             
27             //2、调用方法得到数据
28             List<LinkMan> list = criteria.list();
29             for (LinkMan linkMan : list) {
30                 System.out.println(linkMan);
31             }
32             
33             
34             
35             //提交事务
36             tx.commit();
37         } catch (Exception e) {
38             //异常回滚
39             tx.rollback();
40         }finally{
41             //关闭session和sessionFactory
42             session.close();
43             sessionFactory.close();
44         }
45     }

5、统计查询

 1     @Test
 2     public void test17(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             //1、创建criteria对象,指定要查询的实体类的名称
18             Criteria criteria = session.createCriteria(LinkMan.class);
19             criteria.setProjection(Projections.rowCount());
20             // 2、调用方法得到数据
21             Object object = criteria.uniqueResult();
22             Long long1 = (Long) object;
23             int count = long1.intValue();
24             System.out.println(count);
25             
26             //提交事务
27             tx.commit();
28         } catch (Exception e) {
29             //异常回滚
30             tx.rollback();
31         }finally{
32             //关闭session和sessionFactory
33             session.close();
34             sessionFactory.close();
35         }
36     }

6、离线查询

 1     @Test
 2     public void test18(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             // 1、创建DetachedCriteria对象,指定要查询的实体类的名称
18             DetachedCriteria cDetachedCriteria = DetachedCriteria.forClass(LinkMan.class);
19             //2、得到criteria对象(最终执行时才用到session)
20             Criteria criteria = cDetachedCriteria.getExecutableCriteria(session);
21             criteria.setProjection(Projections.rowCount());
22             // 3、调用方法得到数据
23             Object object = criteria.uniqueResult();
24             Long long1 = (Long) object;
25             int count = long1.intValue();
26             System.out.println(count);
27             
28             //提交事务
29             tx.commit();
30         } catch (Exception e) {
31             //异常回滚
32             tx.rollback();
33         }finally{
34             //关闭session和sessionFactory
35             session.close();
36             sessionFactory.close();
37         }
38     }

7、QBC查询条件

 

五、 本地SQL查询

 本地SQL查询是使用SQLQuery类,使用的是原生态的sql

 1     @Test
 2     public void test19(){
 3         SessionFactory sessionFactory=null;
 4         Session session=null;
 5         Transaction tx=null;
 6         
 7         try {
 8             //获取sessionFactory对象,HibernateUtils是自己编写的工具类
 9             sessionFactory=HibernateUtils.getSessionFactory();
10             
11             //通过sessionFactory获取session对象
12             session=sessionFactory.openSession();
13             
14             //开启事务
15             tx=session.beginTransaction();
16             
17             // 1、创建SQLQuery对象,指定要查询的实体类的名称
18             SQLQuery SqlQuery=session.createSQLQuery("select * from t_linkman");
19             // 2、设置用来接收结果的实体类
20             SqlQuery.addEntity(LinkMan.class);
21             // 3、用list接收结果
22             List<LinkMan> list=SqlQuery.list();
23             for (LinkMan linkMan : list) {
24                 System.out.println(linkMan);
25             }
26             
27             //提交事务
28             tx.commit();
29         } catch (Exception e) {
30             //异常回滚
31             tx.rollback();
32         }finally{
33             //关闭session和sessionFactory
34             session.close();
35             sessionFactory.close();
36         }
37     }

 

posted @ 2018-01-17 09:38  秋心无波  阅读(186)  评论(0编辑  收藏  举报