Hibernate框架学习之增删改查

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的学习之路还在继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值