zoukankan      html  css  js  c++  java
  • hibernate5学习知识点小结

    1、SessionFactory

    //加载主配置文件
    Configuration config=new Configuration().configure();
    //创建Session工厂
    SessionFactory sessionFactory=config.buildSessionFactory();

    是由Configuration对象通过buildSessionFactory()方法创建的。是一个重量级对象(系统开销大)、单例的、线程安全的。一般不需要手动关闭,应用结束时自动将其销毁。
    目的:

    //获取Session
    Session session=sessionFactory.getCurrentSession();

    2、Session 轻量级对象、线程不安全、多例的。使用原则:一个事务一个对象,用完关闭。
    两种获取方式:

    Session session=sessionFactory.openSession(); 每调用一次方法获取一个新的Session对象。必须手动关闭session对象,无需环境注册,查询可以不在事务中。

    Session session=sessionFactory.getCurrentSession(); 获得当前线程中Session对象。自动关闭session对象,无需手动关闭。需要配置运行环境。操作(CURD)必须在事务中进行。

    3、Transaction 由Session对象创建 session.getTransaction()

    事务的开启:session.getTransaction().begin(); 或者 session.beginTransaction();

    事务的提交:session.getTransaction().commit();

    事务的回滚:session.getTransaction().rollback();
     4、CURD操作

    @Test
        public void mytest() {
            Session session = CommonUtil.getSession();
            session.getTransaction().begin();
            // 执行操作
            Student student = new Student("王五", 21, 100);
            session.save(student);
            session.getTransaction().commit();
        }
    
        @Test
        public void persistTest() {
            Session session = CommonUtil.getSession();
            session.getTransaction().begin();
            // 执行操作
            Student student = new Student("照六", 21, 100);
            session.persist(student);
            session.getTransaction().commit();
        }
    
        @Test
        public void deleteTest() {
            Session session = CommonUtil.getSession();
            session.getTransaction().begin();
            Student student = new Student();
            student.setId(2);
            session.delete(student);
            session.getTransaction().commit();
        }
    
        @Test
        public void updateTest() {
            Session session = CommonUtil.getSession();
            session.getTransaction().begin();
            Student student = new Student("李四", 27, 89);
            student.setId(4);
            session.update(student);
            session.getTransaction().commit();
        }
    
        @Test
        public void getTest() {
            Session session = CommonUtil.getSession();
            session.getTransaction().begin();
            Student student = session.get(Student.class, 20);
            System.out.print(student);
            session.getTransaction().commit();
        }
        
        @Test
        public void loadTest() {
            Session session = CommonUtil.getSession();
            session.getTransaction().begin();
            Student student = session.load(Student.class, 20);
            System.out.print(student);
            session.getTransaction().commit();
        }
    
    }

    对于get()和load()方法的区别:

      get():若id对应的数据不存在,不报错,返回null
           load():若id对应的数据不存在,抛出异常

    5、同一事务中:增、删、改执行的顺序:

    @Test
        public void sortTest(){
            Session session = CommonUtil.getSession();
            session.beginTransaction();
            
            try {
                //删除
                Student student1=new Student();
                student1.setId(2);
                session.delete(student1);
                
                //修改
                Student student2= new Student("小七",19,96);
                student2.setId(3);
                session.update(student2);
                
                //增加    
                Student student3= new Student("老八",23,98);
                session.save(student3);
                
                session.getTransaction().commit();
            } catch (Exception e) {
                session.getTransaction().rollback();
                e.printStackTrace();
            }
            
        }

    执行结果是:
    由此可见:在同一个Session中执行顺序默认是增,改,删

    调整顺序的方法:在操作之后加上 session.flush();

    @Test
        public void saveOrUpdate(){
            Session session = CommonUtil.getSessionFactory().openSession();
            session.beginTransaction();
            Student student= new Student("小五",19,96);
          //有ID设置,则更新 student.setId(
    3); session.saveOrUpdate(student); //无ID设置,则登录 Student student2= new Student("小五",19,96); session.saveOrUpdate(student2); session.getTransaction().commit(); }
  • 相关阅读:
    插入排序和顺序查找,折半查找
    单链表有环判断问题解决办法
    INT_MAX和INT_MAX
    最简单的学习往往是最无效的
    基于Windows安装Mysql数据库
    禁止跨域_五分钟带你了解跨域
    搞定SpringBoot多数据源(2):动态数据源
    API网关(API GATEWAY)是什么?有什么作用?
    一文搞懂蓝绿发布、灰度发布和滚动发布
    第九篇 bootstrap实例
  • 原文地址:https://www.cnblogs.com/huadiyatou/p/7515248.html
Copyright © 2011-2022 走看看