hibernate04 持久化类和持久化对象

一、持久化
所谓持久化就是将内存中的数据永久的存储到关系型数据库中

二、持久化类
1、持久化类的定义
一个java类与数据库中的某个表建立了映射关系,那么这个java类就是持久化类

2、持久化类的编写规则
①、持久化类需要提供公共无参的构造方法
因为 Hibernate 中需要通过反射来生成持久化类的实例

②、持久化类的属性需要定义为私有的,并提供get、set方法
因为 HIbernate 的底层会对查询的数据进行封装(属性的赋取值即调用get、set方法)

③、持久化类要有一个唯一标志OID与表的主键对应
Hibernate 中需要通过这个唯一标志OID来区分内存中是否是同一个持久化对象。

④、持久化类尽量不使用final来修饰
因为Hibernate中有延迟加载的机制,该机制中会产生代理对象,Hibernate产生代理对象使用的是字节码的增强技术完成的,其实就是产生了当前类的一个子类对象来实现的。如果使用了final,则不能产生子类,从而就不会产生代理对象,那么HIbernate的延迟加载策略就会失效。

⑤、持久化类的属性要尽量使用包装类的类型
使用基本类型的包装类型一个好处是,可以区分数据是没有传值默认生成的,还是本身就是这个默认值,比如一个表示数量的整数类型,如果使用int,没有传值时, 数据库中会出现0,如果使用Integer,没有传值时,数据库中是null。

三、持久化对象
1、持久化对象的三种状态:
①、瞬时(临时)状态:就一个普通的对象,既没有关联Session,也没有OID(持久化标识),与数据库中的数据无任何关联。
②、持久化状态:对象关联了Session,并且具有一个OID,在数据库中有对应的记录。
③、游离状态:当某个持久化状态的实例跟Session的关联被关闭的时候就变成了托管状态。游离状态对象存在OID,并且仍然跟数据库中的数据存在关联,但是失去了与当前Session的关联,游离状态对象发生改变时不能被Hibernate检测到。

public void test_01(){
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory= configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        Customer customer = new Customer();//此时只是一个普通的对象,既没有关联session,也没有OID,所以是瞬时状态

        customer = session.get(Customer.class, 1L);//此时通过get方法,让customer既关联了session,也拥有了OID(1L),与数据库中的某条记录想对应,所以是持久化状态

        transaction.commit();
        session.close();//此时session关闭,customer失去了与session的关联,但是仍然拥有OID,所以是游离(脱管)状态
    }

状态流转图:
这里写图片描述

2、持久化对象能够自动更新数据库

public void test_02(){
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory= configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        Customer customer = new Customer();

        customer = session.get(Customer.class, 1L);

        customer.setCustName("AAAA");

        transaction.commit();//提交之前并没有执行session.update()操作,但是会将更改的数据同步到数据库中
        session.close();
    }
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值