Hibernate4的一些总结

转自: http://1194867672-qq-com.iteye.com/blog/1522906

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. }  
package org.springfuncs.domain;

import java.io.Serializable;
import java.util.Date;

/** 雇员 */
public class Emp implements Serializable {

	private static final long serialVersionUID = 2127136225587213245L;

	private Integer empno; // 雇员编号
	private String ename; // 雇员姓名
	private String job; // 工作
	private Integer mgr; // 上级雇员的编号
	private Date hiredate; // 入职日期
	private Double sal; // 薪水
	private Double comm; // 奖金
	private Integer deptno; // 部门编号

	public Emp() {
	}

	public Emp(Integer empno, String ename, Date hiredate, Double sal) {
		this.empno = empno;
		this.ename = ename;
		this.hiredate = hiredate;
		this.sal = sal;
	}

	// getter and setter

	public String toString() {
		return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job
				+ ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal=" + sal
				+ ", comm=" + comm + ", deptno=" + deptno + "]";
	}

}

 

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. }  
package org.springfuncs.domain;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/** 客户 */
public class Customer implements Serializable {

	private static final long serialVersionUID = -6514738924858633212L;

	private Integer id; //id
	private String name; //姓名
	private Set<Order> orders = new HashSet<Order>(); //其下订单

	public Customer() {
	}

	// getter and setter

	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + "]";
	}

}

 

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. }  
package org.springfuncs.domain;

import java.io.Serializable;

/** 订单 */
public class Order implements Serializable {

	private static final long serialVersionUID = -5409386658105657900L;

	private Integer id; // id
	private String orderNumber; // 订单号
	private Customer customer; // 所属客户

	public Order() {
	}

	//getter and setter
	
	@Override
	public String toString() {
		return "Order [id=" + id + ", orderNumber=" + orderNumber + "]";
	}

}

 

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. }  
package org.springfuncs.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public final class HibernateUtil {

	private static SessionFactory sessionFactory;

	private HibernateUtil() {
	}

	static {
		try {
				
			/** 此方法在Hibernate4中被标记为过时 */
			// sessionFactory = new Configuration().configure().buildSessionFactory();

			/**Hibernate4取得SessionFactory的方法 */
			Configuration cfg = new Configuration().configure();
			ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
			sessionFactory = cfg.buildSessionFactory(serviceRegistry);

		} catch (Throwable e) {
			throw new ExceptionInInitializerError(e);
		}
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}

 

 

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. }  
package org.springfuncs.hql;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springfuncs.domain.Emp;
import org.springfuncs.util.HibernateUtil;

public class TestHql {

