Hibernate和Mybatis
【Hibernate和Mybatis】是两种常用的Java持久层框架,它们主要负责在业务逻辑层处理数据库的持久化操作,简化了开发者对数据库的访问和管理。 **Hibernate原理:** 1. Hibernate通过`Configuration().configure();`读取并解析`hibernate.cfg.xml`配置文件,获取数据库连接等信息。 2. `hibernate.cfg.xml`中的`<mapping resource="com/xx/User.hbm.xml"/>`定义了对象-关系映射,用于将Java对象映射到数据库表。 3. 使用配置信息构建`SessionFactory`,它是Hibernate的核心,负责生成Session对象。 4. 通过`sessionFactory.openSession();`打开Session,Session是与数据库交互的主要接口。 5. `session.beginTransaction();`启动数据库事务。 6. 进行持久化操作,如保存、更新、删除对象等。 7. `session.getTransaction().commit();`提交事务,确保数据的一致性。 8. 关闭Session和SessionFactory,释放资源。 **为什么使用Hibernate:** 1. Hibernate封装了JDBC,避免了大量重复的数据库访问代码。 2. 它是一个ORM(对象关系映射)框架,简化了DAO层的编程。 3. Hibernate使用Java反射,实现对象与数据库之间的透明转换。 4. 性能优良,属于轻量级框架,适应各种关系数据库,支持复杂的数据关系映射。 **Hibernate的延迟加载:** - `get`方法会先检查Session缓存,然后二级缓存,最后查询数据库。如果没有找到对应数据,则返回null。 - `load`方法根据类级别的lazy属性,默认为true,会返回一个代理对象。首次尝试访问实体属性时,才会去查询二级缓存和数据库。如果找不到记录,抛出`ObjectNotFoundException`。与`get`不同,`load`在未找到记录时不会返回null,而是抛出异常。 **Hibernate的缓存机制:** 1. **一级缓存**(Session缓存):每个Session都有自己的缓存,生命周期与事务或应用事务一致。每个持久化对象有唯一OID,减少对数据库的直接访问。 2. **二级缓存**(SessionFactory缓存):可选的,跨Session共享,可能涉及并发问题,需要配置并发策略。它提供了更广泛的缓存范围,但需要处理事务隔离。 Mybatis相对Hibernate更加轻量级,允许开发者直接编写SQL语句,具有更高的灵活性。它通过XML或注解配置映射SQL和Java对象,提供灵活的控制权,但在自动化和复杂关系映射方面不及Hibernate。 综上,Hibernate和Mybatis各有优势,选择取决于项目需求,如对性能、灵活性、开发效率的考量。在需要高度定制SQL和简化事务管理时,Mybatis可能是更好的选择;而在需要自动映射和事务处理,且不介意额外的内存开销时,Hibernate则是理想之选。
剩余17页未读,继续阅读
- 粉丝: 47
- 资源: 28
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助