• Hibernate5笔记2--单表的增删改查操作


    单表的增删改查操作:

      (1)定义获取Session和SessionFactory的工具类:

     1 package com.tongji.utils;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.cfg.Configuration;
     6 
     7 public class HbnUtils {
     8     private static SessionFactory sessionFactory;
     9     public static Session getSession() {
    10          return getSessionFactory().getCurrentSession();
    11     }
    12     
    13     public static SessionFactory getSessionFactory() {
    14         if (sessionFactory == null || sessionFactory.isClosed()) {
    15             sessionFactory = new Configuration().configure().buildSessionFactory();
    16         }
    17         return sessionFactory;
    18     }
    19 }

      (2) 增加操作:

     1 @Test
     2 public void testSave() {
     3     //1. 获取Session
     4     Session session = HbnUtils.getSession();
     5     try {
     6         //2. 开启事务
     7         session.beginTransaction();
     8         //session.getTransaction().begin();  同样
     9         //3. 操作
    10         Student student = new Student("张三", 23, 93.5);
    11         session.save(student);
    12         //4. 事务提交
    13         session.getTransaction().commit();
    14     } catch (Exception e) {
    15         e.printStackTrace();
    16         //5. 事务回滚
    17         session.getTransaction().rollback();
    18     }
    19 }
    20 
    21 @Test
    22 public void testPersist() {
    23     //1. 获取Session
    24     Session session = HbnUtils.getSession();
    25     try {
    26         //2. 开启事务
    27         session.beginTransaction();
    28         //session.getTransaction().begin();  同样
    29         //3. 操作
    30         Student student = new Student("张三", 23, 93.5);
    31         session.persist(student);    //JPA接口的API,效果同save
    32         //4. 事务提交
    33         session.getTransaction().commit();
    34     } catch (Exception e) {
    35         e.printStackTrace();
    36         //5. 事务回滚
    37         session.getTransaction().rollback();
    38     }
    39 }

      (3)删除操作:

     1 @Test
     2 public void testDelete() {
     3     //1. 获取Session
     4     Session session = HbnUtils.getSession();
     5     try {
     6         //2. 开启事务
     7         session.beginTransaction();
     8         //3. 操作
     9         Student student = new Student();
    10         student.setId(6);
    11         session.delete(student);  //删除是根据对象的id,进行删除的
    12         //4. 事务提交
    13         session.getTransaction().commit();
    14     } catch (Exception e) {
    15         e.printStackTrace();
    16         //5. 事务回滚
    17         session.getTransaction().rollback();
    18     }
    19 }

      (4) 更新操作:

     1 @Test
     2 public void testUpdate() {
     3     //1. 获取Session
     4     Session session = HbnUtils.getSession();
     5     try {
     6         //2. 开启事务
     7         session.beginTransaction();
     8         //3. 操作
     9         Student student = new Student("李四", 24, 94.5);
    10         student.setId(5);
    11         session.update(student);  //修改是根据对象的id,进行修改的
    12         //4. 事务提交
    13         session.getTransaction().commit();
    14     } catch (Exception e) {
    15         e.printStackTrace();
    16         //5. 事务回滚
    17         session.getTransaction().rollback();
    18     }
    19 }
    20 
    21 @Test
    22 public void testUpdate2() {
    23     //1. 获取Session
    24     Session session = HbnUtils.getSession();
    25     try {
    26         //2. 开启事务
    27         session.beginTransaction();
    28         //3. 操作
    29         Student student = new Student("李四", 24, 94.5);
    30         student.setId(3);
    31         session.saveOrUpdate(student);  //执行save还是update的判断依据是,操作对象是否存在id
    32         //4. 事务提交
    33         session.getTransaction().commit();
    34     } catch (Exception e) {
    35         e.printStackTrace();
    36         //5. 事务回滚
    37         session.getTransaction().rollback();
    38     }
    39 }

      (5) 查询操作:

     1 @Test
     2 public void testGet() {
     3     //1. 获取Session
     4     Session session = HbnUtils.getSession();
     5     try {
     6         //2. 开启事务
     7         session.beginTransaction();
     8         //3. 操作
     9         //若查询的对象不存在,get返回null
    10         Student student = session.get(Student.class, 5);
    11         System.out.println(student);
    12         //4. 事务提交
    13         session.getTransaction().commit();
    14     } catch (Exception e) {
    15         e.printStackTrace();
    16         //5. 事务回滚
    17         session.getTransaction().rollback();
    18     }
    19 }
    20 
    21 @Test
    22 public void testLoad() {
    23     //1. 获取Session
    24     Session session = HbnUtils.getSession();
    25     try {
    26         //2. 开启事务
    27         session.beginTransaction();
    28         //3. 操作
    29         //若查询的对象不存在,load抛出异常
    30         Student student = session.load(Student.class, 5);
    31         System.out.println(student);
    32         //4. 事务提交
    33         session.getTransaction().commit();
    34     } catch (Exception e) {
    35         e.printStackTrace();
    36         //5. 事务回滚
    37         session.getTransaction().rollback();
    38     }
    39 }
    40 
    41 @Test
    42 public void testLoad2() {
    43     //1. 获取Session
    44     Session session = HbnUtils.getSession();
    45     //Session必须在事务环境下运行,无论是增、删、改,还是查询
    46     Student student = session.load(Student.class, 5);
    47     System.out.println(student);
    48 }

      (6) 增删改的底层执行顺序:

     1 @Test
     2 public void testSDU() {
     3     //1. 获取Session
     4     Session session = HbnUtils.getSession();
     5     try {
     6         //2. 开启事务
     7         session.beginTransaction();
     8         //3. 操作
     9         //删除
    10         Student student = session.get(Student.class, 2);
    11         session.delete(student);
    12         session.flush();  //添加一个刷新点
    13         //修改
    14         Student student2 = session.get(Student.class, 7);
    15         student2.setName("王小五");
    16         session.update(student2);
    17         //添加
    18         Student student3 = new Student("赵晓刘", 26, 96.5);
    19         session.save(student3);
    20         //4. 事务提交
    21         session.getTransaction().commit();
    22     } catch (Exception e) {
    23         e.printStackTrace();
    24         //5. 事务回滚
    25         session.getTransaction().rollback();
    26     }
    27 }

        注意:底层执行的顺序是,先执行两次查询操作,再依次执行增、改、删。(忽略代码中的sessio.flush())

           如果加入了sessio.flush(),则刷新点之前的操作先执行完,再执行刷新点之后的操作。

  • 相关阅读:
    Git工具简介
    Windows10搭建开发环境----Maven工具安装
    SpringBoot----01.SpringBoot基本配置
    创建一个SpringBoot项目
    软件工程----02. 需求分析
    软件工程----01. 软件工程简介
    JavaSE----11.Java 内部类
    JavaSE----10.Java 面向对象
    JavaSE----09.Java 数组
    前端面试总结
  • 原文地址:https://www.cnblogs.com/qjjazry/p/6285341.html
Copyright © 2020-2023  润新知