	/** 查询全部 (推荐) */
	@Test
	public void test_list() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Emp";
		Query query = session.createQuery(hql);
		query.setCacheable(true); // 设置缓存
		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	/** 查询全部 */
	@Test
	public void test_iterator() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Emp";
		Query query = session.createQuery(hql);
		Iterator<Emp> it = query.iterate();
		while (it.hasNext()) {
			Emp emp = it.next();
			System.out.println(emp);
		}
		session.close();
	}

	/** 分页查询 */
	// select * from
	// ( select e.*, rownum rn from ( select * from emp ) e where rownum <= 10 )
	// where rn > 1
	@Test
	public void test_pagination() {
		int pageNo = 1; // 当前页数
		int pageSize = 5; // 每页显示条数

		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Emp";
		Query query = session.createQuery(hql);
		query.setFirstResult((pageNo - 1) * pageSize);
		query.setMaxResults(pageSize);
		query.setCacheable(true); // 设置缓存
		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	/** 查询结果是唯一值 */
	@Test
	public void test_uniqueResult() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Emp where empno=7369";
		Query query = session.createQuery(hql);
		Emp emp = (Emp) query.uniqueResult();
		System.out.println(emp);
		session.close();
	}

	/** 投影查询 */
	@Test
	public void test_projection1() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select empno from Emp"; // 查询单值
		Query query = session.createQuery(hql);
		List<Integer> list = query.list();
		for (Integer empno : list) {
			System.out.println(empno);
		}
		session.close();
	}

	/** 投影查询 */
	@Test
	public void test_projection2() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select empno,ename,hiredate,sal from Emp"; // 查询多值
		Query query = session.createQuery(hql);
		List<Object[]> list = query.list();
		for (Object[] arr : list) {
			System.out.println(arr[0] + "\t" + arr[1] + "\t" + arr[2] + "\t" + arr[3]);
		}
		session.close();
	}

	/** 投影查询 */
	@Test
	public void test_projection3() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select new Emp(empno,ename,hiredate,sal) from Emp"; // 查询多值 封装在一个对象中
		Query query = session.createQuery(hql);
		List<Emp> list = query.list();
		for (Emp emp : list) {
			System.out.println(emp.getEmpno() + "\t" + emp.getEname() + "\t" + emp.getHiredate() + "\t" + emp.getSal());
		}
		session.close();
	}

	/** 投影查询 */
	@Test
	public void test_projection4() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select new Map(empno,ename,hiredate,sal) from Emp"; // map 大小都都可以, 查询多值 封装在一个Map中
		Query query = session.createQuery(hql);
		List<Map> list = query.list();
		for (Map map : list) {
			System.out.println(map.get("0") + "\t" + map.get("1") + "\t" + map.get("2") + "\t" + map.get("3"));
		}
		session.close();
	}

	/** 投影查询 (使用别名) */
	@Test
	public void test_projection5() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		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";
		Query query = session.createQuery(hql);
		List<Map> list = query.list();
		for (Map map : list) {
			System.out.println(map.get("empno") + "\t" + map.get("ename") + "\t" + map.get("hiredate") + "\t" + map.get("sal"));
		}
		session.close();
	}

	/** 去掉重复值 */
	@Test
	public void test_distinct() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select distinct job from Emp";
		Query query = session.createQuery(hql);
		List<String> list = query.list();
		for (String job : list) {
			System.out.println(job);
		}
		session.close();
	}

	/** 条件查询 */
	@Test
	public void test_where1() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();

		// String hql = "from Emp where empno=7369 and ename='SMITH'";
		// String hql = "from Emp where empno=7369 or ename='ALLEN'";
		// String hql = "from Emp where not (ename='SMITH')"; // () 可以不写

		// String hql = "from Emp where sal between 3000 and 5000";
		// String hql = "from Emp where sal not between 3000 and 5000";

		// String hql = "from Emp where empno in(7369,7900,7654)";
		// String hql = "from Emp where empno not in(7369,7900,7654)";

		// String hql = "from Emp where ename like 'S%'";
		// String hql = "from Emp where ename not like 'S%'";

		// String hql="from Emp where comm is null";
		// String hql="from Emp where comm is not null";

		// String hql = "from Emp where sal >= 3000 and sal<= 5000)";
		// String hql="from Emp where sal <>3000";
		String hql = "from Emp where sal !=3000";

		Query query = session.createQuery(hql);
		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	/** 条件查询 */
	@Test
	public void test_where2() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();

		String hql = "from Emp where  ename like ?";
		Query query = session.createQuery(hql);
		query.setString(0, "J%");

		// String hql = "from Emp where  ename like :ename";
		// Query query = session.createQuery(hql);
		// query.setString("ename", "J%");

		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	/** 统计函数 */
	@Test
	public void test_statistics1() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select count(*),min(sal),max(sal),avg(sal),sum(sal) from Emp";
		Query query = session.createQuery(hql);
		Object[] values = (Object[]) query.uniqueResult();
		System.out.println("总数:" + values[0]);
		System.out.println("最小值:" + values[1]);
		System.out.println("最大值:" + values[2]);
		System.out.println("平均值:" + values[3]);
		System.out.println("合计:" + values[4]);
		session.close();
	}

	/** 统计函数 */
	@Test
	public void test_statistics2() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select deptno,avg(sal)  from Emp group by deptno having avg(sal)>2000 order by deptno";
		Query query = session.createQuery(hql);
		List<Object[]> list = query.list();
		for (Object[] arr : list) {
			System.out.println("部门编号:" + arr[0] + "\t" + "平均薪资:" + arr[1]);
		}
		session.close();
	}

	/** 使用函数(和底层数据库有关) */
	@Test
	public void test_function() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select to_char(hiredate,'yyyy-mm-dd') from Emp";
		Query query = session.createQuery(hql);
		List<String> list = query.list();
		for (String ename : list) {
			System.out.println(ename);
		}
		session.close();
	}

	/** 排序 */
	@Test
	public void test_orderby() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Emp order by job,sal desc";
		Query query = session.createQuery(hql);
		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	// 遍历集合
	private void show(List<Emp> list) {
		for (Emp emp : list) {
			System.out.println(emp);
		}
	}
}

 

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. }  
package org.springfuncs.qbc;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import org.springfuncs.domain.Emp;
import org.springfuncs.util.HibernateUtil;

