`
zjnbshifox
  • 浏览: 316933 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

JPA引进之路(1)

    博客分类:
  • Java
阅读更多
系统总是离不开数据的持久化,说起来用hibernate的时间也不短了,从2.x就在用,现在已经到3.1了,不过为了符合标准,只是把 hibernate作为持久化的提供者,以前使用的是hibernate的EJB实现还有spring的Annotation事务,配置一般都是:
[hibernate.cfg.xml]--hibernate的配置文件,配置数据库连接,用户,密码等等
<hibernate-configuration><session-factory><mapping class="com.jl.domain.Customer">
xml 代码
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <property name="hibernate.hbm2ddl.auto">create-drop</property>  
  8.         <!--这里的create-drop会每次在系统启动的时候根据映射把数据表重新删除再建立一遍,在一般使用的时候可以设置为auto  -->  
  9.         <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>  
  10.         <property name="hibernate.cglib.use_reflection_optimizer">true</property>  
  11.         <property name="default-lazy">false</property>  
  12.         <property name="show_sql">true</property>  
  13.          
  14.         <!-- 用于hibernate持久化的对象" -->  
  15.         <mapping class="com.jl.domain.Customer"/>  
  16.         <mapping class="com.jl.domain.Order"/>  
  17.         <mapping class="com.jl.domain.LineItem"/>  
  18.         <!-- 用于hibernate已经定义的事件" -->  
  19.          <!--<listener type="pre-update" class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/>  
  20.          <listener type="pre-insert" class="org.hibernate.validator.event.ValidatePreInsertEventListener"/> -->  
  21.     </session-factory>  
  22. </hibernate-configuration>  


[spring-dao.xml] spring的配置文件,配置了事务处理,dao及service
  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"><bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"><bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><bean id="ActivemqMsgDAO" class="com.jl.example.dao.ActivemqMsgDAO"><bean id="activeMsgService" class="com.jl.example.service.ActiveMsgService">
    
xml 代码
 
  1. <!--如果自己定义连接池,datasource可以这样配置-->  
  2.      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">     
  3.         <property name="driverClassName">  
  4.             <value>org.postgresql.Driver</value>  
  5.         </property>  
  6.         <property name="url">  
  7.             <value>jdbc:postgresql:activemq</value>  
  8.         </property>  
  9.         <property name="username">  
  10.             <value>root</value>  
  11.         </property>  
  12.         <property name="password">  
  13.             <value>800314</value>  
  14.         </property>  
  15.     </bean>      
  16.   <!--datasource完毕-->  
  17.     
  18.   <!--用已经配置好的连接池的话,可以这样-->  
  19.   <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
  20.         <property name="jndiName"><value>java:comp/env/jdbc/opendb</value></property><!--这里是数据源名称-->  
  21.           
  22.     </bean>  
  23.    <!--datasource完毕-->  
  24.  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  25.            <property name="sessionFactory"><ref bean="sessionFactory"/></property>  
  26.            <property name="dataSource"><ref bean="dataSource"/></property>  
  27.     </bean>  
  28.   
  29.     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>  
  30.   
  31.     <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">  
  32.         <property name="transactionInterceptor"><ref bean="transactionInterceptor"/></property>  
  33.     </bean>  
  34.   
  35.     <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  36.         <property name="transactionManager"><ref local="transactionManager"/></property>  
  37.         <property name="transactionAttributeSource">  
  38.             <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>  
  39.         </property>  
  40.     </bean>  
  41.   
  42.   
  43.     <bean id="sessionFactory"   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  44.         <property name="dataSource"><ref local="dataSource"/></property>  
  45.         <property name="configurationClass"><value>org.hibernate.cfg.AnnotationConfiguration</value></property>  
  46.         <property name="configLocation"><value>/WEB-INF/hibernate.cfg.xml</value></property> <!--这里是刚才hibernate配置文件的位置-->         
  47.     </bean>  
  48.  <!--下面就是把自己的DAO和service放进来就可以了-->  
  49.  <bean id="ActivemqMsgDAO" class="com.jl.example.dao.ActivemqMsgDAO">   
  50.      <!--dao需要继承自org.springframework.orm.hibernate3.support.HibernateDaoSupport,才可以访问hibernate的上下文-->  
  51.         <property name="sessionFactory">  
  52.             <ref local="sessionFactory"/>  
  53.         </property>  
  54.     </bean>  
  55.       
  56.     <bean id="activeMsgService" class="com.jl.example.service.ActiveMsgService">  
  57.         <property name="activemqdao"><ref local="ActivemqMsgDAO"/></property>  
  58.     </bean>  
  59.       
  60.       

    
    本来这样已经万事大吉,一般的使用也都是这样在用的,不过,我们这里情况有点特殊,
    我们的系统比较大,会分成很多的子系统,每个子系统都由不同的人负责,每个子系统
    都会使用一个公共数据源也有可能使用不同的数据源,而且由于配置管理的改进,每个
    子系统的负责人员之间最好互不影响,最好每个子系统的人员都使用各自的配置文件,
    公用的配置文件放到统一的位置,只需要在启动的时候把所有文件加载……,不过问题出
    现了:
    1、貌似<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
    在所有文件中只允许有一个,这个好办,放到公用的文件里面去
    2、spring由于每个子系统都会使用公用的连接池,但会映射不同的表,貌似spring的2个TransactionManager
    检测到使用统一的数据源的话是不行的,会出错,这就要求把TransactionManager也放到公用配置文件里面去,
    可是,如果这样的话,势必导致所有的人都可以修改公用配置文件,和配置管理的原则不符……,而且,这样子
    的话每个子系统的hibernate.cfg.xml配置文件还是要各子系统自己维护,会产生多个,而一个
    org.springframework.orm.hibernate3.LocalSessionFactoryBean,又貌似只支持一个hibernate配置文件
    (spring 1.2.x)
    还有虽然号称是使用EJB3的规范,但是还是使用的hibernate让自己心里有点别扭
    
    这么多的貌似和自己的别扭,搞得挺烦的,不过听说最近出了JPA的规范,spring也支持,虽然还是spring2.0的m2,
    拿来先用再说,呵呵</bean></bean></bean></bean></property> </bean></bean></bean></property> </bean></mapping></session-factory></hibernate-configuration>
分享到:
评论

相关推荐

    store_managesys:仓库管理系统,SpringBoot + Spring Data JPA +...。

    本项目为原创项目,如果需要可随意更改使用,不做限制项目部署数据库会在启动项目时自动创建,用户数据可自行添加,其中密码要对明文进行sha1摘要。为了方便,在仓库sql目录下提供了初始化的脚本,可自行使用从git...

    spring3.0MVC中文教程.doc

    2. 引进一种新的表达语言,可以使用同时定义基于 XML 和注释的 bean 定义。 3. 支持 REST Web 服务,数据格式可以从来没有那么容易。 4. 支持 JPA 2.0,提供了强大的持久化机制。 5. DispatcherServlet 是 Spring ...

    blog:一个基于SpringBoot简约优雅的个人博客

    1.引进项目 Fork本项目,用IDEA新建项目,点击 Create Project For Version Control,复制项目github地址 粘贴到IDEA中的Git地址 选择 点击clone 等待项目下载即可 2.配置项目依赖 部分版本需要在项目结构中指定JDK...

    JSP基于SSM公司人力资源管理系统可升级SpringBoot毕业源码案例设计.zip

    2. 招聘管理:支持发布招聘信息、接收应聘者简历、安排面试等功能,帮助HR进行人才引进。 3. 考勤与休假管理:记录员工的出勤情况,处理请假申请,确保公司的正常运营。 4. 绩效考核:设置绩效考核标准,自动或手动...

    Java人事管理系统源码.zip

    在技术实现上,可能使用了Spring全家桶(如Spring Framework、Spring Security、Spring Data JPA等),用于依赖注入、安全控制和数据访问。MyBatis作为持久层框架,简化SQL操作。前端界面可能使用HTML、CSS和...

    j2ee架构详细概述

    该书由中国电子工业出版社引进并翻译为《J2EE设计开发编程指南》。 - **起源与背景**:Spring框架技术的产生源于Rod Johnson在上述书籍中阐述的设计思想。为了帮助开发者更好地理解和实现这些设计理念,Rod Johnson...

Global site tag (gtag.js) - Google Analytics