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的信息已被删除。

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

原文地址:https://www.cnblogs.com/3sanrenyou/p/8656110.html