public class TestQBC {

	/** 查询全部 */
	@Test
	public void test_list() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		criteria.setCacheable(true); // 设置缓存
		List<Emp> list = criteria.list();
		show(list);
		session.close();
	}

	/** 查询全部 */
	@Test
	public void test_iterator() {
		// 没有iterator
	}

	/** 分页查询 */
	// select * from
	// ( select e.*, rownum rn from ( select * from emp ) e where rownum <= 10 )
	// where rn > 1
	@Test
	public void test_pagination() {
		int pageNo = 1; // 当前页数
		int pageSize = 5; // 每页显示条数

		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		criteria.setFirstResult((pageNo - 1) * pageSize);
		criteria.setMaxResults(pageSize);
		criteria.setCacheable(true); // 设置缓存
		List<Emp> list = criteria.list();
		show(list);
		session.close();
	}

	/** 查询结果是唯一值 */
	@Test
	public void test_uniqueResult() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		criteria.add(Restrictions.eq("empno", 7369));
		Emp emp = (Emp) criteria.uniqueResult();
		System.out.println(emp);
		session.close();
	}

	/** 投影查询 */
	@Test
	public void test_projection1() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		criteria.setProjection(Projections.property("empno"));
		List<Integer> list = criteria.list();
		for (Integer empno : list) {
			System.out.println(empno);
		}
		session.close();
	}

	/** 投影查询 */
	@Test
	public void test_projection2() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		ProjectionList projectionList = Projections.projectionList();
		projectionList.add(Projections.property("empno"));
		projectionList.add(Projections.property("ename"));
		projectionList.add(Projections.property("hiredate"));
		projectionList.add(Projections.property("sal"));
		criteria.setProjection(projectionList);
		List<Object[]> list = criteria.list();
		for (Object[] arr : list) {
			System.out.println(arr[0] + "\t" + arr[1] + "\t" + arr[2] + "\t" + arr[3]);
		}
		session.close();
	}

	/** 去掉重复值 */
	@Test
	public void test_distinct() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		criteria.setProjection(Projections.distinct(Projections.property("job")));
		List<String> list = criteria.list();
		for (String job : list) {
			System.out.println(job);
		}
		session.close();
	}

	/** 条件查询 */
	@Test
	public void test_where() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);

		// criteria.add(Restrictions.and(Restrictions.eq("empno", 7369), Restrictions.eq("ename", "SMITH")));
		// criteria.add(Restrictions.or(Restrictions.eq("empno", 7369), Restrictions.eq("ename", "ALLEN")));
		// criteria.add(Restrictions.not(Restrictions.eq("ename", "SMITH")));

		// criteria.add(Restrictions.between("sal", 3000.0, 5000.0));
		// criteria.add(Restrictions.not(Restrictions.between("sal", 3000.0, 5000.0)));

		// criteria.add(Restrictions.in("empno", new Object[] { 7369, 7900, 7654 }));
		// criteria.add(Restrictions.not(Restrictions.in("empno", new Object[] { 7369, 7900, 7654 })));

		// criteria.add(Restrictions.like("ename", "S%", MatchMode.START));
		// criteria.add(Restrictions.not(Restrictions.like("ename", "S%", MatchMode.START)));

		// criteria.add(Restrictions.isNull("comm"));
		// criteria.add(Restrictions.not(Restrictions.isNull("comm")));

		// criteria.add(Restrictions.and(Restrictions.ge("sal", 3000.0), Restrictions.le("sal", 5000.0)));
		criteria.add(Restrictions.ne("sal", 3000.0));
		List<Emp> list = criteria.list();
		show(list);
		session.close();
	}

	/** 统计函数 */
	@Test
	public void test_statistics1() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		ProjectionList projectionList = Projections.projectionList();
		projectionList.add(Projections.rowCount());
		projectionList.add(Projections.min("sal"));
		projectionList.add(Projections.max("sal"));
		projectionList.add(Projections.avg("sal"));
		projectionList.add(Projections.sum("sal"));
		criteria.setProjection(projectionList);
		Object[] values = (Object[]) criteria.uniqueResult();
		System.out.println("总数:" + values[0]);
		System.out.println("最小值:" + values[1]);
		System.out.println("最大值:" + values[2]);
		System.out.println("平均值:" + values[3]);
		System.out.println("合计:" + values[4]);
		session.close();
	}

	/** 统计函数 */
	// select deptno,avg(sal) from Emp group by deptno having avg(sal)>2000 order by deptno;
	@Test
	public void test_statistics2() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		ProjectionList projectionList = Projections.projectionList();
		projectionList.add(Projections.property("deptno"));
		projectionList.add(Projections.avg("sal"));
		projectionList.add(Projections.groupProperty("deptno"));
		criteria.setProjection(projectionList);
		// TODO having 怎么表示 暂时没有找到
		criteria.addOrder(Order.asc("deptno"));
		List<Object[]> list = criteria.list();

		for (Object[] arr : list) {
			System.out.println("部门编号:" + arr[0] + "\t" + "平均薪资:" + arr[1]);
		}
		session.close();
	}

	/** 使用函数(和底层数据库有关) */
	@Test
	public void test_function() {
		// TODO
	}

	/** 排序 */
	@Test
	public void test_orderby() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		criteria.addOrder(Order.asc("job"));
		criteria.addOrder(Order.desc("sal"));
		List<Emp> list = criteria.list();
		show(list);
		session.close();
	}

	// 遍历集合
	private void show(List<Emp> list) {
		for (Emp emp : list) {
			System.out.println(emp);
		}
	}
}

 

 

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. }  
package org.springfuncs.qbe;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;
import org.junit.Test;
import org.springfuncs.domain.Emp;
import org.springfuncs.util.HibernateUtil;

