`
uule
  • 浏览: 6351925 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Hibernate实现原理 与 缺点

 
阅读更多

 

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的优缺点

    ### JPA与Hibernate的优缺点分析 #### Java Persistence API (JPA) Java Persistence API(简称JPA)是Java平台提供的一套对象关系映射(ORM)标准,它旨在为Java应用提供一种统一、灵活的数据持久化解决方案。JPA...

    struts+hibernate实现的网络购物系统.rar

    在毕业设计中,选择"struts+hibernate实现的网络购物系统"作为项目,可以深入理解和掌握这两种框架的原理和应用。同时,撰写相关论文时,可以从以下几个方面进行探讨: - Struts和Hibernate的整合,如何在实际项目中...

    struts spring hibernate 优缺点分析.docx

    6. **JDBC和ORM支持**:与Hibernate等O/R Mapping工具集成,简化数据库访问。 7. **JNDI抽象**:提供对JNDI服务的抽象,便于切换服务实现。 8. **事务管理**:通过AOP实现声明式事务管理,简化事务控制。 9. **邮件...

    看我山寨版 hibernate 简单实现 一

    此外,作者可能会分享遇到的问题、解决方案以及与标准 Hibernate 框架相比的优缺点。 【标签】"源码 工具" 这里的“源码”标签暗示文章会涉及代码实现,读者可以期待看到作者是如何编写和组织代码的,以实现 ORM ...

    Hibernate Recipes

    2. **商品信息管理**:使用Hibernate实现商品信息的增删改查操作。 3. **订单管理系统**:利用Hibernate处理订单数据,支持订单创建、更新和查询等功能。 4. **权限控制模块**:结合Hibernate的查询能力实现用户的...

    hibernate面试题大全

    - **缺点**:如果应用程序试图访问一个已经游离状态的对象的代理实例,而该实例在持久化状态时未被初始化,那么将会抛出异常,因为游离状态下的代理实例不再与Session关联,无法通过Hibernate进行加载。 #### 3. ...

    hibernate3 chm 格式 中文

    8. **Criteria与HQL的比较**:对比两者在查询性能和灵活性上的优缺点。 9. **关联映射**:涵盖一对一、一对多、多对一、多对多等各种关联关系的映射实现。 10. **缓存机制**:解析第二级缓存和查询缓存的工作原理...

    Hibernate笔记完整版

    2. Hibernate框架:通过XML配置文件定义数据库连接、方言等信息,实现对象与数据库表的映射。 3. Configuration:读取配置文件(默认为hibernate.cfg.xml)并生成SessionFactory,SessionFactory是线程安全的,负责...

    孙卫琴hibernate sourcecode6

    同时,深入分析了Hibernate的缓存机制,如第一级缓存(Session缓存)和第二级缓存(SessionFactory缓存),以及查询缓存的实现原理。此外,还涉及了关联加载优化(Eager与Lazy Loading)和分页查询的最佳实践。 ...

    Hibernate知识整理.doc

    【Hibernate 知识整理】 ...通过理解其工作原理、核心类和与其他数据库访问技术的比较,可以更好地利用 Hibernate 提升开发效率和代码质量。同时,掌握 ORM 和日志管理的基本概念,能进一步提升开发能力。

    北大青鸟Hibernate课件

    10. Hibernate与Spring整合:讲解如何在Spring框架中使用Hibernate,实现声明式事务管理,提高代码的可维护性。 这套课件将帮助学员系统地掌握Hibernate框架,为开发高效、稳定的Java企业级应用打下坚实基础。通过...

    SpringMVC与hibernate整合12实例

    11. SpringMVC与Struts2对比:分析两种MVC框架的优缺点,理解其工作原理差异。 12. 性能优化:探讨缓存机制,如二级缓存的使用,提高系统性能。 以上实例涵盖了SpringMVC和Hibernate整合的各个方面,对于初学者和...

    hibernate 级联查询

    "common_ssh"这个文件名可能是某种归档或项目名,与SSH(Secure Shell)协议有关,但在这个上下文中,它与Hibernate级联查询的主题没有直接联系。可能是其他项目的通用配置文件或者库,或者仅仅是上传资料时的一个...

    hibernate教学(student)

    #### Hibernate 的诞生与背景 Hibernate 是一款基于 Java 的开源对象关系映射 (ORM) 框架,旨在简化 Java 应用程序与数据库交互的过程。随着 J2EE 架构的发展,软件工程实践中出现了多层体系结构的需求,其中数据...

    JAVA-hibernate笔记

    通过创建一个简单的Java项目,引入Hibernate库,并编写一个实体类与数据库表对应,你会了解如何初始化SessionFactory,创建Session,以及执行基本的保存和查询操作。 2. **Hibernate原理模拟 - O/R Mapping** O/R ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     21.5 利用Hibernate的版本控制来实现乐观锁  21.5.1 使用元素  21.5.2 使用元素  21.5.3 对游离对象进行版本检查  21.5.4 强制更新版本  21.6 实现乐观锁的其他方法  21.7 小结  21.8 思考题 第22章 管理...

    Hibernate3培训.pdf

    综合以上内容,Hibernate3培训旨在让学员快速掌握Hibernate框架的使用,通过理论与实践相结合的方式,深入理解持久层的设计和实现,提高数据持久化的开发效率和质量。培训内容覆盖了Hibernate的架构组成、核心组件的...

Global site tag (gtag.js) - Google Analytics