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 version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
- <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
- <property name="hibernate.connection.username">scott</property>
- <property name="hibernate.connection.password">tiger</property>
- <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
- <property name="hibernate.show_sql">true</property>
- <property name="hibernate.format_sql">true</property>
- <property name="hibernate.hbm2ddl.auto">none</property>
- <property name="hibernate.jdbc.fetch_size">100</property>
- <property name="hibernate.jdbc.batch_size">30</property>
- <!-- 配置二级缓存 -->
- <property name="hibernate.cache.use_second_level_cache">true</property>
- <property name="hibernate.cache.use_query_cache">true</property>
- <!-- Hibernate4 这里和Hibernate3不一样 要特别注意!!!-->
- <property name="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>
- <!-- Hibernate3 -->
- <!-- <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> -->
- <!-- 配置C3P0 -->
- <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
- <property name="hibernate.c3p0.max_size">10</property>
- <property name="hibernate.c3p0.min_size">1</property>
- <property name="hibernate.c3p0.max_statements">3</property>
- <property name="hibernate.c3p0.timeout">30</property>
- <property name="hibernate.c3p0.acquire_increment">1</property>
- <property name="hibernate.c3p0.idle_test_periodt">10</property>
- <mapping resource="org/springfuncs/domain/Customer.hbm.xml" />
- <mapping resource="org/springfuncs/domain/Order.hbm.xml" />
- <mapping resource="org/springfuncs/domain/Emp.hbm.xml" />
- </session-factory>
- </hibernate-configuration>
实体类和映射文件(没用注解...)
- 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 version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="org.springfuncs.domain">
- <class name="Emp" table="EMP">
- <cache usage="read-write" /> <!-- 缓存 -->
- <id name="empno" column="EMPNO" length="4" type="integer">
- <generator class="assigned" />
- </id>
- <property name="ename" column="ENAME" length="10" type="string" />
- <property name="job" column="JOB" length="9" type="string" />
- <property name="mgr" column="MGR" length="4" type="integer" />
- <property name="hiredate" column="HIREDATE" type="date" />
- <property name="sal" column="SAL" type="double" />
- <property name="comm" column="COMM" type="double" />
- <property name="deptno" column="DEPTNO" length="2" type="integer" />
- </class>
- </hibernate-mapping>
- 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 version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="org.springfuncs.domain">
- <class name="Customer" table="CUSTOMERS">
- <cache usage="read-write" /> <!-- 缓存 -->
- <id name="id" column="id" type="integer">
- <generator class="increment" />
- </id>
- <property name="name" column="NAME" length="255" type="string" />
- <set name="orders" inverse="true" cascade="save-update,delete">
- <cache usage="read-write" /> <!-- 缓存 -->
- <key column="CUSTOMER_ID" />
- <one-to-many class="Order" />
- </set>
- </class>
- </hibernate-mapping>
- 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 version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="org.springfuncs.domain">
- <class name="Order" table="ORDERS">
- <cache usage="read-write" /> <!-- 缓存 -->
- <id name="id" column="id" type="integer">
- <generator class="increment" />
- </id>
- <property name="orderNumber" column="ORDERNUMBER" length="255" type="string" />
- <many-to-one name="customer" class="Customer" column="CUSTOMER_ID" />
- </class>
- </hibernate-mapping>
还有什么缓存的配置以及数据库脚本,我会放在附件中
好了。。。开始帖代码了。。。。
HibernateUtil.java
- 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
- 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
- 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
- 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
- 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
- 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();
- }
- }
关联查询
- 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);
- }
- }
- }
- }
- }
缓存
- 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();
- }
- }