• Hibernate 持久化操作使用


    为工程准备了环境后,就可以通过Hibernate API操纵数据库。Hibernate内部也是采用JDBC来访问数据库的。下面两张图,来看一下JDBC API和Hibernate API两种方式是怎样来访问数据库的

    使用Hibernate操作数据库包括7个步骤:

    (1)读取并解析配置文件

    Configueation conf=new Configueation ().configure();

    (2)读取并解析映射文件,创建SessionFactory对象。

    SessionFactory sf=conf.buildSessionFactory();

    (3)打开Session

    Session session=sf.openSession();//或者使用 sf.getCurrentSession();

    (4)开始一个事务(增删改操作必须,查询操作可选)

    Transaction tx=session.beginTransaction();

    (5)数据库操作

    session.save(sure);//保存操作

    (6)结束事务

    tx.commint();//提交事务

    tx.rollback();//回滚事务

    (7)关闭 session

    session.close();

    使用Hibernate实现按主键查询

    在进行修改和删除操作时,应先加载对象,然后再执行修改或删除操作。Hibernate提供了两种方法按照主键加载对象:get()load()方法。

    Object get(Class clazz,Serializable id).

    Object load(Class theClass,Serializable id).

    虽然两个方法都能够加载对象,但他们是有区别的,下面通过代码演示:

    get()方法加载 示例:

    //测试
    public class test {
        SessionFactory sf=null;
        Session sess=null;
        Transaction tx=null;
        Configuration conf=null;
        dept dt=null;
    //查询
        public void index(){
            try {
                
    //读取配置文件
                conf=new Configuration().configure();
    //创建sessionfactory
                sf=conf.buildSessionFactory();
    //打开seccion
                sess=sf.openSession();
    //加载数据操作
                dept dt=(dept)sess.get(dept.class,10);
    //输出数据
                System.out.println(dt.getDeptno());            
                            
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();            
            }finally{
    //关闭session
                sess.close();                    
            }
        }
    }

    其中,使用get()方法查询主键为10的信息,如果表中没有主键为10的数据,get()方法返回的是null。

    load()方法加载 示例:

    //测试
    public class test {
        SessionFactory sf=null;
        Session sess=null;
        Transaction tx=null;
        Configuration conf=null;
        dept dt=null;
    //查询
        public void index(){
            try {
                
    //读取配置文件
                conf=new Configuration().configure();
    //创建sessionfactory
                sf=conf.buildSessionFactory();
    //打开seccion
                sess=sf.openSession();
    //加载数据操作
                dept dt=(dept)sess.load(dept.class,10);
    //输出数据
                System.out.println(dt.getDeptno());            
                            
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();            
            }finally{
    //关闭session
                sess.close();                    
            }
        }
    }

    是的,没看错,代码一样,唯一不同的是此代码是使用load()方法按主键查询的,而当数据表中没有主键为10的数据时,系统运行到dt.getDeptno()时会抛出异常。

    使用Hibernate实现数据库的增删改操作

    增加操作代码示例

    //使用hibernate实现增加操作
        public void add(){
            dept dt=null;
            Configuration conf=null;
            SessionFactory sessionfactory=null;
            Session session=null;
            Transaction tx=null;
            try {
                //读取配置文件
                conf=new Configuration().configure();
                //创建SessionFactory
                sessionfactory=conf.buildSessionFactory();
                //打开session
                session=sessionfactory.openSession();
                //开始一个事务
                tx=session.beginTransaction();
                //持久化操作
                dt=new dept();
                dt.setDeptno(5);
                dt.setDname("wxn");
                dt.setDpwd("123");
                session.save(dt);
                //提交事务
                tx.commit();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }finally{
                session.close();
            }
        }
        

    这时候刷新数据库表,就可以看到插入的数据:

    下面是如何使用Hibernate修改和删除数据。对于Hibernate这种OMR工具,操作都是针对对象的。要修改和删除数据,首先要获得数据,然后在进行修改和删除数据。

     修改操作代码示例:

    //使用hibernate实现修改操作
        public void update(){
            try {
                //读取配置文件
                conf=new Configuration().configure();
                //创建SessionFactory
                sessionfactory=conf.buildSessionFactory();
                //打开session
                session=sessionfactory.openSession();
                //开始一个事务
                tx=session.beginTransaction();
                //持久化操作,获得对象
                //注意强制类型转换
                dt=(dept)session.load(dept.class, 5);
                //更改数据
                dt.setDname("lwx");
                //提交事务
                tx.commit();    
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }finally{
                session.close();
            }

    在使用Hibenate修改数据时,首先要加载对象,然后修改对象的属性,最后提交事务。Hibernate会生成并执行最该的SQL语句。

    与修改数据类似,删除时也要先加载数据。在使用Hibernate编写持久化代码时,业务不需要再有数据库表,字段等概念。从面向业务领域对象的角度,要删除的是某个业务对象。以面向对象的方式编写代码是Hibernate持久化操作接口设计的一个理念。

    删除操作代码示例:

    //使用hibernate实现删除操作
                public void delete(){
                    try {
                        conf=new Configuration().configure();
                        sessionfactory=conf.buildSessionFactory();
                        session=sessionfactory.openSession();
                        tx=session.beginTransaction();
                        dt=(dept)session.load(dept.class, 5);
                        session.delete(dt);    
                        //提交事务
                        tx.commit();
                    }  catch (Exception e) {
                        // TODO: handle exception
                        e.printStackTrace();
                    }finally{
                        session.close();
                    }
                }

    这时候数据库表中id为5的信息已被删除。

    需要注意的是:增删改操作一定要在事务环境中完成。

  • 相关阅读:
    家庭记账本(七+每周总结)
    家庭记账本(六)
    家庭记账本(五)
    家庭记账本(四)
    家庭记账本(三)
    家庭记账本(二)
    家庭记账本(一)
    2021.2.14(每周总结)
    2021.2.13
    文件上传时报错in a frame because it set 'X-Frame-Options' to 'deny'.
  • 原文地址:https://www.cnblogs.com/3sanrenyou/p/8656110.html
Copyright © 2020-2023  润新知