`
zengbo0710
  • 浏览: 417153 次
社区版块
存档分类
最新评论

SSH系列(二)--为什么要用Hibernate,给个理由先?

阅读更多
SSH中的H指的就是Hibernate ,这个已经被炒烂了的o/r mapping的开源项目,那为什么我们在项目中的和数据库交互的那块操作(说的书面点就是持久化部分)要用它了,它比我们以前用的JDBC的硬编码或是 使用了DTO(POJO),DAO这样的模式的模块又好在哪里了?(当然JDBC硬编码的做法确实比较ugly,现在这样做的也比较少了吧)

       要想说清这个,当然有很多种说法,观点也不尽一致,所以我们先来看看HIbernate具体都有些什么,我们怎么来使用它,然后再对比和分析。

        Hibernate既然是持久化的框架,干得自然是和数据库打交道的事,所以其概念和使用上应该不难,但是其文档(中文)也有200多页,可以看出其内容 还是不少(在这里向翻译文档的团队表示感谢,呵呵)。从整体上看要使用它需要两种配置文件,一个是hibernate.cfg.xml,它是与数据库连接 的配置文件(事务类型也是在其中配置的),支持普通的JDBC连接,也支持使用JNDI的数据源连接,它是放在class-path下;另一个配置文件是 xxx.hbm.xml,它是某个POJO和一个或多个数据库表的对应关系的配置文件,也即是o/r映射的配置文件,也是放在class-path下,而 且在hibernate.cfg.xml中要引入这些xxx.hbm.xml。

        我们在代码阶段要先new一个Configuration,它需要载入hibernate.cfg.xml;然后根据这个Configuration build出一个SessionFactory,注意当sessionFactory建立后,如果在改动configuration, sessionFactory不会受影响,而且sessionFactory的建立是很耗资源的,所以我们对一个数据库的应用应该只创建一个 SessionFactory。如果我们的操作要涉及多个库,我们可以配置多个hibernate.cfg.xml,从而生成多个 Configuration,进而创建多个SessionFactory。

        当得到SessionFactory后我们就可以建立Session对象了,我个人感觉Session有点像JDBC中的Connection和 Statement的混合,因为它确实是和数据库连接的一个具体实例,同时它下面有save,update等方法,可以操作数据库,所以又不单单是个 Connection,也有Statement的意思。得到了Session后,我们通过它下面的各种方法,就可以完成对对象的CRUD,那在 hibernate中对象和数据库表之间是有对应关系的,所以通过对对象的操作,hibernate自动完成对数据库表的操作,它底层也是通过JDBC的 PreparedStatement来完成的。

       但在hibernate3.x以后情况又有些不同了,在3.x中,HQL的功能加强了很多,具有了update,delete的功能,再加上 Session的find方法的取消,所以对于Query的使用越来越多,于是Session就越来越像Connection了。HQL很像传统的SQL 语言,但它们两者还是有很明显的不同,SQL面向的是二维的结构化的数据,而HQL则是面向的数据对象。

       HQL中包括简单的实体查询,对象属性的查询(相当于SQL 中的select某几个字段),分组和排序,where条件查询(注意在这里,我们为了避免sql injection问题,对于条件变量要采用现在HQL语句中用占位符的方法,再set进去,相当于PrepareStatement),联合查询 (SQL中的join) ,子查询,删除和修改。对于HQL,我们还可以在配置文件中写,然后通过代码找到,不用再代码中直接写HQL字符串。另外有一点要说明的是我们如果要调用 存储过程,则相对麻烦而且只能调用带返回结果集的存储过程,简单的做法是不用hibernate的API来做,我们可以通过Session得到 Connection对象,从而按照JDBC的方式来调用,本身hibernate并不提倡用存储过程 ,它认为存储过程和具体的DBMS有很强的耦合性。。hibernate3中还提供了一个Criteria的对象来进行查询工作,它本身只是一个查询容 器,具体的查询条件要通过Criteria.add方法来添加到对象中。不过其功能现在没有HQL强。而且在hibernate3中还提供了一个 Criteria的实现--DetachedCriteria,它可以脱离Session实例独立存在,具体的就不多说了,用到的时候看看文档吧。

       由以上的知识点我们不能看出hibernate是比较简单和容易使用的,但事实并不完全是这样,我们知道o/r mapping中,数据库表是二维的关系型数据库表,而我们的POJO是面向对象的结构(面向对象的特点有封装,继承,多态),这两者之间的映射并不是那 么简单,下面我们来看一下hibernate中比较难的那个方面。

       一个是复杂的实体映射,另一个是数据关联。

      未完,待续.........

 

分享到:
评论

相关推荐

    SSH 框架 struts-2.3.34 spring4.3.12 hibernate5.0.12

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了一种高效且强大的方式来构建企业级应用,它整合了模型-视图-控制器(MVC)设计模式、依赖注入(DI)...

    SSH应用开发-Hibernate应用入门.zip_hibernate

    SSH(Struts、Spring、Hibernate)是Java Web开发中常用的一种技术栈,其中Hibernate是一个强大的对象关系映射(ORM)框架。这篇文档将详细介绍Hibernate在应用开发中的基础使用,帮助初学者快速入门。 **SSH框架...

    SSH - SpringMVC4 + Spring4 + Hibernate4 + c3p0 + Mysql.zip

    SSH是Java开发中的一种经典架构组合,代表Spring、Struts和Hibernate这三个开源框架的结合。在本项目"SSH - SpringMVC4 + Spring4 + Hibernate4 + c3p0 + Mysql.zip"中,开发者使用了SpringMVC4作为表现层,Spring4...

    Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate

    Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate(一步一步的教你敲代码)(博客园,博客名称:Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate)

    hibernate-release-5.2.10

    Hibernate是Java平台上的一款开源对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。在SSH(Spring、Struts、Hibernate)框架中,Hibernate作为持久层的解决方案,极大地简化了数据库操作的...

    SSH整合jar包-spring5.0+hibernate5.1+struts2.5

    使用这个SSH整合jar包,开发者可以快速搭建一个基于SSH的项目结构,节省了单独下载和配置每个框架的时间。同时,由于这些jar文件已经经过了"使用测试通过",可以降低因版本不兼容或配置错误导致的问题,提高了项目的...

    ssh-base-framework----基于全注解方式的SSH基础框架

    基于struts2.23 + spring2.5.6 + hibernate3.6.4 + hibernate-generic-dao1.0(除了spring,整合的都是最新的GA包,hibernate-generic-dao是google code项目库中一个开源的basedao)

    SSH2--spring 2.5.6 + struts 2.2.1 + hibernate 3.5.5全部的注解的 M V C

    spring 2.5.6 + struts 2.2.1 + hibernate 3.5.5 内有 AOP 的切面、全部的注解的 M V C 结构,之外还在上网上找了一个同学的学习笔记一起打包,感觉好不错!

    hibernate二级缓存 SSH

    在这个项目中,"hibernate二级缓存 SSH" 的标题表明我们将探讨如何在SSH框架中实现Hibernate的二级缓存功能。Hibernate二级缓存是一个优化策略,它能提高数据访问性能,减少对数据库的直接访问。 首先,Struts2作为...

    SSH(Spring+Hibernate+Struts2)框架整合必须的85个jar包

    SSH框架整合是Java Web开发中常见的一种技术栈,由Spring、Hibernate和Struts2三个开源框架组合而成。这个组合提供了一种高效、灵活且可扩展的解决方案,用于构建企业级的Web应用程序。以下是对SSH框架整合及其中...

    SSH框架----初学基础

    SSH框架,全称为Struts、Spring和Hibernate,是Java Web开发中的一个经典组合,用于构建高效、可扩展的Web应用程序。这个压缩包文件名为"webApp",很可能包含了一个完整的SSH框架项目,供初学者实践和学习。 Struts...

    SSH整合示例-薛小冉原创

    SSH整合是Java Web开发中的一种常见模式,全称为Struts2、Spring和Hibernate的集成。这个集成框架在传统的MVC(Model-View-Controller)架构基础上,提供了强大的控制层(Struts2)、业务逻辑层(Spring)和持久化层...

    SSH框架实战--个人博客

    使用Struts2+Hibernate+Spring进行开发。 数据库使用的是MySql 5.7,已导出为sql文件(blog.sql) 包括后台管理和前端展示两部分构成: * 后台使用Easyui进行开发的界面 * 前台使用Bootstrap开发的界面 前台...

    基于IDEA的SSH项目之五:集成Hibernate----lib包

    在SSH项目中,Spring可以管理Hibernate SessionFactory,通过依赖注入(DI)提供给其他组件使用,这样可以实现更好的解耦。 4. **lib目录**: `lib`目录通常是Java项目的库文件存放位置,包含所有外部依赖的JAR包...

    SSH中Hibernate所需基本jar包

    4. **持久化支持**:`javassist.jar`,这个库提供了动态字节码生成的能力,Hibernate用它来实现运行时类的增强。 5. **日志库**:`log4j.jar`,提供了日志记录功能,帮助开发者追踪应用程序的运行状态和错误信息。 ...

    ssh:struts-2.5+spring4+hibernate5

    简单的ssh项目,泛型BaseAction配置,简单注解配置,applicationContext.xml配置,jar包地址 链接:https://pan.baidu.com/s/14NkywuhG6mESyhE1VMkhOQ 密码:en19

    SSH中 struts hibernate spring 各起什么作用

    ### SSH框架:Struts、Hibernate、Spring的作用解析 #### Struts **Struts** 是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于构建动态Web应用程序。在SSH架构中,Struts主要负责处理用户界面...

    SSH - Struts2 + Spring4 + Hibernate4 + c3p0 + Mysql.rar

    SSH是Java Web开发中的一个流行框架组合,由Struts2、Spring和Hibernate三大组件组成。这个框架集成提供了高效、灵活的后端开发解决方案,适用于构建大型企业级应用。下面将详细解析SSH框架以及它们在项目中的应用。...

    114020-java-SSH2-Struts2.1、Spring3.0、Hibernate3.3大框架整合详细图解.docx

    SSH2 是 Java 开发中的一个经典组合,由 Struts2、Spring3.0 和 Hibernate3.3 三大框架组成,主要用于构建企业级的 Web 应用程序。SSH2 的整合使得开发过程更加高效,各框架之间的协作能够简化项目结构,提高代码...

Global site tag (gtag.js) - Google Analytics