zoukankan      html  css  js  c++  java
  • 二、框架学习 (一)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     }
  • 相关阅读:
    L1-046. 整除光棍
    L2-014. 列车调度
    L2-009. 抢红包
    L2-005. 集合相似度
    L2-021. 点赞狂魔
    L1-033. 出生年
    设计模式之生成器模式
    设计模式之抽象工厂模式
    设计模式之工厂方法模式
    设计模式之简单工厂模式
  • 原文地址:https://www.cnblogs.com/zhangchengbing/p/8301102.html
Copyright © 2011-2022 走看看