Hibernate框架学习之增删改查

来源:互联网 发布:c语言复合语句定义 编辑:程序博客网 时间:2024/05/18 02:52

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