Hibernate是怎样实现呢?主要是依据反射机制。
现在以一次数据库查询操作分析Hibernate实现原理。
假设有一个用户表(tbl_user),表中字段有id,name,sex。同时有一个实体类(User)与其相对应,查询语句是: select * from User。
1.在项目启动时,Hibernate配置文件中的内容已经存储在容器中,存储着表与实体中的关系。
2.在执行select * from User 时,会根据反射机制先找到User的全路径名称,进而找到容器中User对应的配置。
3.由于配置文件中的实体属性与数据库中的字段是对应的,Hibernate会将select * from User 这个hql语句根据不同的数据库方言解析成不同的SQL语句(select * from tbl_user)。
大致过程就是这样,当然,器内部实现的具体过程是比较复杂的,在使用Hibernate进行数据库操作时,应注意级联、延迟加载、缓存的使用。
简单来说就是,利用反射原理,将实体类中的字段按照xml配置或者annotation解析成一条或者多条sql语句,然后放入数据库执行,说的简单点,就是这么个原理,但是内部实现比较复杂
原理:
1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息
3.通过config.buildSessionFactory();//创建SessionFactory
4.sessionFactory.openSession();//打开Sesssion
5.session.beginTransaction();//创建事务Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事务
8.关闭Session
9.关闭SesstionFactory
这个就是原理,不是流程。主要就是一个基于JDBC的主流持久化框架,一个优秀的ORM实现,对JDBC访问数据库的代码做了封装,很大程度上监护了DAO层的编码工作。
hibernate缺点:
总的来说,hibernate的缺点主要有以下几点:
一、由于对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL,Hibernate封装了JDBC,所以没有JDBC直接访问数据库效率高。要使用数据库的特定优化机制的时候,不适合用Hibernate
二、框架中使用ORM原则,导致配置过于复杂,一旦遇到大型项目,比如300张表以上,配置文件和内容是非常庞大的,另外,DTO满天飞,性能和维护问题随之而来
三、如果项目中各个表中关系复杂,表之间的关系很多,在很多地方把lazy都设置false,会导致数据查询和加载很慢,尤其是级联查询的时候。
四、Hibernate在批量数据处理时有弱势,对于批量的修改,删除,不适合用Hibernate,这也是ORM框架的弱点
Hibernate是ORM框架(object-relation maping对象关系映射),它是用来实现JDBC的功能,但是它不能替换JDBC,它是在JDBC基础上实现的,即Hibernate中已经把JDBC封装了,最终的代码是到HIbernate在传递到JDBC在于数据库交换,所以性能没有JDBC直接与数据库交互快
相关推荐
### JPA与Hibernate的优缺点分析 #### Java Persistence API (JPA) Java Persistence API(简称JPA)是Java平台提供的一套对象关系映射(ORM)标准,它旨在为Java应用提供一种统一、灵活的数据持久化解决方案。JPA...
在毕业设计中,选择"struts+hibernate实现的网络购物系统"作为项目,可以深入理解和掌握这两种框架的原理和应用。同时,撰写相关论文时,可以从以下几个方面进行探讨: - Struts和Hibernate的整合,如何在实际项目中...
6. **JDBC和ORM支持**:与Hibernate等O/R Mapping工具集成,简化数据库访问。 7. **JNDI抽象**:提供对JNDI服务的抽象,便于切换服务实现。 8. **事务管理**:通过AOP实现声明式事务管理,简化事务控制。 9. **邮件...
此外,作者可能会分享遇到的问题、解决方案以及与标准 Hibernate 框架相比的优缺点。 【标签】"源码 工具" 这里的“源码”标签暗示文章会涉及代码实现,读者可以期待看到作者是如何编写和组织代码的,以实现 ORM ...
2. **商品信息管理**:使用Hibernate实现商品信息的增删改查操作。 3. **订单管理系统**:利用Hibernate处理订单数据,支持订单创建、更新和查询等功能。 4. **权限控制模块**:结合Hibernate的查询能力实现用户的...
- **缺点**:如果应用程序试图访问一个已经游离状态的对象的代理实例,而该实例在持久化状态时未被初始化,那么将会抛出异常,因为游离状态下的代理实例不再与Session关联,无法通过Hibernate进行加载。 #### 3. ...
8. **Criteria与HQL的比较**:对比两者在查询性能和灵活性上的优缺点。 9. **关联映射**:涵盖一对一、一对多、多对一、多对多等各种关联关系的映射实现。 10. **缓存机制**:解析第二级缓存和查询缓存的工作原理...
2. Hibernate框架:通过XML配置文件定义数据库连接、方言等信息,实现对象与数据库表的映射。 3. Configuration:读取配置文件(默认为hibernate.cfg.xml)并生成SessionFactory,SessionFactory是线程安全的,负责...
同时,深入分析了Hibernate的缓存机制,如第一级缓存(Session缓存)和第二级缓存(SessionFactory缓存),以及查询缓存的实现原理。此外,还涉及了关联加载优化(Eager与Lazy Loading)和分页查询的最佳实践。 ...
【Hibernate 知识整理】 ...通过理解其工作原理、核心类和与其他数据库访问技术的比较,可以更好地利用 Hibernate 提升开发效率和代码质量。同时,掌握 ORM 和日志管理的基本概念,能进一步提升开发能力。
10. Hibernate与Spring整合:讲解如何在Spring框架中使用Hibernate,实现声明式事务管理,提高代码的可维护性。 这套课件将帮助学员系统地掌握Hibernate框架,为开发高效、稳定的Java企业级应用打下坚实基础。通过...
11. SpringMVC与Struts2对比:分析两种MVC框架的优缺点,理解其工作原理差异。 12. 性能优化:探讨缓存机制,如二级缓存的使用,提高系统性能。 以上实例涵盖了SpringMVC和Hibernate整合的各个方面,对于初学者和...
"common_ssh"这个文件名可能是某种归档或项目名,与SSH(Secure Shell)协议有关,但在这个上下文中,它与Hibernate级联查询的主题没有直接联系。可能是其他项目的通用配置文件或者库,或者仅仅是上传资料时的一个...
#### Hibernate 的诞生与背景 Hibernate 是一款基于 Java 的开源对象关系映射 (ORM) 框架,旨在简化 Java 应用程序与数据库交互的过程。随着 J2EE 架构的发展,软件工程实践中出现了多层体系结构的需求,其中数据...
21.5 利用Hibernate的版本控制来实现乐观锁 21.5.1 使用元素 21.5.2 使用元素 21.5.3 对游离对象进行版本检查 21.5.4 强制更新版本 21.6 实现乐观锁的其他方法 21.7 小结 21.8 思考题 第22章 管理...
综合以上内容,Hibernate3培训旨在让学员快速掌握Hibernate框架的使用,通过理论与实践相结合的方式,深入理解持久层的设计和实现,提高数据持久化的开发效率和质量。培训内容覆盖了Hibernate的架构组成、核心组件的...
在这个教程中,我们将深入学习Hibernate如何实现缓存,以提高数据访问性能。 **描述分析:** 描述中的链接指向了一个CSDN博客文章,虽然具体内容没有给出,但可以推测它提供了与Hibernate缓存相关的源码示例。这...