public class TestQBE {

	/** QBE查询 适合条件检索 */
	@Test
	public void test_qbe() {
		Emp emp = new Emp();
		emp.setDeptno(10);
		emp.setJob("MANAGER");

		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Emp.class);
		criteria.add(Example.create(emp));// 注意
		List<Emp> list = criteria.list();
		show(list);
		session.close();
	}

	// 遍历集合
	private void show(List<Emp> list) {
		for (Emp emp : list) {
			System.out.println(emp);
		}
	}
}

 

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. }  
package org.springfuncs.sql;

import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.StandardBasicTypes;
import org.junit.Test;
import org.springfuncs.domain.Emp;
import org.springfuncs.util.HibernateUtil;

public class TestSql {

	/** 查询全部 */
	@Test
	public void test_sql1() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String sql = "select * from emp";
		SQLQuery query = session.createSQLQuery(sql);
		List<Object[]> list = query.list();
		for (Object[] arr : list) {
			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]);
		}
		session.close();
	}

	/** 查询全部 */
	@Test
	public void test_sql2() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String sql = "select * from emp";
		SQLQuery query = session.createSQLQuery(sql);
		query.addScalar("empno", StandardBasicTypes.INTEGER);
		query.addScalar("ename", StandardBasicTypes.STRING);
		query.addScalar("job", StandardBasicTypes.STRING);
		query.addScalar("mgr", StandardBasicTypes.INTEGER);
		query.addScalar("hiredate", StandardBasicTypes.DATE);
		query.addScalar("sal", StandardBasicTypes.DOUBLE);
		query.addScalar("comm", StandardBasicTypes.DOUBLE);
		query.addScalar("deptno", StandardBasicTypes.INTEGER);
		List<Object[]> list = query.list();
		for (Object[] arr : list) {
			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]);
		}
		session.close();
	}

	/** 查询全部 */
	@Test
	public void test_sql3() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String sql = "select * from emp";
		SQLQuery query = session.createSQLQuery(sql);
		query.addScalar("empno", StandardBasicTypes.INTEGER);
		query.addScalar("ename", StandardBasicTypes.STRING);
		query.addScalar("job", StandardBasicTypes.STRING);
		query.addScalar("mgr", StandardBasicTypes.INTEGER);
		query.addScalar("hiredate", StandardBasicTypes.DATE);
		query.addScalar("sal", StandardBasicTypes.DOUBLE);
		query.addScalar("comm", StandardBasicTypes.DOUBLE);
		query.addScalar("deptno", StandardBasicTypes.INTEGER);
		query.setResultTransformer(Transformers.aliasToBean(Emp.class));
		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	/** 查询全部 (推荐) */
	@Test
	public void test_sql4() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();

		String sql = "select * from emp";
		SQLQuery query = session.createSQLQuery(sql);
		query.addEntity(Emp.class);

		// String sql = "select {e.*} from emp e";
		// SQLQuery query = session.createSQLQuery(sql);
		// query.addEntity("e", Emp.class);
		query.setCacheable(true); // 设置缓存
		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	/** 条件查询 */
	@Test
	public void test_where() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();

		String sql = "select * from emp where  ename like ?";
		SQLQuery query = session.createSQLQuery(sql);
		query.addEntity(Emp.class);
		query.setString(0, "J%");

		// String sql = "select * from emp where  ename like :ename";
		// SQLQuery query = session.createSQLQuery(sql);
		// query.addEntity(Emp.class);
		// query.setString("ename", "J%");

		List<Emp> list = query.list();
		show(list);
		session.close();
	}

	// 遍历集合
	private void show(List<Emp> list) {
		for (Emp emp : list) {
			System.out.println(emp);
		}
	}
}

 

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. }  
package org.springfuncs.crud;

