Hibernate

Hibernate4 环境搭建:

 

导入必须的Hibernate4  JAR包
${hibernate_home}\hibernate-release-4.0.0.Final\lib\required\*

 

数据库驱动包(Oracle)
ojdbc14.jar

 

缓存(可选)

${hibernate_home}\hibernate-release-4.0.0.Final\lib\optional\ehcache\*
${hibernate_home}\hibernate-distribution-3.6.0.Final\lib\required\slf4j-api-1.6.1.jar

 

C3P0连接池(可选)

${hibernate_home\hibernate-release-4.0.0.Final\lib\optional\c3p0\*

 

 

编写hibernate.cfg.xml

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.   
  8.         <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>  
  9.         <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>  
  10.         <property name="hibernate.connection.username">scott</property>  
  11.         <property name="hibernate.connection.password">tiger</property>  
  12.   
  13.         <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>  
  14.   
  15.         <property name="hibernate.show_sql">true</property>  
  16.         <property name="hibernate.format_sql">true</property>  
  17.   
  18.         <property name="hibernate.hbm2ddl.auto">none</property>  
  19.   
  20.         <property name="hibernate.jdbc.fetch_size">100</property>  
  21.         <property name="hibernate.jdbc.batch_size">30</property>  
  22.   
  23.         <!-- 配置二级缓存 -->  
  24.         <property name="hibernate.cache.use_second_level_cache">true</property>  
  25.         <property name="hibernate.cache.use_query_cache">true</property>  
  26.         <!-- Hibernate4 这里和Hibernate3不一样 要特别注意!!!-->  
  27.         <property name="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>  
  28.           
  29.         <!-- Hibernate3 -->  
  30.         <!-- <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> -->  
  31.           
  32.         <!-- 配置C3P0 -->  
  33.         <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>  
  34.         <property name="hibernate.c3p0.max_size">10</property>  
  35.         <property name="hibernate.c3p0.min_size">1</property>  
  36.         <property name="hibernate.c3p0.max_statements">3</property>  
  37.         <property name="hibernate.c3p0.timeout">30</property>  
  38.         <property name="hibernate.c3p0.acquire_increment">1</property>  
  39.         <property name="hibernate.c3p0.idle_test_periodt">10</property>  
  40.            
  41.         <mapping resource="org/springfuncs/domain/Customer.hbm.xml" />  
  42.         <mapping resource="org/springfuncs/domain/Order.hbm.xml" />  
  43.         <mapping resource="org/springfuncs/domain/Emp.hbm.xml" />  
  44.           
  45.     </session-factory>  
  46. </hibernate-configuration>  

 

实体类和映射文件(没用注解...)

 

Java代码   收藏代码
  1. package org.springfuncs.domain;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.Date;  
  5.   
  6. /** 雇员 */  
  7. public class Emp implements Serializable {  
  8.   
  9.     private static final long serialVersionUID = 2127136225587213245L;  
  10.   
  11.     private Integer empno; // 雇员编号  
  12.     private String ename; // 雇员姓名  
  13.     private String job; // 工作  
  14.     private Integer mgr; // 上级雇员的编号  
  15.     private Date hiredate; // 入职日期  
  16.     private Double sal; // 薪水  
  17.     private Double comm; // 奖金  
  18.     private Integer deptno; // 部门编号  
  19.   
  20.     public Emp() {  
  21.     }  
  22.   
  23.     public Emp(Integer empno, String ename, Date hiredate, Double sal) {  
  24.         this.empno = empno;  
  25.         this.ename = ename;  
  26.         this.hiredate = hiredate;  
  27.         this.sal = sal;  
  28.     }  
  29.   
  30.     // getter and setter  
  31.   
  32.     public String toString() {  
  33.         return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job  
  34.                 + ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal=" + sal  
  35.                 + ", comm=" + comm + ", deptno=" + deptno + "]";  
  36.     }  
  37.   
  38. }  

 

Xml代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <hibernate-mapping package="org.springfuncs.domain">  
  5.     <class name="Emp" table="EMP">  
  6.         <cache usage="read-write" /> <!-- 缓存 -->  
  7.         <id name="empno" column="EMPNO" length="4" type="integer">  
  8.             <generator class="assigned" />  
  9.         </id>  
  10.         <property name="ename" column="ENAME" length="10" type="string" />  
  11.         <property name="job" column="JOB" length="9" type="string" />  
  12.         <property name="mgr" column="MGR" length="4" type="integer" />  
  13.         <property name="hiredate" column="HIREDATE" type="date" />  
  14.         <property name="sal" column="SAL" type="double" />  
  15.         <property name="comm" column="COMM" type="double" />  
  16.         <property name="deptno" column="DEPTNO" length="2" type="integer" />  
  17.     </class>  
  18. </hibernate-mapping>  

  

 

Java代码   收藏代码
  1. package org.springfuncs.domain;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.HashSet;  
  5. import java.util.Set;  
  6.   
  7. /** 客户 */  
  8. public class Customer implements Serializable {  
  9.   
  10.     private static final long serialVersionUID = -6514738924858633212L;  
  11.   
  12.     private Integer id; //id  
  13.     private String name; //姓名  
  14.     private Set<Order> orders = new HashSet<Order>(); //其下订单  
  15.   
  16.     public Customer() {  
  17.     }  
  18.   
  19.     // getter and setter  
  20.   
  21.     @Override  
  22.     public String toString() {  
  23.         return "Customer [id=" + id + ", name=" + name + "]";  
  24.     }  
  25.   
  26. }  

 

Xml代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <hibernate-mapping package="org.springfuncs.domain">  
  5.     <class name="Customer" table="CUSTOMERS">  
  6.         <cache usage="read-write" /> <!-- 缓存 -->  
  7.         <id name="id" column="id" type="integer">  
  8.             <generator class="increment" />  
  9.         </id>  
  10.         <property name="name" column="NAME" length="255" type="string" />  
  11.         <set name="orders" inverse="true" cascade="save-update,delete">  
  12.             <cache usage="read-write" /> <!-- 缓存 -->  
  13.             <key column="CUSTOMER_ID" />  
  14.             <one-to-many class="Order" />  
  15.         </set>  
  16.     </class>  
  17. </hibernate-mapping>  

 

 

Java代码   收藏代码
  1. package org.springfuncs.domain;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /** 订单 */  
  6. public class Order implements Serializable {  
  7.   
  8.     private static final long serialVersionUID = -5409386658105657900L;  
  9.   
  10.     private Integer id; // id  
  11.     private String orderNumber; // 订单号  
  12.     private Customer customer; // 所属客户  
  13.   
  14.     public Order() {  
  15.     }  
  16.   
  17.     //getter and setter  
  18.       
  19.     @Override  
  20.     public String toString() {  
  21.         return "Order [id=" + id + ", orderNumber=" + orderNumber + "]";  
  22.     }  
  23.   
  24. }  

 

Xml代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <hibernate-mapping package="org.springfuncs.domain">  
  5.     <class name="Order" table="ORDERS">  
  6.         <cache usage="read-write" /> <!-- 缓存 -->  
  7.         <id name="id" column="id" type="integer">  
  8.             <generator class="increment" />  
  9.         </id>  
  10.         <property name="orderNumber" column="ORDERNUMBER" length="255" type="string" />  
  11.         <many-to-one name="customer" class="Customer" column="CUSTOMER_ID" />  
  12.     </class>  
  13. </hibernate-mapping>  

 

还有什么缓存的配置以及数据库脚本,我会放在附件中

 

好了。。。开始帖代码了。。。。

 

HibernateUtil.java

 

Java代码   收藏代码
  1. package org.springfuncs.util;  
  2.   
  3. import org.hibernate.SessionFactory;  
  4. import org.hibernate.cfg.Configuration;  
  5. import org.hibernate.service.ServiceRegistry;  
  6. import org.hibernate.service.ServiceRegistryBuilder;  
  7.   
  8. public final class HibernateUtil {  
  9.   
  10.     private static SessionFactory sessionFactory;  
  11.   
  12.     private HibernateUtil() {  
  13.     }  
  14.   
  15.     static {  
  16.         try {  
  17.                   
  18.             /** 此方法在Hibernate4中被标记为过时 */  
  19.             // sessionFactory = new Configuration().configure().buildSessionFactory();  
  20.   
  21.             /**Hibernate4取得SessionFactory的方法 */  
  22.             Configuration cfg = new Configuration().configure();  
  23.             ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();  
  24.             sessionFactory = cfg.buildSessionFactory(serviceRegistry);  
  25.   
  26.         } catch (Throwable e) {  
  27.             throw new ExceptionInInitializerError(e);  
  28.         }  
  29.     }  
  30.   
  31.     public static SessionFactory getSessionFactory() {  
  32.         return sessionFactory;  
  33.     }  
  34. }  

 

 

HQL

 

Java代码   收藏代码
  1. package org.springfuncs.hql;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import org.hibernate.Query;  
  8. import org.hibernate.Session;  
  9. import org.hibernate.SessionFactory;  
  10. import org.junit.Test;  
  11. import org.springfuncs.domain.Emp;  
  12. import org.springfuncs.util.HibernateUtil;  
  13.   
  14. public class TestHql {  
  15.   
  16.     /** 查询全部 (推荐) */  
  17.     @Test  
  18.     public void test_list() {  
  19.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  20.         Session session = sessionFactory.openSession();  
  21.         String hql = "from Emp";  
  22.         Query query = session.createQuery(hql);  
  23.         query.setCacheable(true); // 设置缓存  
  24.         List<Emp> list = query.list();  
  25.         show(list);  
  26.         session.close();  
  27.     }  
  28.   
  29.     /** 查询全部 */  
  30.     @Test  
  31.     public void test_iterator() {  
  32.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  33.         Session session = sessionFactory.openSession();  
  34.         String hql = "from Emp";  
  35.         Query query = session.createQuery(hql);  
  36.         Iterator<Emp> it = query.iterate();  
  37.         while (it.hasNext()) {  
  38.             Emp emp = it.next();  
  39.             System.out.println(emp);  
  40.         }  
  41.         session.close();  
  42.     }  
  43.   
  44.     /** 分页查询 */  
  45.     // select * from  
  46.     // ( select e.*, rownum rn from ( select * from emp ) e where rownum <= 10 )  
  47.     // where rn > 1  
  48.     @Test  
  49.     public void test_pagination() {  
  50.         int pageNo = 1// 当前页数  
  51.         int pageSize = 5// 每页显示条数  
  52.   
  53.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  54.         Session session = sessionFactory.openSession();  
  55.         String hql = "from Emp";  
  56.         Query query = session.createQuery(hql);  
  57.         query.setFirstResult((pageNo - 1) * pageSize);  
  58.         query.setMaxResults(pageSize);  
  59.         query.setCacheable(true); // 设置缓存  
  60.         List<Emp> list = query.list();  
  61.         show(list);  
  62.         session.close();  
  63.     }  
  64.   
  65.     /** 查询结果是唯一值 */  
  66.     @Test  
  67.     public void test_uniqueResult() {  
  68.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  69.         Session session = sessionFactory.openSession();  
  70.         String hql = "from Emp where empno=7369";  
  71.         Query query = session.createQuery(hql);  
  72.         Emp emp = (Emp) query.uniqueResult();  
  73.         System.out.println(emp);  
  74.         session.close();  
  75.     }  
  76.   
  77.     /** 投影查询 */  
  78.     @Test  
  79.     public void test_projection1() {  
  80.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  81.         Session session = sessionFactory.openSession();  
  82.         String hql = "select empno from Emp"// 查询单值  
  83.         Query query = session.createQuery(hql);  
  84.         List<Integer> list = query.list();  
  85.         for (Integer empno : list) {  
  86.             System.out.println(empno);  
  87.         }  
  88.         session.close();  
  89.     }  
  90.   
  91.     /** 投影查询 */  
  92.     @Test  
  93.     public void test_projection2() {  
  94.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  95.         Session session = sessionFactory.openSession();  
  96.         String hql = "select empno,ename,hiredate,sal from Emp"// 查询多值  
  97.         Query query = session.createQuery(hql);  
  98.         List<Object[]> list = query.list();  
  99.         for (Object[] arr : list) {  
  100.             System.out.println(arr[0] + "\t" + arr[1] + "\t" + arr[2] + "\t" + arr[3]);  
  101.         }  
  102.         session.close();  
  103.     }  
  104.   
  105.     /** 投影查询 */  
  106.     @Test  
  107.     public void test_projection3() {  
  108.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  109.         Session session = sessionFactory.openSession();  
  110.         String hql = "select new Emp(empno,ename,hiredate,sal) from Emp"// 查询多值 封装在一个对象中  
  111.         Query query = session.createQuery(hql);  
  112.         List<Emp> list = query.list();  
  113.         for (Emp emp : list) {  
  114.             System.out.println(emp.getEmpno() + "\t" + emp.getEname() + "\t" + emp.getHiredate() + "\t" + emp.getSal());  
  115.         }  
  116.         session.close();  
  117.     }  
  118.   
  119.     /** 投影查询 */  
  120.     @Test  
  121.     public void test_projection4() {  
  122.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  123.         Session session = sessionFactory.openSession();  
  124.         String hql = "select new Map(empno,ename,hiredate,sal) from Emp"// map 大小都都可以, 查询多值 封装在一个Map中  
  125.         Query query = session.createQuery(hql);  
  126.         List<Map> list = query.list();  
  127.         for (Map map : list) {  
  128.             System.out.println(map.get("0") + "\t" + map.get("1") + "\t" + map.get("2") + "\t" + map.get("3"));  
  129.         }  
  130.         session.close();  
  131.     }  
  132.   
  133.     /** 投影查询 (使用别名) */  
  134.     @Test  
  135.     public void test_projection5() {  
  136.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  137.         Session session = sessionFactory.openSession();  
  138.         String hql = "select new Map(e.empno as empno ,e.ename as ename ,e.hiredate as hiredate ,e.sal as sal) from Emp as e";  
  139.         Query query = session.createQuery(hql);  
  140.         List<Map> list = query.list();  
  141.         for (Map map : list) {  
  142.             System.out.println(map.get("empno") + "\t" + map.get("ename") + "\t" + map.get("hiredate") + "\t" + map.get("sal"));  
  143.         }  
  144.         session.close();  
  145.     }  
  146.   
  147.     /** 去掉重复值 */  
  148.     @Test  
  149.     public void test_distinct() {  
  150.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  151.         Session session = sessionFactory.openSession();  
  152.         String hql = "select distinct job from Emp";  
  153.         Query query = session.createQuery(hql);  
  154.         List<String> list = query.list();  
  155.         for (String job : list) {  
  156.             System.out.println(job);  
  157.         }  
  158.         session.close();  
  159.     }  
  160.   
  161.     /** 条件查询 */  
  162.     @Test  
  163.     public void test_where1() {  
  164.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  165.         Session session = sessionFactory.openSession();  
  166.   
  167.         // String hql = "from Emp where empno=7369 and ename='SMITH'";  
  168.         // String hql = "from Emp where empno=7369 or ename='ALLEN'";  
  169.         // String hql = "from Emp where not (ename='SMITH')"; // () 可以不写  
  170.   
  171.         // String hql = "from Emp where sal between 3000 and 5000";  
  172.         // String hql = "from Emp where sal not between 3000 and 5000";  
  173.   
  174.         // String hql = "from Emp where empno in(7369,7900,7654)";  
  175.         // String hql = "from Emp where empno not in(7369,7900,7654)";  
  176.   
  177.         // String hql = "from Emp where ename like 'S%'";  
  178.         // String hql = "from Emp where ename not like 'S%'";  
  179.   
  180.         // String hql="from Emp where comm is null";  
  181.         // String hql="from Emp where comm is not null";  
  182.   
  183.         // String hql = "from Emp where sal >= 3000 and sal<= 5000)";  
  184.         // String hql="from Emp where sal <>3000";  
  185.         String hql = "from Emp where sal !=3000";  
  186.   
  187.         Query query = session.createQuery(hql);  
  188.         List<Emp> list = query.list();  
  189.         show(list);  
  190.         session.close();  
  191.     }  
  192.   
  193.     /** 条件查询 */  
  194.     @Test  
  195.     public void test_where2() {  
  196.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  197.         Session session = sessionFactory.openSession();  
  198.   
  199.         String hql = "from Emp where  ename like ?";  
  200.         Query query = session.createQuery(hql);  
  201.         query.setString(0"J%");  
  202.   
  203.         // String hql = "from Emp where  ename like :ename";  
  204.         // Query query = session.createQuery(hql);  
  205.         // query.setString("ename", "J%");  
  206.   
  207.         List<Emp> list = query.list();  
  208.         show(list);  
  209.         session.close();  
  210.     }  
  211.   
  212.     /** 统计函数 */  
  213.     @Test  
  214.     public void test_statistics1() {  
  215.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  216.         Session session = sessionFactory.openSession();  
  217.         String hql = "select count(*),min(sal),max(sal),avg(sal),sum(sal) from Emp";  
  218.         Query query = session.createQuery(hql);  
  219.         Object[] values = (Object[]) query.uniqueResult();  
  220.         System.out.println("总数:" + values[0]);  
  221.         System.out.println("最小值:" + values[1]);  
  222.         System.out.println("最大值:" + values[2]);  
  223.         System.out.println("平均值:" + values[3]);  
  224.         System.out.println("合计:" + values[4]);  
  225.         session.close();  
  226.     }  
  227.   
  228.     /** 统计函数 */  
  229.     @Test  
  230.     public void test_statistics2() {  
  231.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  232.         Session session = sessionFactory.openSession();  
  233.         String hql = "select deptno,avg(sal)  from Emp group by deptno having avg(sal)>2000 order by deptno";  
  234.         Query query = session.createQuery(hql);  
  235.         List<Object[]> list = query.list();  
  236.         for (Object[] arr : list) {  
  237.             System.out.println("部门编号:" + arr[0] + "\t" + "平均薪资:" + arr[1]);  
  238.         }  
  239.         session.close();  
  240.     }  
  241.   
  242.     /** 使用函数(和底层数据库有关) */  
  243.     @Test  
  244.     public void test_function() {  
  245.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  246.         Session session = sessionFactory.openSession();  
  247.         String hql = "select to_char(hiredate,'yyyy-mm-dd') from Emp";  
  248.         Query query = session.createQuery(hql);  
  249.         List<String> list = query.list();  
  250.         for (String ename : list) {  
  251.             System.out.println(ename);  
  252.         }  
  253.         session.close();  
  254.     }  
  255.   
  256.     /** 排序 */  
  257.     @Test  
  258.     public void test_orderby() {  
  259.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  260.         Session session = sessionFactory.openSession();  
  261.         String hql = "from Emp order by job,sal desc";  
  262.         Query query = session.createQuery(hql);  
  263.         List<Emp> list = query.list();  
  264.         show(list);  
  265.         session.close();  
  266.     }  
  267.   
  268.     // 遍历集合  
  269.     private void show(List<Emp> list) {  
  270.         for (Emp emp : list) {  
  271.             System.out.println(emp);  
  272.         }  
  273.     }  
  274. }  

 

QBC

 

Java代码   收藏代码
  1. package org.springfuncs.qbc;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.hibernate.Criteria;  
  6. import org.hibernate.Session;  
  7. import org.hibernate.SessionFactory;  
  8. import org.hibernate.criterion.Order;  
  9. import org.hibernate.criterion.ProjectionList;  
  10. import org.hibernate.criterion.Projections;  
  11. import org.hibernate.criterion.Restrictions;  
  12. import org.junit.Test;  
  13. import org.springfuncs.domain.Emp;  
  14. import org.springfuncs.util.HibernateUtil;  
  15.   
  16. public class TestQBC {  
  17.   
  18.     /** 查询全部 */  
  19.     @Test  
  20.     public void test_list() {  
  21.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  22.         Session session = sessionFactory.openSession();  
  23.         Criteria criteria = session.createCriteria(Emp.class);  
  24.         criteria.setCacheable(true); // 设置缓存  
  25.         List<Emp> list = criteria.list();  
  26.         show(list);  
  27.         session.close();  
  28.     }  
  29.   
  30.     /** 查询全部 */  
  31.     @Test  
  32.     public void test_iterator() {  
  33.         // 没有iterator  
  34.     }  
  35.   
  36.     /** 分页查询 */  
  37.     // select * from  
  38.     // ( select e.*, rownum rn from ( select * from emp ) e where rownum <= 10 )  
  39.     // where rn > 1  
  40.     @Test  
  41.     public void test_pagination() {  
  42.         int pageNo = 1// 当前页数  
  43.         int pageSize = 5// 每页显示条数  
  44.   
  45.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  46.         Session session = sessionFactory.openSession();  
  47.         Criteria criteria = session.createCriteria(Emp.class);  
  48.         criteria.setFirstResult((pageNo - 1) * pageSize);  
  49.         criteria.setMaxResults(pageSize);  
  50.         criteria.setCacheable(true); // 设置缓存  
  51.         List<Emp> list = criteria.list();  
  52.         show(list);  
  53.         session.close();  
  54.     }  
  55.   
  56.     /** 查询结果是唯一值 */  
  57.     @Test  
  58.     public void test_uniqueResult() {  
  59.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  60.         Session session = sessionFactory.openSession();  
  61.         Criteria criteria = session.createCriteria(Emp.class);  
  62.         criteria.add(Restrictions.eq("empno"7369));  
  63.         Emp emp = (Emp) criteria.uniqueResult();  
  64.         System.out.println(emp);  
  65.         session.close();  
  66.     }  
  67.   
  68.     /** 投影查询 */  
  69.     @Test  
  70.     public void test_projection1() {  
  71.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  72.         Session session = sessionFactory.openSession();  
  73.         Criteria criteria = session.createCriteria(Emp.class);  
  74.         criteria.setProjection(Projections.property("empno"));  
  75.         List<Integer> list = criteria.list();  
  76.         for (Integer empno : list) {  
  77.             System.out.println(empno);  
  78.         }  
  79.         session.close();  
  80.     }  
  81.   
  82.     /** 投影查询 */  
  83.     @Test  
  84.     public void test_projection2() {  
  85.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  86.         Session session = sessionFactory.openSession();  
  87.         Criteria criteria = session.createCriteria(Emp.class);  
  88.         ProjectionList projectionList = Projections.projectionList();  
  89.         projectionList.add(Projections.property("empno"));  
  90.         projectionList.add(Projections.property("ename"));  
  91.         projectionList.add(Projections.property("hiredate"));  
  92.         projectionList.add(Projections.property("sal"));  
  93.         criteria.setProjection(projectionList);  
  94.         List<Object[]> list = criteria.list();  
  95.         for (Object[] arr : list) {  
  96.             System.out.println(arr[0] + "\t" + arr[1] + "\t" + arr[2] + "\t" + arr[3]);  
  97.         }  
  98.         session.close();  
  99.     }  
  100.   
  101.     /** 去掉重复值 */  
  102.     @Test  
  103.     public void test_distinct() {  
  104.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  105.         Session session = sessionFactory.openSession();  
  106.         Criteria criteria = session.createCriteria(Emp.class);  
  107.         criteria.setProjection(Projections.distinct(Projections.property("job")));  
  108.         List<String> list = criteria.list();  
  109.         for (String job : list) {  
  110.             System.out.println(job);  
  111.         }  
  112.         session.close();  
  113.     }  
  114.   
  115.     /** 条件查询 */  
  116.     @Test  
  117.     public void test_where() {  
  118.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  119.         Session session = sessionFactory.openSession();  
  120.         Criteria criteria = session.createCriteria(Emp.class);  
  121.   
  122.         // criteria.add(Restrictions.and(Restrictions.eq("empno", 7369), Restrictions.eq("ename", "SMITH")));  
  123.         // criteria.add(Restrictions.or(Restrictions.eq("empno", 7369), Restrictions.eq("ename", "ALLEN")));  
  124.         // criteria.add(Restrictions.not(Restrictions.eq("ename", "SMITH")));  
  125.   
  126.         // criteria.add(Restrictions.between("sal", 3000.0, 5000.0));  
  127.         // criteria.add(Restrictions.not(Restrictions.between("sal", 3000.0, 5000.0)));  
  128.   
  129.         // criteria.add(Restrictions.in("empno", new Object[] { 7369, 7900, 7654 }));  
  130.         // criteria.add(Restrictions.not(Restrictions.in("empno", new Object[] { 7369, 7900, 7654 })));  
  131.   
  132.         // criteria.add(Restrictions.like("ename", "S%", MatchMode.START));  
  133.         // criteria.add(Restrictions.not(Restrictions.like("ename", "S%", MatchMode.START)));  
  134.   
  135.         // criteria.add(Restrictions.isNull("comm"));  
  136.         // criteria.add(Restrictions.not(Restrictions.isNull("comm")));  
  137.   
  138.         // criteria.add(Restrictions.and(Restrictions.ge("sal", 3000.0), Restrictions.le("sal", 5000.0)));  
  139.         criteria.add(Restrictions.ne("sal"3000.0));  
  140.         List<Emp> list = criteria.list();  
  141.         show(list);  
  142.         session.close();  
  143.     }  
  144.   
  145.     /** 统计函数 */  
  146.     @Test  
  147.     public void test_statistics1() {  
  148.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  149.         Session session = sessionFactory.openSession();  
  150.         Criteria criteria = session.createCriteria(Emp.class);  
  151.         ProjectionList projectionList = Projections.projectionList();  
  152.         projectionList.add(Projections.rowCount());  
  153.         projectionList.add(Projections.min("sal"));  
  154.         projectionList.add(Projections.max("sal"));  
  155.         projectionList.add(Projections.avg("sal"));  
  156.         projectionList.add(Projections.sum("sal"));  
  157.         criteria.setProjection(projectionList);  
  158.         Object[] values = (Object[]) criteria.uniqueResult();  
  159.         System.out.println("总数:" + values[0]);  
  160.         System.out.println("最小值:" + values[1]);  
  161.         System.out.println("最大值:" + values[2]);  
  162.         System.out.println("平均值:" + values[3]);  
  163.         System.out.println("合计:" + values[4]);  
  164.         session.close();  
  165.     }  
  166.   
  167.     /** 统计函数 */  
  168.     // select deptno,avg(sal) from Emp group by deptno having avg(sal)>2000 order by deptno;  
  169.     @Test  
  170.     public void test_statistics2() {  
  171.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  172.         Session session = sessionFactory.openSession();  
  173.         Criteria criteria = session.createCriteria(Emp.class);  
  174.         ProjectionList projectionList = Projections.projectionList();  
  175.         projectionList.add(Projections.property("deptno"));  
  176.         projectionList.add(Projections.avg("sal"));  
  177.         projectionList.add(Projections.groupProperty("deptno"));  
  178.         criteria.setProjection(projectionList);  
  179.         // TODO having 怎么表示 暂时没有找到  
  180.         criteria.addOrder(Order.asc("deptno"));  
  181.         List<Object[]> list = criteria.list();  
  182.   
  183.         for (Object[] arr : list) {  
  184.             System.out.println("部门编号:" + arr[0] + "\t" + "平均薪资:" + arr[1]);  
  185.         }  
  186.         session.close();  
  187.     }  
  188.   
  189.     /** 使用函数(和底层数据库有关) */  
  190.     @Test  
  191.     public void test_function() {  
  192.         // TODO  
  193.     }  
  194.   
  195.     /** 排序 */  
  196.     @Test  
  197.     public void test_orderby() {  
  198.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  199.         Session session = sessionFactory.openSession();  
  200.         Criteria criteria = session.createCriteria(Emp.class);  
  201.         criteria.addOrder(Order.asc("job"));  
  202.         criteria.addOrder(Order.desc("sal"));  
  203.         List<Emp> list = criteria.list();  
  204.         show(list);  
  205.         session.close();  
  206.     }  
  207.   
  208.     // 遍历集合  
  209.     private void show(List<Emp> list) {  
  210.         for (Emp emp : list) {  
  211.             System.out.println(emp);  
  212.         }  
  213.     }  
  214. }  

 

 

QBE

 

Java代码   收藏代码
  1. package org.springfuncs.qbe;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.hibernate.Criteria;  
  6. import org.hibernate.Session;  
  7. import org.hibernate.SessionFactory;  
  8. import org.hibernate.criterion.Example;  
  9. import org.junit.Test;  
  10. import org.springfuncs.domain.Emp;  
  11. import org.springfuncs.util.HibernateUtil;  
  12.   
  13. public class TestQBE {  
  14.   
  15.     /** QBE查询 适合条件检索 */  
  16.     @Test  
  17.     public void test_qbe() {  
  18.         Emp emp = new Emp();  
  19.         emp.setDeptno(10);  
  20.         emp.setJob("MANAGER");  
  21.   
  22.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  23.         Session session = sessionFactory.openSession();  
  24.         Criteria criteria = session.createCriteria(Emp.class);  
  25.         criteria.add(Example.create(emp));// 注意  
  26.         List<Emp> list = criteria.list();  
  27.         show(list);  
  28.         session.close();  
  29.     }  
  30.   
  31.     // 遍历集合  
  32.     private void show(List<Emp> list) {  
  33.         for (Emp emp : list) {  
  34.             System.out.println(emp);  
  35.         }  
  36.     }  
  37. }  

 

Native SQL

 

Java代码   收藏代码
  1. package org.springfuncs.sql;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.hibernate.SQLQuery;  
  6. import org.hibernate.Session;  
  7. import org.hibernate.SessionFactory;  
  8. import org.hibernate.transform.Transformers;  
  9. import org.hibernate.type.StandardBasicTypes;  
  10. import org.junit.Test;  
  11. import org.springfuncs.domain.Emp;  
  12. import org.springfuncs.util.HibernateUtil;  
  13.   
  14. public class TestSql {  
  15.   
  16.     /** 查询全部 */  
  17.     @Test  
  18.     public void test_sql1() {  
  19.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  20.         Session session = sessionFactory.openSession();  
  21.         String sql = "select * from emp";  
  22.         SQLQuery query = session.createSQLQuery(sql);  
  23.         List<Object[]> list = query.list();  
  24.         for (Object[] arr : list) {  
  25.             System.out.println(arr[0] + "\t" + arr[1] + "\t" + arr[2] + "\t" + arr[3] + "\t" + arr[4] + "\t" + arr[5] + "\t" + arr[6] + "\t" + arr[7]);  
  26.         }  
  27.         session.close();  
  28.     }  
  29.   
  30.     /** 查询全部 */  
  31.     @Test  
  32.     public void test_sql2() {  
  33.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  34.         Session session = sessionFactory.openSession();  
  35.         String sql = "select * from emp";  
  36.         SQLQuery query = session.createSQLQuery(sql);  
  37.         query.addScalar("empno", StandardBasicTypes.INTEGER);  
  38.         query.addScalar("ename", StandardBasicTypes.STRING);  
  39.         query.addScalar("job", StandardBasicTypes.STRING);  
  40.         query.addScalar("mgr", StandardBasicTypes.INTEGER);  
  41.         query.addScalar("hiredate", StandardBasicTypes.DATE);  
  42.         query.addScalar("sal", StandardBasicTypes.DOUBLE);  
  43.         query.addScalar("comm", StandardBasicTypes.DOUBLE);  
  44.         query.addScalar("deptno", StandardBasicTypes.INTEGER);  
  45.         List<Object[]> list = query.list();  
  46.         for (Object[] arr : list) {  
  47.             System.out.println(arr[0] + "\t" + arr[1] + "\t" + arr[2] + "\t" + arr[3] + "\t" + arr[4] + "\t" + arr[5] + "\t" + arr[6] + "\t" + arr[7]);  
  48.         }  
  49.         session.close();  
  50.     }  
  51.   
  52.     /** 查询全部 */  
  53.     @Test  
  54.     public void test_sql3() {  
  55.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  56.         Session session = sessionFactory.openSession();  
  57.         String sql = "select * from emp";  
  58.         SQLQuery query = session.createSQLQuery(sql);  
  59.         query.addScalar("empno", StandardBasicTypes.INTEGER);  
  60.         query.addScalar("ename", StandardBasicTypes.STRING);  
  61.         query.addScalar("job", StandardBasicTypes.STRING);  
  62.         query.addScalar("mgr", StandardBasicTypes.INTEGER);  
  63.         query.addScalar("hiredate", StandardBasicTypes.DATE);  
  64.         query.addScalar("sal", StandardBasicTypes.DOUBLE);  
  65.         query.addScalar("comm", StandardBasicTypes.DOUBLE);  
  66.         query.addScalar("deptno", StandardBasicTypes.INTEGER);  
  67.         query.setResultTransformer(Transformers.aliasToBean(Emp.class));  
  68.         List<Emp> list = query.list();  
  69.         show(list);  
  70.         session.close();  
  71.     }  
  72.   
  73.     /** 查询全部 (推荐) */  
  74.     @Test  
  75.     public void test_sql4() {  
  76.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  77.         Session session = sessionFactory.openSession();  
  78.   
  79.         String sql = "select * from emp";  
  80.         SQLQuery query = session.createSQLQuery(sql);  
  81.         query.addEntity(Emp.class);  
  82.   
  83.         // String sql = "select {e.*} from emp e";  
  84.         // SQLQuery query = session.createSQLQuery(sql);  
  85.         // query.addEntity("e", Emp.class);  
  86.         query.setCacheable(true); // 设置缓存  
  87.         List<Emp> list = query.list();  
  88.         show(list);  
  89.         session.close();  
  90.     }  
  91.   
  92.     /** 条件查询 */  
  93.     @Test  
  94.     public void test_where() {  
  95.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  96.         Session session = sessionFactory.openSession();  
  97.   
  98.         String sql = "select * from emp where  ename like ?";  
  99.         SQLQuery query = session.createSQLQuery(sql);  
  100.         query.addEntity(Emp.class);  
  101.         query.setString(0"J%");  
  102.   
  103.         // String sql = "select * from emp where  ename like :ename";  
  104.         // SQLQuery query = session.createSQLQuery(sql);  
  105.         // query.addEntity(Emp.class);  
  106.         // query.setString("ename", "J%");  
  107.   
  108.         List<Emp> list = query.list();  
  109.         show(list);  
  110.         session.close();  
  111.     }  
  112.   
  113.     // 遍历集合  
  114.     private void show(List<Emp> list) {  
  115.         for (Emp emp : list) {  
  116.             System.out.println(emp);  
  117.         }  
  118.     }  
  119. }  

 

CRUD

 

Java代码   收藏代码
  1. package org.springfuncs.crud;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. import org.hibernate.Hibernate;  
  6. import org.hibernate.Query;  
  7. import org.hibernate.Session;  
  8. import org.hibernate.SessionFactory;  
  9. import org.hibernate.Transaction;  
  10. import org.junit.Test;  
  11. import org.springfuncs.domain.Customer;  
  12. import org.springfuncs.util.HibernateUtil;  
  13.   
  14. public class TestCRUD {  
  15.   
  16.     // 添加  
  17.     @Test  
  18.     public void test_save() {  
  19.   
  20.         Customer customer = new Customer();  
  21.         customer.setName("monday");  
  22.   
  23.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  24.         Session session = sf.openSession();  
  25.         Transaction tx = session.beginTransaction();  
  26.         Serializable id = session.save(customer); // 返回OID  
  27.         tx.commit();  
  28.         session.close();  
  29.         System.out.println("id=" + id);  
  30.     }  
  31.   
  32.     // 添加  
  33.     @Test  
  34.     public void test_persist() {  
  35.         Customer customer = new Customer();  
  36.         customer.setName("monday");  
  37.   
  38.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  39.         Session session = sf.openSession();  
  40.         Transaction tx = session.beginTransaction();  
  41.         session.persist(customer); // 无返回值  
  42.         tx.commit();  
  43.         session.close();  
  44.     }  
  45.   
  46.     // 添加  
  47.     @Test  
  48.     public void test_saveOrUpdate1() {  
  49.         Customer customer = new Customer();  
  50.         customer.setName("monday");  
  51.   
  52.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  53.         Session session = sf.openSession();  
  54.         Transaction tx = session.beginTransaction();  
  55.         session.saveOrUpdate(customer); // OID 为空 执行save操作  
  56.         tx.commit();  
  57.         session.close();  
  58.     }  
  59.   
  60.     // 修改  
  61.     @Test  
  62.     public void test_saveOrUpdate2() {  
  63.         Customer customer = new Customer();  
  64.         customer.setName("monday_update");  
  65.         customer.setId(5);  
  66.   
  67.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  68.         Session session = sf.openSession();  
  69.         Transaction tx = session.beginTransaction();  
  70.         session.saveOrUpdate(customer); // OID 为不空 执行update操作  
  71.         tx.commit();  
  72.         session.close();  
  73.     }  
  74.   
  75.     // 修改  
  76.     @Test  
  77.     public void test_update() {  
  78.         Customer customer = new Customer();  
  79.         customer.setName("monday_update2");  
  80.         customer.setId(5);  
  81.   
  82.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  83.         Session session = sf.openSession();  
  84.         Transaction tx = session.beginTransaction();  
  85.         session.update(customer);  
  86.         tx.commit();  
  87.         session.close();  
  88.     }  
  89.   
  90.     // 修改  
  91.     @Test  
  92.     public void test_update_hql() {  
  93.         String hql = "update Customer set name=? where id=?";  
  94.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  95.         Session session = sf.openSession();  
  96.         Transaction tx = session.beginTransaction();  
  97.         Query query = session.createQuery(hql);  
  98.         query.setParameter(0"springfuncs");  
  99.         query.setParameter(15);  
  100.         query.executeUpdate();  
  101.         tx.commit();  
  102.         session.close();  
  103.     }  
  104.   
  105.     // 删除  
  106.     @Test  
  107.     public void test_delete() {  
  108.         Customer customer = new Customer();  
  109.         customer.setId(5);  
  110.   
  111.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  112.         Session session = sf.openSession();  
  113.         Transaction tx = session.beginTransaction();  
  114.         session.delete(customer);  
  115.         tx.commit();  
  116.         session.close();  
  117.     }  
  118.   
  119.     // 删除  
  120.     @Test  
  121.     public void test_delete_hql() {  
  122.         String hql = "delete from Customer where id=?";  
  123.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  124.         Session session = sf.openSession();  
  125.         Transaction tx = session.beginTransaction();  
  126.         Query query = session.createQuery(hql);  
  127.         query.setParameter(06);  
  128.         query.executeUpdate();  
  129.         tx.commit();  
  130.         session.close();  
  131.     }  
  132.   
  133.     // 查询  
  134.     @Test  
  135.     public void test_get() {  
  136.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  137.         Session session = sf.openSession();  
  138.         // Transaction tx = session.beginTransaction();  
  139.         Customer customer = (Customer) session.get(Customer.class1);  
  140.         // tx.commit();  
  141.         session.close();  
  142.         System.out.println(customer);  
  143.     }  
  144.   
  145.     // 查询  
  146.     @Test  
  147.     public void test_load() {  
  148.         SessionFactory sf = HibernateUtil.getSessionFactory();  
  149.         Session session = sf.openSession();  
  150.         // Transaction tx = session.getTransaction();  
  151.         // tx.begin();  
  152.         Customer customer = (Customer) session.load(Customer.class1);  
  153.         // tx.commit();  
  154.   
  155.         Hibernate.initialize(customer);  
  156.         session.close();  
  157.         System.out.println(customer);  
  158.   
  159.         // 或者  
  160.         // System.out.println(customer);  
  161.         // session.close();  
  162.     }  
  163. }  

 

关联查询

 

Java代码   收藏代码
  1. package org.springfuncs.associated;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5. import java.util.Set;  
  6.   
  7. import org.hibernate.Criteria;  
  8. import org.hibernate.FetchMode;  
  9. import org.hibernate.Query;  
  10. import org.hibernate.Session;  
  11. import org.hibernate.SessionFactory;  
  12. import org.junit.Test;  
  13. import org.springfuncs.domain.Customer;  
  14. import org.springfuncs.domain.Order;  
  15. import org.springfuncs.util.HibernateUtil;  
  16.   
  17. public class TestAssociated {  
  18.   
  19.     // 交叉连接(多表的笛卡儿积不常用)  
  20.     // select c.*,o.* from customers c, orders o  
  21.     @Test  
  22.     public void test_cross_join() {  
  23.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  24.         Session session = sessionFactory.openSession();  
  25.         String hql = "from Customer c , Order o";  
  26.         Query query = session.createQuery(hql);  
  27.         List<Object[]> list = query.list();  
  28.         for (int i = 0; i < list.size(); i++) {  
  29.             Object[] obj = (Object[]) list.get(i);  
  30.             Customer customer = (Customer) obj[0];  
  31.             Order order = (Order) obj[1];  
  32.             System.out.println((i + 1) + "---" + customer);  
  33.             System.out.println((i + 1) + "---" + order);  
  34.         }  
  35.         session.close();  
  36.     }  
  37.   
  38.     // 内链接  
  39.     // select c.* from customers c inner join orders o on c.id=o.customer_id  
  40.     // select o.* from orders o where o.customer_id=?  
  41.     @Test  
  42.     public void test_inner_join() {  
  43.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  44.         Session session = sessionFactory.openSession();  
  45.         String hql = "select c from Customer c inner join c.orders"// inner 可省略  
  46.         Query query = session.createQuery(hql);  
  47.         List<Customer> list = query.list();  
  48.         showCustomer(list);  
  49.         session.close();  
  50.     }  
  51.   
  52.     // 左外连接  
  53.     // select c.* from customers c left outer join orders o on c.id=o.customer_id  
  54.     // select o.* from orders o where o.customer_id=?  
  55.     @Test  
  56.     public void test_left_outer_join() {  
  57.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  58.         Session session = sessionFactory.openSession();  
  59.         String hql = "select c from Customer c left outer join c.orders"// outer 可省略  
  60.         Query query = session.createQuery(hql);  
  61.         List<Customer> list = query.list();  
  62.         showCustomer(list);  
  63.         session.close();  
  64.     }  
  65.   
  66.     // 右连接  
  67.     // select c.*, o.* from customers c right outer join orders o on c.id=o.customer_id  
  68.     @Test  
  69.     public void test_right_outer_join() {  
  70.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  71.         Session session = sessionFactory.openSession();  
  72.         String hql = "from Customer c right outer join c.orders"// outer 可省略  
  73.         Query query = session.createQuery(hql);  
  74.         List<Object[]> list = query.list();  
  75.         for (int i = 0; list != null && i < list.size(); i++) {  
  76.             Object[] obj = list.get(i);  
  77.             Customer customer = (Customer) obj[0];  
  78.             Order order = (Order) obj[1];  
  79.             System.out.println((i + 1) + "---" + customer);  
  80.             System.out.println((i + 1) + "---" + order);  
  81.         }  
  82.         session.close();  
  83.     }  
  84.   
  85.     // 迫切内连接(推荐)  
  86.     // select c.*,o.* from customers c inner join orders o on c.id=o.customer_id  
  87.     @Test  
  88.     public void test_inner_join_fetch() {  
  89.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  90.         Session session = sessionFactory.openSession();  
  91.         String hql = "select c from Customer c inner join fetch c.orders"// inner 可省略  
  92.         Query query = session.createQuery(hql);  
  93.         query.setCacheable(true); // 设置缓存  
  94.         List<Customer> list = query.list();  
  95.         showCustomer(list);  
  96.         session.close();  
  97.     }  
  98.   
  99.     // 迫切左外连接(推荐)  
  100.     // select c.*,o.* from customers c left outer join orders o on c.id=o.customer_id  
  101.     @Test  
  102.     public void test_left_outer_join_fetch() {  
  103.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  104.         Session session = sessionFactory.openSession();  
  105.         String hql = "select c from Customer c left outer join fetch c.orders"// outer可省略  
  106.         Query query = session.createQuery(hql);  
  107.         query.setCacheable(true); // 设置缓存  
  108.         List<Customer> list = query.list();  
  109.         showCustomer(list);  
  110.         session.close();  
  111.     }  
  112.   
  113.     // 迫切左外连接(推荐)  
  114.     // select c.*, o.* from customers c left outer join orders o on c.id=o.customer_id  
  115.     @Test  
  116.     public void test_left_outer_join_fetch_QBC() {  
  117.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  118.         Session session = sessionFactory.openSession();  
  119.         Criteria criteria = session.createCriteria(Customer.class).setFetchMode("orders", FetchMode.JOIN);  
  120.         criteria.setCacheable(true); // 设置缓存  
  121.         List<Customer> list = criteria.list();  
  122.         showCustomer(list);  
  123.         session.close();  
  124.     }  
  125.   
  126.     // 打印Order信息  
  127.     private void showCustomer(List<Customer> list) {  
  128.         for (Customer customer : list) {  
  129.             System.out.println(customer);  
  130.             if (customer.getOrders() != null && customer.getOrders().size() > 0) {  
  131.                 Set<Order> orders = customer.getOrders();  
  132.                 for (Iterator<Order> it = orders.iterator(); it.hasNext();) {  
  133.                     Order order = it.next();  
  134.                     System.out.println(order);  
  135.                 }  
  136.             }  
  137.         }  
  138.     }  
  139. }  

 

缓存

Java代码   收藏代码
  1. package org.springfuncs.cache;  
  2.   
  3. import org.hibernate.Query;  
  4. import org.hibernate.Session;  
  5. import org.hibernate.SessionFactory;  
  6. import org.junit.Test;  
  7. import org.springfuncs.domain.Emp;  
  8. import org.springfuncs.util.HibernateUtil;  
  9.   
  10. public class TestCache {  
  11.   
  12.     // 测试Session缓存  
  13.     @Test  
  14.     public void test_cache1() {  
  15.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  16.         Session session = sessionFactory.openSession();  
  17.         Emp emp1 = (Emp) session.get(Emp.class7369);  
  18.         Emp emp2 = (Emp) session.get(Emp.class7369);  
  19.         System.out.println(emp1 == emp2);  
  20.     }  
  21.   
  22.     // 测试 EHCache缓存  
  23.     // 配置缓存的话,会执行一条SQL,否则是2条SQL  
  24.     @Test  
  25.     public void test_cache2() {  
  26.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  27.         Session session = sessionFactory.openSession();  
  28.         String hql = "from Emp";  
  29.   
  30.         Query query = session.createQuery(hql);  
  31.         query.setCacheable(true);  
  32.         query.list();  
  33.   
  34.         query = session.createQuery(hql);  
  35.         query.setCacheable(true);  
  36.         query.list();  
  37.     }  
  38. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值