Hibernate持久化对象

本文详细阐述了Hibernate持久化类的概念及其规范编写,包括SessionFactory的创建过程、持久化对象的操作流程(如增加、查询、删除和修改数据),并深入解析了持久化对象在不同状态下的解释与作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

持久化类

持久化类只是一个普通的类,并没有特殊的功能,也就是说它不依赖与任何对象,又被成为POJO类。Hibernate持久化类编写遵循一定的规范,创建时需要注意一下几点:

(1)声明一个默认的无参构造方法;

(2)类的声明都是非final类型的;

(3)拥有一个标识属性;

(4)为属性声明访问其,即get和set方法。

对于持久化类和数据库表之间的映射,可以使用xml或者annotation的方式进行配置。


1、SessionFactory的创建过程

Hibernate通过Configuration类加载Hibernate配置信息,主要通过Configuration对象的configure()方法来实现。默认情况下,Hibernate加载classpath目录下的”hibernate.cfg.xml“文件。

Configuration cfg=new Configuration.configure();

加载完毕后通过Configuration对象的buildSessionFactory()方法创建SessionFactory对象。

SessionFactory sessionFactory=cfg.buildSessionFactory();


持久化对象

Hibernate框架对JDBC作了轻量级的封装,使用Hibernate对数据进行操作时,不必再写繁琐的JDBC代码,而是完全以面向对象的思维方式,通过Session接口对数据进行增、删、改、查操作。但要注意Hibernate对事务的控制。

                  

                             图1:Hibernate持久化对象流程

1、增加数据

使用Session接口的save()方法。

语法:public Serializable save(Object obj) throws HibernateException;

例子:sessioin.save(user);

实体状态解释:在执行save()方法之前,首先创建User对象user,并对其属性赋值。此时user处于Transient(瞬时)状态,并没有在Session的管理之中;当提交事务后,user处于Persistent(持久)状态,已经在Session的管理之中,且数据库中存在与之匹配的数据;当Session关闭后,user脱离Session的管理,处于Detached(托管)状态。


2、查询数据

使用Session接口的get()和load()方法。

两者区别:get()返回的实际对象;load()返回对象的代理,只有在被调用的时候,Hibernate才会发出SQL语句去 查询对象。

语法:public Object get(Class entityClass,Serializable id) throws HibernateException;

          public Object load(Class entityClass,Serializable id) throws HibernateException;

例子:User user=(User)session.get(User.class,new Integer(1));

         User user=(User)session.load(User.class,new Integer(1));

解释:当调用get()方法时,Hibernate就会发出SQL语句进行查询;当调用load()方法时,Hibernate并不会立刻发出SQL语句进行查询,只有在引用对象时才会发出SQL语句。


3、删除数据

使用Session接口的delete()方法

语法:public void delete(Object obj) throws HibernateException;

例子:User user=(User)session.load(User.class,new Integer(1));

       sessioin.delete(user);

解释:在删除操作之前,程序首先加载User对象user,使其处于Persistent(持久)对象,然后再进行删除操作。所以,运行程序,Hibernate将发出两条语句。


4、修改数据

分为两种情况:

(1)自动更新、当对象处于Persistent(持久)状态时,对于它所发出任何更新操作,Hibernate在更新缓存时都将对其进行自动更新。

自动更新的方法与删除数据相似,在操作之前都要先加载数据,因为要修改的数据并没有处于Session管理之内。当通过load()、get()加载数据后,持久化对象遍处于Session的管理之内,即处于持久状态,在进行数据修改时,Hibernate将自动对数据进行更新操作。

例子:User user=(User)session.load(User.class,new Integer(1));

       user.setName("Jack");

   //下面即可以提交事务

解释:对于Persistent(持久)状态的对象,Hibernate在更新缓存时将对数据进行对比,当对象发生变化时,Hibernate将更新数据。

(2)手动更新

使用Session接口的update()或者saveOrUpdate();

语法:public void update(Object obj) throws HibernateException;

例子:User user=new User();

user.set...

session.update(user);

解释:由于程序手动创建Detached状态的User对象,当更新数据时,对于持久化对象中没有值的属性也将会同步到数据库中。对没有设置属性值的,数据表将会设置为空,所以应该谨慎!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值