import java.io.Serializable;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import org.springfuncs.domain.Customer;
import org.springfuncs.util.HibernateUtil;

public class TestCRUD {

	// 添加
	@Test
	public void test_save() {

		Customer customer = new Customer();
		customer.setName("monday");

		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		Serializable id = session.save(customer); // 返回OID
		tx.commit();
		session.close();
		System.out.println("id=" + id);
	}

	// 添加
	@Test
	public void test_persist() {
		Customer customer = new Customer();
		customer.setName("monday");

		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		session.persist(customer); // 无返回值
		tx.commit();
		session.close();
	}

	// 添加
	@Test
	public void test_saveOrUpdate1() {
		Customer customer = new Customer();
		customer.setName("monday");

		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		session.saveOrUpdate(customer); // OID 为空 执行save操作
		tx.commit();
		session.close();
	}

	// 修改
	@Test
	public void test_saveOrUpdate2() {
		Customer customer = new Customer();
		customer.setName("monday_update");
		customer.setId(5);

		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		session.saveOrUpdate(customer); // OID 为不空 执行update操作
		tx.commit();
		session.close();
	}

	// 修改
	@Test
	public void test_update() {
		Customer customer = new Customer();
		customer.setName("monday_update2");
		customer.setId(5);

		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		session.update(customer);
		tx.commit();
		session.close();
	}

	// 修改
	@Test
	public void test_update_hql() {
		String hql = "update Customer set name=? where id=?";
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		Query query = session.createQuery(hql);
		query.setParameter(0, "springfuncs");
		query.setParameter(1, 5);
		query.executeUpdate();
		tx.commit();
		session.close();
	}

	// 删除
	@Test
	public void test_delete() {
		Customer customer = new Customer();
		customer.setId(5);

		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		session.delete(customer);
		tx.commit();
		session.close();
	}

	// 删除
	@Test
	public void test_delete_hql() {
		String hql = "delete from Customer where id=?";
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		Query query = session.createQuery(hql);
		query.setParameter(0, 6);
		query.executeUpdate();
		tx.commit();
		session.close();
	}

	// 查询
	@Test
	public void test_get() {
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		// Transaction tx = session.beginTransaction();
		Customer customer = (Customer) session.get(Customer.class, 1);
		// tx.commit();
		session.close();
		System.out.println(customer);
	}

	// 查询
	@Test
	public void test_load() {
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		// Transaction tx = session.getTransaction();
		// tx.begin();
		Customer customer = (Customer) session.load(Customer.class, 1);
		// tx.commit();

		Hibernate.initialize(customer);
		session.close();
		System.out.println(customer);

		// 或者
		// System.out.println(customer);
		// session.close();
	}
}

 

关联查询

 

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. }  
package org.springfuncs.associated;

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springfuncs.domain.Customer;
import org.springfuncs.domain.Order;
import org.springfuncs.util.HibernateUtil;

public class TestAssociated {

