Hibernate-简单完成crud

这个算是接着上一篇写的了,昨天打游戏去了,打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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值