知识大全 Spring系列第2部分:当Hibernate遇上Spring
Posted 知
篇首语:你必须非常努力,才能看起来毫不费力。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring系列第2部分:当Hibernate遇上Spring相关的知识,希望对你有一定的参考价值。
Spring系列第2部分:当Hibernate遇上Spring 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Spring AOP 软件系统通常由多个组件构成 每个组件负责一个特定的功能领域 但是 这些组件也经常承担它们的核心功能之外的额外责任 系统服务(例如日志 事务管理和安全性)经常发现自己跑到了别的组件的领域里 而这些组件的核心职责是其他事情 结果就是所谓的 代码纠缠 或者更简单点儿说 一团糟 面向方面编程是一种试图解决这个问题的编程技术 它把关注点的隔离提升为核心的编程概念 使用 AOP 时 仍然是在一个地方定义系统的公共功能 但是可以声明性地定义 如何 和 在哪里 应用这个功能 如果对横切关注点(例如日志和事务管理)进行了模块化 那么不用修改每个单独的类 就可以向代码中添加新特性 这类模块化的关注点称作 方面 您知道么? 可以在任何 Java? 企业版(J EE) 服务器中使用 Spring 框架的功能 而且 还可以调整它的大多数功能 使其适合不受控环境 Spring 的中心焦点就是支持不被束缚在特定 J EEE 服务上的可重用业务和数据访问对象 可以跨 J EE 环境(Web 或企业 JavaBean(EJB)) 独立应用程序 测试环境等等重用这类对象 而不会有任何麻烦 以一个企业应用程序为例 这类应用程序通常要求类似于安全性和事务支持的服务 显然 可以把这些服务的支持直接编写到要求服务的每个类当中 但是更希望能够不必为大量事务性上下文编写同样的事务处理代码 如果使用 Spring AOP 进行事务处理 那么可以声明性地安排适当的方法调用 而不必逐个安排 Spring AOP 提供了几个方面 可以为 JavaBean 声明事务 例如 TransactionProxyFactoryBean 是个方便的代理类 能够拦截对现有类的方法调用 并把事务上下文应用到事务 bean 在下面的示例中会看到这个类的实际应用 Hibernate Spring 框架提供了对 Hibernate JDO 和 iBATIS SQL Maps 的集成支持 Spring 对 Hibernate 的支持是第一级的 整合了许多 IOC 的方便特性 解决了许多典型的 Hibernate 集成问题 框架对 Hibernate 的支持符合 Spring 通用的事务和数据访问对象(DAO)异常层次结构 Spring 为使用选择的 OR 映射层来创建数据访问应用程序提供了支持 因为所有东西都设计成一组可重用 JavaBean 所以不管选择什么技术 都能以库的格式访问大多数 Spring 的 OR 映射支持 ApplicationContext 或 BeanFactory 内部的 OR 映射的好处是简化了配置和部署 Hibernate 是 Java 平台上一个功能全面的 开源的 OR 映射框架 Hibernate 支持开发符合常规 Java 理念的持久性类 —— 包括关联 继承 多态 复合以及 Java 集合框架 Hibernate 查询语言(HQL)被设计成 SQL 的一个微型面向对象扩展 它是对象和关系世界之间的桥梁 Hibernate 也支持用原始 SQL 或基于 Java 的标准和示例查询表达查询 Hibernate 使用 XML(* hbm xml) 文件把 Java 类映射到表 把 JavaBean 属性映射到数据库表 通过 JDBC 技术 支持所有的 SQL 数据库管理系统 Hibernate 与所有流行的 J EE 应用程序服务器和 Web 容器都很好地集成 实际示例 一个银行应用程序示例可以让您自己看到 Spring AOP 和 Hibernate 一起工作有多么好 银行帐户用例允许用户 (Customer) 在一个事务中打开一个或多个银行帐户 用户可以申请多个银行帐户 可以选择是支票帐户类型或者是储蓄帐户类型 应用程序数据库(Cloudscape?)容纳所有客户和帐户信息 在这个例子中 假设在 Customer 和 Account 类之间存在 :N 的关联 在实际生活场景中 关联可能需要按 m:n 建模 才能支持联合帐户 由于用户必须可以在一个事务中申请多个帐户 所以首先要为数据库交互实现一个 DOA 模式 然后要设置 Spring AOP 的 TransactionProxyFactoryBean 让它拦截方法调用并声明性地把事务上下文应用到 DOA Hibernate 实践 在 Spring 框架中 像 JDBC DataSource 或 Hibernate SessionFactory 这样的资源 在应用程序上下文中可以用 bean 实现 需要访问资源的应用程序对象只需通过 bean 引用得到这类预先定义好的实例的引用即可(这方面的更多内容在 下一节中) 在清单 中 可以看到示例银行应用程序的一段摘录 XML 应用程序上下文定义显示了如何设置 JDBC DataSource 并在上面放一个 Hibernate SessionFactory 清单 JDBC DataSource 和 HibernateSessionFactory 连接 <! DataSource Property > <bean id= exampleDataSource class= mons dbcp BasicDataSource > <property name= driverClassName > <value> apache derby jdbc EmbeddedDriver</value> </property> <property name= url > <value>jdbc:derby:springexample;create=true</value> </property> </bean> <! Database Property > <bean id= exampleHibernateProperties class= springframewonfig PropertiesFactoryBean > <property name= properties > <props> <prop key= hibernate hbm ddl auto >update</prop> <prop key= hibernate dialect >net sf hibernate dialect DerbyDialect</prop> <prop key= hibernate query substitutions >true T false F </prop> <prop key= hibernate show_sql >false</prop> <prop key= hibernate c p minPoolSize > </prop> <prop key= hibernate c p maxPoolSize > </prop> <prop key= hibernate c p timeout > </prop> <prop key= hibernate c p max_statement > </prop> <prop key= hibernate c p testConnectionOnCheckout >false</prop> </props> </property> </bean> <! Hibernate SessionFactory > <bean id= exampleSessionFactory class= springframework orm hibernate LocalSessionFactoryBean > <property name= dataSource > <ref local= exampleDataSource /> </property> <property name= hibernateProperties > <ref bean= exampleHibernateProperties /> </property> <! OR mapping files > <property name= mappingResources > <list> <value>Customer hbm xml</value> <value>Account hbm xml</value> </list> </property> </bean> 清单 显示了如何为示例应用程序数据库(是 Cloudscape)配置数据源 bean (exampleDataSource) exampleDatasource 被连接到 Spring Hibernate 的 SessionFactory 请注意 * hbm xml 指定了示例应用程序的 OR 映射文件 数据源和会话工厂设置好之后 下一步就是在 DAO 中连接 在 CustomerDAOImpl 示例中 要使用 SessionFactory 接下来 插入 Spring 的 TransactionProxyFactoryBean 它会拦截对应用程序的 CustomerDAOImpl 对象的方法调用 并声明性地在它上面应用事务 在 清单 的这个示例中 CustomerDAOImpl 类的 addCustomer 方法是作为事务的一部分执行的 有一个事务属性 PROPAGATION_REQUIRED 这个属性等价于 EJB 容器的 TX_REQUIRED 如果想让这个方法一直在事务中运行 可以使用 PROPAGATION_REQUIRED 如果事务已经在运行 那么 bean 方法会加入事务 否则 Spring 的轻量级事务管理器会启动一个事务 如果想在调用组件服务时总是启动新事务 可以使用 PROPAGATION_REQUIRES_NEW 属性 应用程序的连接完成之后 现在来进一步查看源代码 分析这个! 如果以前没这么做过 那么请 下载这篇文章的源代码 把源 zip 文件释放到计算机中的任何位置上 例如 c:\\ 会创建一个叫作 SpringProjectPart 的文件夹 src\\spring 文件夹包含示例应用程序的 Hibernate 映射文件和 Spring 配置文件 src\\springexample\\hibernate 文件包含应用程序的源代码 在这里会发现两个类 即 Customer 和 Account 它们用 Hibernate 映射文件映射到两个表 Customer 类代表客户信息 Account 代表客户的帐户信息 正如前面提到的 我把这两个类按照 : N 关系进行建模 即一个 Customer 可以拥有多个 Account 清单 显示了 Customer 对象的 Hibernate 映射文件 清单 Customer 对象的 Hibernate 映射文件 <?xml version= ?> <!DOCTYPE hibernate mapping PUBLIC //Hibernate/Hibernate Mapping DTD //EN mapping dtd > <hibernate mapping> <class name= springexample hibernate Customer table= TBL_CUSTOMER dynamic update= false dynamic insert= false > <id name= id column= CUSTOMER_ID type= java lang Long unsaved value= > <generator class= native > </generator> </id> cha138/Article/program/Java/ky/201311/28882相关参考
知识大全 Struts 2, spring 2, hibernate
Struts2,spring2,hibernate 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 用struts+spring+hibernate组装web应用
其实就算用Java建造一个不是很烦琐的web应用程序也不是件轻松的事情当为一个应用程序建造一个构架时有许多事情需要考虑从高层来说开发者需要考虑怎样建立用户接口(userinterfaces)?在哪
Spring系列第1部分:Spring框架简介(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Spring整合HIbernate 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Spring整
Spring操作Hibernate更方便 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 软件系统
知识大全 Struts+Spring+Hibernate快速入门
Struts+Spring+Hibernate快速入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 Struts&Spring&Hibernate面试总结
Struts&Spring&Hibernate面试总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Spring动态加载Hibernate映射文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
知识大全 SPring管理Hibernate事务出现异常处理
SPring管理Hibernate事务出现异常处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在Spring中配置Hibernate事务(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!