	// 交叉连接(多表的笛卡儿积不常用)
	// select c.*,o.* from customers c, orders o
	@Test
	public void test_cross_join() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Customer c , Order o";
		Query query = session.createQuery(hql);
		List<Object[]> list = query.list();
		for (int i = 0; i < list.size(); i++) {
			Object[] obj = (Object[]) list.get(i);
			Customer customer = (Customer) obj[0];
			Order order = (Order) obj[1];
			System.out.println((i + 1) + "---" + customer);
			System.out.println((i + 1) + "---" + order);
		}
		session.close();
	}

	// 内链接
	// select c.* from customers c inner join orders o on c.id=o.customer_id
	// select o.* from orders o where o.customer_id=?
	@Test
	public void test_inner_join() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select c from Customer c inner join c.orders"; // inner 可省略
		Query query = session.createQuery(hql);
		List<Customer> list = query.list();
		showCustomer(list);
		session.close();
	}

	// 左外连接
	// select c.* from customers c left outer join orders o on c.id=o.customer_id
	// select o.* from orders o where o.customer_id=?
	@Test
	public void test_left_outer_join() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select c from Customer c left outer join c.orders"; // outer 可省略
		Query query = session.createQuery(hql);
		List<Customer> list = query.list();
		showCustomer(list);
		session.close();
	}

	// 右连接
	// select c.*, o.* from customers c right outer join orders o on c.id=o.customer_id
	@Test
	public void test_right_outer_join() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Customer c right outer join c.orders"; // outer 可省略
		Query query = session.createQuery(hql);
		List<Object[]> list = query.list();
		for (int i = 0; list != null && i < list.size(); i++) {
			Object[] obj = list.get(i);
			Customer customer = (Customer) obj[0];
			Order order = (Order) obj[1];
			System.out.println((i + 1) + "---" + customer);
			System.out.println((i + 1) + "---" + order);
		}
		session.close();
	}

	// 迫切内连接(推荐)
	// select c.*,o.* from customers c inner join orders o on c.id=o.customer_id
	@Test
	public void test_inner_join_fetch() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select c from Customer c inner join fetch c.orders"; // inner 可省略
		Query query = session.createQuery(hql);
		query.setCacheable(true); // 设置缓存
		List<Customer> list = query.list();
		showCustomer(list);
		session.close();
	}

	// 迫切左外连接(推荐)
	// select c.*,o.* from customers c left outer join orders o on c.id=o.customer_id
	@Test
	public void test_left_outer_join_fetch() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "select c from Customer c left outer join fetch c.orders"; // outer可省略
		Query query = session.createQuery(hql);
		query.setCacheable(true); // 设置缓存
		List<Customer> list = query.list();
		showCustomer(list);
		session.close();
	}

	// 迫切左外连接(推荐)
	// select c.*, o.* from customers c left outer join orders o on c.id=o.customer_id
	@Test
	public void test_left_outer_join_fetch_QBC() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Customer.class).setFetchMode("orders", FetchMode.JOIN);
		criteria.setCacheable(true); // 设置缓存
		List<Customer> list = criteria.list();
		showCustomer(list);
		session.close();
	}

	// 打印Order信息
	private void showCustomer(List<Customer> list) {
		for (Customer customer : list) {
			System.out.println(customer);
			if (customer.getOrders() != null && customer.getOrders().size() > 0) {
				Set<Order> orders = customer.getOrders();
				for (Iterator<Order> it = orders.iterator(); it.hasNext();) {
					Order order = it.next();
					System.out.println(order);
				}
			}
		}
	}
}

 

缓存

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. }  
package org.springfuncs.cache;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springfuncs.domain.Emp;
import org.springfuncs.util.HibernateUtil;

public class TestCache {

	// 测试Session缓存
	@Test
	public void test_cache1() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		Emp emp1 = (Emp) session.get(Emp.class, 7369);
		Emp emp2 = (Emp) session.get(Emp.class, 7369);
		System.out.println(emp1 == emp2);
	}

	// 测试 EHCache缓存
	// 配置缓存的话,会执行一条SQL,否则是2条SQL
	@Test
	public void test_cache2() {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		String hql = "from Emp";

		Query query = session.createQuery(hql);
		query.setCacheable(true);
		query.list();

		query = session.createQuery(hql);
		query.setCacheable(true);
		query.list();
	}
}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值