Hibernate-简单完成crud

来源:互联网 发布:说话技巧 叶名琛 知乎 编辑:程序博客网 时间:2024/05/18 02:05
这个算是接着上一篇写的了,昨天打游戏去了,打hi了,就没做,这次再完善一下上篇没做玩的crud测试。首先,因为crud的每个方法都需要开启session会话,不如直接创建一个工具类,需要session时直接调用工具类岂不是更方便。

一.创建HibernateUtils工具类

位置:com.ht.Utils.HibernateUtil
public class HibernateUtil {    public static SessionFactory sessionFactory;    //加载主配置文件,创建session工厂    public static SessionFactory getSessionFactory(){        if (sessionFactory == null || sessionFactory.isClosed()) {            sessionFactory = new Configuration().configure().buildSessionFactory();         }        return sessionFactory;    }    //获取session    public static Session getSession() {        return  getSessionFactory().getCurrentSession();    }}

二.hibernateTest实现crud

com.ht.test.HibernateTest
i.插入数据:hibernate实现插入数据的操作基本用的就是save()方法,当然这里还有个persist()方法。不作介绍。

@Test    public void testSave() {        Session session = HibernateUtil.getSession();        try {            //1.开启事务            session.beginTransaction();            //2.执行操作            Student student = new Student("张三",20);            session.save(student);            //3.提交事务            session.getTransaction().commit();        } catch (Exception e) {            e.printStackTrace();            //4.事务回滚            session.getTransaction().rollback();        }    }

ii.删除数据

@Test    public void testDelete() {        Session session = HibernateUtil.getSession();        try {            //1.开启事务            session.beginTransaction();            //2.执行操作            Student student = new Student("张三",20);            student.setId(1);            //删除的条件是对象具有id            session.delete(student);            //3.提交事务            session.getTransaction().commit();        } catch (Exception e) {            e.printStackTrace();            //4.事务回滚            session.getTransaction().rollback();        }    }
iii:更新数据
@Test    public void testUpdate() {        Session session = HibernateUtil.getSession();        try {            //1.开启事务            session.beginTransaction();            //2.执行操作            Student student = new Student("李四",22);            student.setId(2);            session.update(student);            //3.提交事务            session.getTransaction().commit();        } catch (Exception e) {            e.printStackTrace();            //4.事务回滚            session.getTransaction().rollback();        }    }

IV:查询数据:查询数据可以有两个方法,get()和load(),今后工作面试题也可能会遇到这样的问题,问你hibernate查询的两个方法的差别.首先,将代码写出来,再看差别.

@Test    public void testGet() {        Session session = HibernateUtil.getSession();        try {            //1.开启事务            session.beginTransaction();            //2.执行操作            Student student = session.get(Student.class, 2);            System.out.println(student);            //3.提交事务            session.getTransaction().commit();        } catch (Exception e) {            e.printStackTrace();            //4.事务回滚            session.getTransaction().rollback();        }    }
@Test    public void testLoad() {        Session session = HibernateUtil.getSession();        try {            //1.开启事务            session.beginTransaction();            //2.执行操作            Student student = session.load(Student.class, 2);            System.out.println(student);            //3.提交事务            session.getTransaction().commit();        } catch (Exception e) {            e.printStackTrace();            //4.事务回滚            session.getTransaction().rollback();        }    }
这里有两个版本的说明,都粘贴出来吧./*     * get()与load()的共同点:都是根据id查询对象     * get()与load()的区别:     * get():若加载的对象不存在,则返回null     *       get方法立即检索     * load():若加载的对象不存在,则抛出异常,LazyInitializationException(懒加载异常) 异常     *        load方法延迟检索     */
  /**    *    get() VS load():    *    1).执行get方法理解调用对象    *       执行load方法,若不使用该对象,则不会立即执行查询操作,而返回一个代理对象。    *          *      get方法是立即检索,load方法是延迟检索    *2). 若数据表中没有对应的记录,并且Session没有被关闭,同时需要使用对象时    *     get方法返回null    *     load方法若不使用没问题,若需要初始化了,则抛出异常     * 3).load方法可能会抛出 LazyInitializationException(懒加载异常) 异常    *    代理对象已经关闭了session    */

v:还有个特殊的方法,saveorupdate();

@Test    public void testSaveOrUpdate() {        Session session = HibernateUtil.getSession();        try {            //1.开启事务            session.beginTransaction();            //2.执行操作            Student student = new Student("王五",22);            //student.setId(2);            //执行save()或是update()在于数据表中的id是否存在,            //如果有,则执行update(),            //如果没有,则执行save().            session.saveOrUpdate(student);            //3.提交事务            session.getTransaction().commit();        } catch (Exception e) {            e.printStackTrace();            //4.事务回滚            session.getTransaction().rollback();        }    }
0 0