Hibernate框架学习之增删改查

作者: 颜洛滨 | 来源:发表于2017-04-06 17:21 被阅读355次

    Hibernate框架学习之增删改查

    前言

    上一小节我们建立一个基于Maven的Hibernate工程,并且完成基本的配置,粗略地了解了Hibernate,接下来这一小节,我们接着上一小节的内容,利用Hibernate来完成简单的增上改查。

    封装工具类

    为了操作的方面,首先先对Hibernate的基本操作进行一个封装,这样可以提高开发的效率,减少重复代码,封装过程如下所示:

    1. 新建一个包,命名为Utils

    2. 新建一个类,命名为HibernateUtils

    3. 代码抽取

         // 获取Hibernate的配置对象
              Configuration configuration = new Configuration().configure();
              // 建立SessionFactory
              SessionFactory sessionFactory = configuration.buildSessionFactory();
              // 打开session
              Session session = sessionFactory.openSession();
      
              // 所要添加到数据库的学生对象
              Students students = new Students();
              students.setAge(22);
              students.setName("xuhuanfeng");
      
              // 开启事务
              Transaction ts = session.beginTransaction();
              // 将数据添加到数据库
              session.save(students);
              // 提交事务
              ts.commit();
      
              // 关闭对应的连接
              session.close();
              sessionFactory.close();
      
      

      上面的代码是上一小节中使用到的代码,从代码中可以看到,前面几行代码都是重复性,也就是说,每次我们需要获得一个Session对象的时候,都需要这些代码,所以将其抽取出来,形成工具类。

    4. 代码封装

      /**
       * Hibernate 工具类
       * Created by xuhuanfeng on 2017-04-06.
       */
      public class HibernateUtils {
      
          private static SessionFactory sessionFactory;
      
          //私有化构造器
          private HibernateUtils(){}
      
          static {
              Configuration configuration = new Configuration().configure();
              sessionFactory = configuration.buildSessionFactory();
          }
          
          // 获得Session对象
          public static Session openSession(){
              return sessionFactory.openSession();
          }
      
      }
      

    增加操作

    封装好对应的工具类之后,我们就可以开始增删改查之旅了,首先是增加记录。

    增加记录主要的使用到的方法是save方法,这个在上一小节中已经了解过了,具体的操作代码如下所示

        // 增加一个记录
        @Test
        public void testCreate(){
    
            Session session = HibernateUtils.openSession();
    
            // 所要添加到数据库的学生对象
            Students students = new Students();
            students.setAge(30);
            students.setName("tom");
    
            // 开启事务
            Transaction ts = session.beginTransaction();
            // 将数据添加到数据库
            session.save(students);
            // 提交事务
            ts.commit();
    
            // 关闭对应的连接
            session.close();
        }
    
    

    需要注意的是,这里的事务是需要开启的,save方法本质上并没有将数据保存在数据库中,只有当事务commit了之后才会同步到数据库中。

    运行之后就可以观察到,对应的记录已经添加到数据库中了。

    查询操作

    接下来是查询操作,主要分为查询单一记录以及查询满足条件的所有记录,查询操作是一个比较复杂的操作,这里只进行简单的单表查询,其他的查询在后面的小节中。

    • 单一记录查询

      单一记录主要是通过主键来获取对应的记录,也就是通过配置了id的属性来获取记录,使用get方法即可。

          // 测试查询
          @Test
          public void testQuery(){
      
              Session session = HibernateUtils.openSession();
              // 获取指定id的记录,这里的id指的是在元数据中配置<id>所对应的元素
              Students students = session.get(Students.class, 1);
              System.out.println(students);
              session.close();
          }
      
      

      Hibernate中同时还提供另外一种获取单一记录的方式,可以使用load方法,两种方法的操作基本一样,如下所示

          // 测试查询
          @Test
          public void testQuery(){
      
              Session session = HibernateUtils.openSession();
              // 获取指定id的记录,这里的id指的是在元数据中配置<id>所对应的元素
              Students students = session.load(Students.class,1);
              System.out.println(students);
              session.close();
          }
      
      

      这两种方式的区别在于,get方法在查询的时候就直接返回了所查询记录的全部内容,而load方法只是返回了具有该主键的对象,只有当使用到该对象的时候,才会去完整地加载该对象,也就是懒操作/ 延迟操作。测试该效果的方式非常简单,只需要将load代码中的session.close(); 与输出的代码交换位置,就可以看到(此时会抛出错误,具体内容为org.hibernate.LazyInitializationException: could not initialize proxy - no Session 具体原因在以后进行分析)

    • 多记录查询

      多记录查询用于查询满足某一条件的所有结果,不过由于所记录查询会涉及到一些HQL的内容,所以这里先不介绍,后面会有一个小节专门讲解Hibernate的所有的查询方式以及各自的特点。

    修改操作

    修改操作同样有单一的修改操作以及复杂的修改操作,这里只演示简单的修改单一记录的操作。

    在Hibernate中,一个比较简单的修改操作是,将该记录取出,然后修改该记录,然后进行更新,具体操作如下所示

        // 修改操作
        @Test
        public void testUpdate(){
            Session session = HibernateUtils.openSession();
            // 获取id为1的学生
            Students students = session.get(Students.class, 1);
            students.setName("jack"); //将名字修改为jack
            students.setAge(33); // 将年龄修改为33
    
            Transaction ts = session.beginTransaction();
            session.update(students); // 更新该记录
            ts.commit();
            session.close();
        }
    
    

    查看数据库中的数据就可以发现,id为1的学生的姓名以及年龄已经更改了。

    删除操作

    删除操作同上,也只演示简单的删除单一记录的操作。

    在Hibernate中,最简单的删除操作是指定一个对象的id,并且删除该对象即可,如下所示

        // 删除操作
        @Test
        public void testDelete(){
            Session session = HibernateUtils.openSession();
    
            // 删除id为1的学生
            Students students = new Students();
            students.setId(1);
    
            Transaction ts = session.beginTransaction();
            session.delete(students); // 删除该记录
            ts.commit();
            session.close();
        }
    
    

    查看数据库中的数据就可以发现,id为1的学生的记录已经被删除了。

    总结

    本小节主要对Hibernate的操作进行一个简单的封装,并且使用Hibernate完成最简单的增删改查操作,Hibernate的学习之路还在继续。

    相关文章

      网友评论

        本文标题:Hibernate框架学习之增删改查

        本文链接:https://www.haomeiwen.com/subject/trmqattx.html