当前位置: 首页 > news >正文

Hibernate相关概念及序列化和持久化的区别

hibernate是一种ORM(object relation mapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中。

hibernate要做的事,就是让对象投影到关系数据库中,然后实施持久化。其具体实现:建立对象到关系数据库的映射.

然后在通过hibernate.cfg.xml中配置到数据库的联接,并读取User.hbm.xml文件,就建立了映射关系了。

当需要持久化对象时,需要使用到hibernate的session对象:
持久化代码:session.save(new User());  //从内存到数据库,瞬时态到持久态
看到了吗?我们只需要操作对象就行了,也就是说,编程的人不需要看到数据库了,他只需要直接操作对象就行了。
当我们采用ORM框架之后,应用程序不再直接访问底层的数据库,而是以面向对象的方式来操作持久化对象(例如创建、修改、删除等),而ORM框架则将这些面向对象操作转换成底层的SQL操作。

hibernate 如何实现持久化?
答:
1.hibernate是一种ORM(object relation mapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中,即进行持久化的框架。

2.hibernate进行持久化首先要建立对象到关系数据库的映射。

映射操作通过创建mapping实体类+注解实现

3.hibernate根据定义的映射规则(session.save(new User()); )将对象持久化(保存到)数据库存中。这就实现了对象持久化。

二. 序列化和持久化的区别
序列化也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象。需要实现2个接口:
voidSerialize(Streamstream,object o) 把对象序列化到流中
object Deserialize(Stream stream) 把流反序列化成对象

序列化和持久化很相似,有些人甚至混为一谈,其实还是有区别的,

序列化是为了解决对象的传输问题,传输可以在线程之间、进程之间、内存外存之间、主机之间进行。我之所以在这里提到序列化,是因为我们可以利用序列化来辅助持久化,可以说凡是可以持久化的对象都可以序列化,因为序列化相对容易一些(也不是很容易),所以主流的软件基础设施,比如.net和java,已经把序列化的框架完成了。

持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在的数据库中,或者存储在磁盘文件中、XML数据文件中等等。持久化是将程序数据在持久状态和瞬时状态间转换的机制。 JDBC就是一种持久化机制。文件IO也是一种持久化机制。
持久化方案可以分为关系数据库方案、文件方案、对象数据库方案、xml数据库方案,现今主流的持久化方案是关系数据库方案,关系数据库方案不仅解决了并发的问题,更重要的是,关系数据库还提供了持久化服务之外的价值:统计分析功能。刚才我说到,凡是可以序列化的对象都可以持久化,极端的说,我们可以只建立一个表Object(OID,Bytes),但基本上没有人这么做,因为一旦这样,我们就失去了关系数据库额外的统计分析功能。

首先要说的是,Hibernate中ORM里对应的映射文件BEAN,必须实现序列化.因为BEAN里的数据需要存入数据库(要转化为二进制保存),进行存取工作.
JAVA类的数据 ,如果要进行相关的存储工作(如写文件,网络传输,写数据库等),那么这个数据的类 就必须实现序列化接口 (java.io.Serializable).
序列化 : 把对象转换 为二进制数据(如网络传输,存储数据库等),必须实现序列化接口 (java.io.Serializable).
持久化 : 把对象保存 在介质上(如写文件,读文件不是), 没有接口实现,一般指方法调用.
对象只有在序列化之后才能进行持久化存储,从持久化存储介质加载的数据通过反序列化转变成运行时对象。

说这么多其实就是为了下边代码的使用,上代码:

PubExtra 映射类实现序列化接口、映射表字段

 

 

@Entity
@Table(name = "pub_extra",schema = SchemaConst.DLMIS)
public class PubExtra implements java.io.Serializable{
    //表的主键
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(strategy="assigned",name="generator")
    @Column(name="rec_id",unique=true,nullable = false)
    private Long recID;   
    @Column(name = "unique_id",nullable = false)
    private String uniqueID ;
    .............
    .............
}

 

 

 

转载于:https://www.cnblogs.com/zhaoyanhaoBlog/p/11327585.html

相关文章:

  • Oracle常用指令
  • leetcode 25. Reverse Nodes in k-Group
  • python异常处理
  • 极客时间-左耳听风-程序员攻略-UI/UX设计
  • 贪心训练题
  • idea新建maven项目后生成web.xml方法和添加到tomcat方法
  • db mysql / mysql cluster 5.7.19 / reboot / devops
  • JAVA:用户从键盘只能输入整数,程序输出这些整数的乘积。
  • liquibase使用教程
  • Python netaddr CIDR转换
  • 定制化扫描工具
  • 内网远程溢出漏洞利用
  • github proxy
  • D-Link系列路由器漏洞挖掘
  • 区块链漏洞平台的漏洞信息
  • Babel配置的不完全指南
  • CSS3 变换
  • DOM的那些事
  • Go 语言编译器的 //go: 详解
  • java8-模拟hadoop
  • Java深入 - 深入理解Java集合
  • JSDuck 与 AngularJS 融合技巧
  • Spring框架之我见(三)——IOC、AOP
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 对象引论
  • 浏览器缓存机制分析
  • 前端知识点整理(待续)
  • 我有几个粽子,和一个故事
  • Prometheus VS InfluxDB
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (13)Hive调优——动态分区导致的小文件问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (力扣)1314.矩阵区域和
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)创业家杂志:UCWEB天使第一步
  • (转)关于多人操作数据的处理策略
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)树状数组
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET业务框架的构建
  • @angular/cli项目构建--http(2)
  • @Autowired和@Resource的区别
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [20170728]oracle保留字.txt
  • [Angularjs]ng-select和ng-options
  • [bzoj2957]楼房重建
  • [C#基础]说说lock到底锁谁?