专栏首页IT笔记Spring3+Hibernate3升级为Spring4+Hibernate4

Spring3+Hibernate3升级为Spring4+Hibernate4

写在开始

今天,把当前项目做了一下升级,特此记录一下。

由于历史原因,项目本身并不是Maven项目,所以升级JAR包都是手动从Maven库中下载,然后load进项目lib。

目前 spring版本已经更新至5,但是4还是主流版本。

相比spring3,spring4新特性如下: Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性——Groovy Bean定义DSL Spring4新特性——更好的Java泛型操作API Spring4新特性——JSR310日期API的支持 Spring4新特性——注解、脚本、任务、MVC等其他特性改进

版本升级

spring升级

目前版本 spring3.0.4

升级版本 spring4.3.6

注意 spring-asm相关已经集成到spring-core中,无需重复添加,不然系统会提示报错。

hibernate升级

目前版本 hibernate3

由于以前项目,只有hibernate3.jar这一个,所以替换到它就ok。

升级版本hibernate4

一个都不能少,特别是jboss-logging-3.1.3.GA.jar,不要以为它是个废物。

相关xml文件配置修改:

<!--注意这里修改为了hibernate4了-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingLocations">
            <list>
                <value>classpath:com/acts/web/*/model/*.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.query.substitutions">true=1,false=0</prop>
                <prop key="jdbc.use_scrollable_resultset">false</prop>
                <prop key="hibernate.current_session_context_class">
                    org.springframework.orm.hibernate4.SpringSessionContext
                </prop>
            </props>
        </property>
    </bean>
    
     <!-- 定义事务注意这里修改为了hibernate4了-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="remove*" propagation="REQUIRED" />
            <tx:method name="change*" propagation="REQUIRED" />
            <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->  
            <tx:method name="*" propagation="REQUIRED" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <aop:config proxy-target-class="true">
        <aop:pointcut id="allServiceMethod" expression="execution(* com.acts.*.*.service..*.*(..))" />
        <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" />
    </aop:config>

相关代码修改:

如果你之前的dao层是继承了HibernateDaoSupport,你只需要将引入的

import org.springframework.orm.hibernate3.HibernateCallback;

修改为

import org.springframework.orm.hibernate4.HibernateCallback;

如果hibernate3中使用了executeFind回调方法,请统一修改为execute,hibernate4中已经不支持。相关的SQLException异常信息删除掉即可。

升级完毕

至此,启动项目,如果没有错误提示,说明升级ok。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 聊一聊项目中的Spring(execution表达式)

    [一知半解,就是给自己挖坑],开篇先补充一下事务的相关知识。 编程式事务 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。管理使用T...

    小柒2012
  • springMvc4+hibernate4的一个奇葩的网上众说纷纭的错误

    springMvc4+hibernate4项目运行报错如下: org.hibernate.HibernateException: Could not obtai...

    小柒2012
  • 微服务架构

    微服务架构 单体架构能够很好地应对简单的业务系统。但是随着业务的扩张,功能的不断增加,单体架构面临着越来越多的挑战: ? 维护成本增加 团队越来越大,相应的...

    小柒2012
  • Python接口自动化之数据驱动

    在上一篇Python接口自动化测试系列文章:Python接口自动化之登录接口测试,主要介绍接口概念、接口用例设计及登录接口测试实战。以下主要介绍使用openpy...

    ITester软件测试小栈
  • Spring Aop之Cglib实现原理详解

    Spring Aop实现对目标对象的代理,主要有两种方式:Jdk代理和Cglib代理。这两种代理的区别在于,Jdk代理与目标类都会实现同一个接口,并且在代理...

    田维常
  • (23)打鸡儿教你Vue.js

    Webpack 目前无论在求职还是工作中,使用越来越普及。而想要学懂,学会Webpack更绝非易事。

    达达前端
  • JS面向对象的程序设计

    http://www.cnblogs.com/gaojun/p/3386552.html

    bear_fish
  • Cats(3)- freeK-Free编程更轻松,Free programming with freeK

       在上一节我们讨论了通过Coproduct来实现DSL组合:用一些功能简单的基础DSL组合成符合大型多复杂功能应用的DSL。但是我们发现:cats在处理多层...

    用户1150956
  • JavaScript 进阶教程(1)--面向对象编程

    一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就...

    AlbertYang
  • Python的multiprocessi

    multiprocessing模块可以衍生出子进程。multiprocessing模块同时提供本地和远程的并发操作。multiprocessing模块不像thr...

    py3study

扫码关注云+社区

领取腾讯云代金券