Configuration 对象:
- package api;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- import org.junit.Test;
- // 学习 Configuration 对象
- // Configuration 功能: 配置加载类. 用于加载主配置, orm 元数据加载
- public class Demo {
- @Test
- public void fun1(){
- //1 创建, 调用空参构造
- Configuration conf = new Configuration();
- //2 读取指定主配置文件 => 空参加载方法, 加载 src 下的 hibernate.cfg.xml 文件
- conf.configure();
- //3 读取指定 orm 元数据 (扩展), 如果主配置中已经引入映射配置. 不需要手动加载
- //conf.addResource(resourceName);
- //conf.addClass(persistentClass);
- // 这两种方法已过时, 现在不再使用, 了解即可
- //4 根据配置信息, 创建 SessionFactory 对象
- SessionFactory sf = conf.buildSessionFactory();
- }
- }
SessionFactory 对象:
- package api;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- import org.junit.Test;
- //SessionFactory 对象
- // SessionFactory 功能: 用于创建操作数据库核心对象 session 对象的工厂.
- // 简单说功能就一个 --- 创建 session 对象
- // 注意: 1.sessionFactory 负责保存和使用所有配置信息. 消耗内存资源非常大.
- // 2.sessionFactory 属于线程安全的对象设计.
- // 结论: 保证在 web 项目中, 只创建一个 sessionFactory.
- public class Demo {@Test public void fun1() {
- Configuration conf = new Configuration();
- conf.configure();
- SessionFactory sf = conf.buildSessionFactory();
- // 获得 session
- // 打开一个新的 session 对象
- sf.openSession();
- // 获得一个与线程绑定的 session 对象
- sf.getCurrentSession();
- }
- }
Session 对象和 Transaction 对象:
- package api;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import org.junit.Test;
- import domain.Customer;
- //Session 对象
- //session 对象功能: 表达 hibernate 框架与数据库之间的连接 (会话).session 类似于
- // JDBC 年代的 connection 对象. 还可以完成对数据库中数据的增删改查操作.
- // session 是 hibernate 操作数据库的核心对象
- public class Demo {@Test
- // 事务操作
- public void fun1() {
- //1 创建, 调用空参构造
- Configuration conf = new Configuration().configure();
- //2 根据配置信息, 创建 SessionFactory 对象
- SessionFactory sf = conf.buildSessionFactory();
- //3 获得 session
- Session session = sf.openSession();
- //4 session 获得操作事务的 Transaction 对象
- // 获得操作事务的 tx 对象
- //Transaction tx = session.getTransaction();
- // 开启事务并获得操作事务的 tx 对象 (建议使用)
- Transaction tx2 = session.beginTransaction();
- //----------------------------------------------
- // 事务操作
- //----------------------------------------------
- tx2.commit(); // 提交事务
- tx2.rollback(); // 回滚事务
- session.close(); // 释放资源
- sf.close(); // 释放资源
- }@Test
- //session 的新增
- public void fun2() {
- //1 创建, 调用空参构造
- Configuration conf = new Configuration().configure();
- //2 根据配置信息, 创建 SessionFactory 对象
- SessionFactory sf = conf.buildSessionFactory();
- //3 获得 session
- Session session = sf.openSession();
- //4 session 获得操作事务的 Transaction 对象
- // 获得操作事务的 tx 对象
- //Transaction tx = session.getTransaction();
- // 开启事务并获得操作事务的 tx 对象 (建议使用)
- Transaction tx2 = session.beginTransaction();
- //----------------------------------------------
- Customer c = new Customer();
- c.setCust_name("百度");
- session.save(c);
- //----------------------------------------------
- tx2.commit(); // 提交事务
- session.close(); // 释放资源
- sf.close(); // 释放资源
- }@Test
- //session 的查询
- // 查询 id 为 1 的 customer 对象
- public void fun3() {
- //1 创建, 调用空参构造
- Configuration conf = new Configuration().configure();
- //2 根据配置信息, 创建 SessionFactory 对象
- SessionFactory sf = conf.buildSessionFactory();
- //3 获得 session
- Session session = sf.openSession();
- //4 session 获得操作事务的 Transaction 对象
- // 获得操作事务的 tx 对象
- //Transaction tx = session.getTransaction();
- // 开启事务并获得操作事务的 tx 对象 (建议使用)
- Transaction tx2 = session.beginTransaction();
- //----------------------------------------------
- Customer customer = session.get(Customer.class, 1l);
- System.out.println(customer);
- //----------------------------------------------
- tx2.commit(); // 提交事务
- session.close(); // 释放资源
- sf.close(); // 释放资源
- }@Test
- //session 的修改
- // 修改 id 为 1 的 customer 对象的 name 属性
- public void fun4() {
- //1 创建, 调用空参构造
- Configuration conf = new Configuration().configure();
- //2 根据配置信息, 创建 SessionFactory 对象
- SessionFactory sf = conf.buildSessionFactory();
- //3 获得 session
- Session session = sf.openSession();
- //4 session 获得操作事务的 Transaction 对象
- // 获得操作事务的 tx 对象
- //Transaction tx = session.getTransaction();
- // 开启事务并获得操作事务的 tx 对象 (建议使用)
- Transaction tx2 = session.beginTransaction();
- //----------------------------------------------
- //1 获得要修改的对象
- Customer c = session.get(Customer.class, 1l);
- //2 修改
- c.setCust_name("腾讯");
- //3 执行 update
- session.update(c);
- //----------------------------------------------
- tx2.commit(); // 提交事务
- session.close(); // 释放资源
- sf.close(); // 释放资源
- }@Test
- //session 的删除
- // 删除 id 为 1 的 customer 对象
- public void fun5() {
- //1 创建, 调用空参构造
- Configuration conf = new Configuration().configure();
- //2 根据配置信息, 创建 SessionFactory 对象
- SessionFactory sf = conf.buildSessionFactory();
- //3 获得 session
- Session session = sf.openSession();
- //4 session 获得操作事务的 Transaction 对象
- // 获得操作事务的 tx 对象
- //Transaction tx = session.getTransaction();
- //tx.begin();
- // 开启事务并获得操作事务的 tx 对象 (建议使用)
- Transaction tx2 = session.beginTransaction();
- //----------------------------------------------
- //1 获得要修改的对象
- Customer c = session.get(Customer.class, 1l);
- //2 调用 delete 删除对象
- session.delete(c);
- //----------------------------------------------
- tx2.commit(); // 提交事务
- session.close(); // 释放资源
- sf.close(); // 释放资源
- }
- }
发现这里代码有些重复, 可以抽取工具类:
- package utils;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- public class HibernateUtils {
- private static SessionFactory sf;
- static {
- //1 创建, 调用空参构造
- Configuration conf = new Configuration().configure();
- //2 根据配置信息, 创建 SessionFactory 对象
- sf = conf.buildSessionFactory();
- }
- // 获得 session => 获得全新 session
- public static Session openSession() {
- //3 获得 session
- Session session = sf.openSession();
- return session;
- }
- // 获得 session => 获得与线程绑定的 session
- public static Session getCurrentSession() {
- //3 获得 session
- Session session = sf.getCurrentSession();
- return session;
- }
- }
来源: http://www.bubuko.com/infodetail-2497179.html