• hibernate框架学习笔记3:API详解


    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;
        }    
    }
  • 相关阅读:
    synchronized (lock) 买票demo 线程安全
    springboot项目搭建
    Maven命令
    Mybatis的mapper文件中$和#的用法及区别详解
    mybatis映射文件mapper.xml的写法(collections...)
    MyBatis-动态SQL的if、choose、when、otherwise、trim、where、set、foreach使用(各种标签详解), 以及实体间关系配置
    024 搭建前台系统-----乐优商城工程启动步骤教程
    023 商品管理功能03-----商品修改
    023 商品管理功能02-----商品新增
    022 商品管理功能01-----商品查询
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8446266.html
Copyright © 2020-2023  润新知