Java成神之路(二十六)Hibernate

本文介绍了ORM映射技术,探讨了如何解决面向对象编程与关系型数据库间的不匹配问题,并对比了Hibernate与MyBatis框架的特点及适用场景。

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

一:Hibernate

  1. 什么是OR Mapping
    解决面向对象与关系型数据库存在的互不匹配的现象技术。通过使用描述对象和数据库之间的映射的元数据,将对象持久化到关系数据库。将数据库中的数据模拟成对象,同时保留他们的相关性。
    将对象模型(实体类)的东西存入关系模型。
    实体类对象关系型数据库的一个表。
    实体类中的一个属性对应数据库的列
    实体类的一个实例对象一条记录。
  2. 懒加载
    延时加载,需要的时候在加载。默认只返回该对象的代理对象,使用其属性时才会再一次查询。Lazy三个值:true,flase,proxy(默认)。
    当要查询一个对象时,会生成代理,只有查询对象的属性时,才会进行对数据库的查询。
    需要注意的是session关闭,则会断开数据库的连接,此时在访问数据库字表的数据,由于其是存在数据库的缓存中,则会抛出异常。
  3. 缓存
    对物理数据库的复制,提高性能。
    一级缓存:内置的Seesion缓存, 不可以缺少的缓存机制,持久化的实例都会具有唯一的OID,当Seesion关闭,则一级缓存就会被清空。
    二级缓存:Seesion Factory缓存,生命周期同应用程序的整个过程相对应,会出现并发问题,有线程安全的隐患。所以适合放在二级缓存的数据中包括:很少被修改的,不重要的,不会被并发访问的,常量的。不适合的:经常修改,财务类不允许并发的。共享的。
    查询应用缓存:根据ID,首先查一级缓存,其次查二级缓存,后查数据库。
  4. H与Ibatis与M区别
    H:实现了POJO和数据库表之间的映射,只需要定义好POJO的映射,不需要理解SQL语句。更良好的映射机制,不需要手写SQL。调优方案包括:合理的缓存,使用lazy,合理的Seesion管理,批量抓取,设定批处理参数。对数据库的依赖比较弱。在对象管理中更多关注对象的状态。抓取自定义。二级缓存比较安全,出现脏数据,会抛出异常。
    M:通过配置文件,将SQL所需的参数,以及返回的结果映射到指定的POJO上,复杂的SQL需要编写。调优方案包括:详细的SQL语句优化,缓存机制,Seeison管理。对数据库的依赖比较强。在对象管理中需要自定义配置。抓取策略为全局,强大的二级缓存机制,但需要注意使用,可能引入脏数据。
    相同点:都可以通过SeesionFactoryBuider由配置文件生成SeesionFactory,在由其生成Session,由Session负责执行事务;都支持JDBC和JTA事务。
    不同点:M可进行更详细的SQL优化,可以减少查询对象,更容易。H:DAO层开发更简单,数据库移植性比较高,更好的二级缓存机制,可以有第三方缓存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值