`
zhangfeilo
  • 浏览: 400991 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

spring3之JdbcTemplate AOP 事务

阅读更多

一、applicationContext.xml配置:定义事务和aop

 

<!-- 定义事务传播属性   -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="get*" propagation="NOT_SUPPORTED" read-only="true"/>
            <tx:method name="*"  />
        </tx:attributes>
    </tx:advice>
      <tx:annotation-driven transaction-manager="txManager"/>
<!--aop错误引入spring.jar-->
    <aop:config>
        <!-- 描述切入点 -->
        <!--
1)execution(* *(..))
表示匹配所有方法
2)execution(public * com. savage.service.UserService.*(..))
表示匹配com.savage.server.UserService中所有的公有方法
3)execution(* com.savage.server..*.*(..))
表示匹配com.savage.server包及其子包下的所有方法
-->
        <aop:pointcut id="transactionPointCut" expression="execution(* com.cn.ssm.dao2..*.*(..))"/>
        <aop:advisor pointcut-ref="transactionPointCut" advice-ref="txAdvice"/>
    </aop:config>

 

二、实现类UserDaoImpl.java

@Transactional

public class UserDaoImpl implements UserDao {

    @Transactional(rollbackFor = Exception.class)
    public void insertUser() throws Exception {
        jdbcTemplate.update("insert into user (name) values ('01');");
        jdbcTemplate.update("update user set name=a where id=0;");
    }
}

 

三、Test.java 测试

 

 

 public static void main(String[] args) throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext_1.xml");
        UserDao userDaoImpl = (UserDao) context.getBean("userDaoImpl");
        userDaoImpl.insertUser();
     }

 

测试结果:

init:

deps-module-jar:

deps-ear-jar:

deps-jar:

compile-single:

run-main:

2011-11-26 1:22:38 org.springframework.context.support.AbstractApplicationContext prepareRefresh

信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1608e05: startup date [Sat Nov 26 01:22:38 CST 2011]; root of context hierarchy

2011-11-26 1:22:38 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

信息: Loading XML bean definitions from class path resource [applicationContext_1.xml]

2011-11-26 1:22:38 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons

信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@107ebe1: defining beans [dataSource,txManager,txAdvice,org.springframework.aop.config.internalAutoProxyCreator,transactionPointCut,org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0,jdbcTemplate,userDaoImpl]; root of factory hierarchy

2011-11-26 1:22:39 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

信息: Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]

2011-11-26 1:22:39 org.springframework.jdbc.support.SQLErrorCodesFactory <init>

信息: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]

Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [update user set name=a where id=0;]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'a' in 'field list'

        at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233)

        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)

        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:406)

        at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:518)

        at com.cn.ssm.dao2.UserDaoImpl.insertUser(UserDaoImpl.java:67)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:597)

        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

        at $Proxy0.insertUser(Unknown Source)

        at com.cn.ssm.bll.UserBll.main(UserBll.java:39)

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'a' in 'field list'

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

        at com.mysql.jdbc.Util.getInstance(Util.java:381)

        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)

        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)

        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)

        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)

        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)

        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)

        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:597)

        at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)

        at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)

        at $java.sql.Statement$$EnhancerByProxool$$d984001c.executeUpdate(<generated>)

        at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:508)

        at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:1)

        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)

        ... 16 more

Java Result: 1

成功生成(总时间:3 秒)



整个insertUser()方法里执行的sql都回调。
0
2
分享到:
评论

相关推荐

    Spring4--3.jdbcTemplate事务

    文件`spring_3_1`、`spring_3`和`spring_3_2`可能包含了Spring框架关于JdbcTemplate和事务管理的更多示例代码和配置信息,学习这些资源有助于深入理解Spring4中如何有效地利用JdbcTemplate进行事务控制。通过实践,...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    通过本章节的学习,您应该能够掌握如何使用JdbcTemplate进行基本的数据库操作,以及如何在Spring中配置和使用声明式事务来管理复杂的业务流程。这些技能对于开发基于Spring框架的应用程序至关重要。

    JdbcTemplate的事务控制.docx

    当使用Spring框架时,我们可以利用Spring的AOP(面向切面编程)特性来更方便地管理事务。Spring支持两种类型的事务管理:编程式事务管理和声明式事务管理。 1. **编程式事务管理**:通过编程的方式管理事务,通常是...

    spring-jdbcTemplate实例工程

    Spring JdbcTemplate支持自动和手动的事务管理。在AOP(面向切面编程)的帮助下,可以在方法级别控制事务的开始、提交和回滚。例如,通过@Transactional注解开启事务,当发生异常时,事务会自动回滚。 五、优势与...

    strut2+spring+springjdbctemplate做的简易登录系统

    Spring则是一个全面的后端框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能;Spring JDBC Template是Spring提供的一个简化数据库操作的工具,它封装了JDBC的繁琐部分,让开发者可以更专注于业务逻辑。 在...

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    声明式事务管理通常通过AOP(面向切面编程)实现,只需在方法上添加@Transactional注解,Spring就会自动处理事务的开始、提交和回滚。 7. **异常处理** Spring JDBC将数据库特定的异常转换为Spring的...

    spring mvc+jdbctemplate非注解例子

    总的来说,这个"spring mvc+jdbctemplate非注解例子"涵盖了Web开发中的多个核心概念,包括Spring MVC的MVC设计模式、JdbcTemplate对数据库操作的抽象、AOP的切面编程以及连接池的高效资源管理。每个部分都需要对...

    Spring boot +jdbctemplate

    Spring Boot 是一个基于 Spring 框架的快速开发工具,旨在简化新 Spring 应用程序的初始设置和配置。...同时,Spring Boot的灵活性使得它可以适应各种复杂的应用场景,成为现代企业级开发的首选框架之一。

    Spring aop、jdbc和事务tx练习

    3. **Spring 事务管理(TX)** Spring TX模块提供了声明式和编程式的事务管理。声明式事务管理允许开发者在配置文件中声明哪些方法需要在事务中运行,而无需在代码中显式管理开始和结束事务。这通常通过@...

    struts2.3.4+spring3.1.1+jdbctemplate

    这两个配置文件需要正确地集成,确保Action类能够被Spring容器管理,并且JdbcTemplate的相关配置(如数据源、事务管理器)也应完整无误。 在实际应用中,这样的组合提供了灵活的架构和高效的数据库访问。Struts2...

    spring-springMvc-jdbctemplate.rar

    在本项目中,"spring-springMvc-jdbctemplate.rar" 是一个包含了使用Spring框架、Spring MVC和JdbcTemplate实现的Web应用示例。这个压缩包可能包含了一系列的配置文件、源代码和数据库脚本,旨在展示如何整合这些...

    Spring AOP IOC源码笔记.pdf

    JdbcTemplate是Spring提供的一个简单易用的数据库操作工具,通过模板方法模式封装了JDBC的常用操作,减少了数据库访问的复杂性,同时保持了事务管理能力。 10. Spring AOP API: Spring AOP提供了Pointcut、Advisor...

    基于注解的Spring JdbcTemplate

    Spring会自动通过AOP代理处理这些注解方法,所以我们不需要为接口实现类。然而,如果你的项目需要,可以创建一个空实现。 ### 6. 使用Spring JdbcTemplate 在服务层或者控制器中,我们可以依赖注入`UserRepository...

    spring 整合JDBC和AOP事务的方法

    "Spring 整合 JDBC 和 AOP 事务的方法" Spring 框架为我们提供了一个强大的整合了 JDBC 和 AOP 事务的方法,今天我们就来了解一下这个方法的实现。 首先,我们需要了解什么是 JDBC 和 AOP。JDBC 全称为 Java ...

    Spring JdbcTemplate例子

    Spring JdbcTemplate是Spring框架中的一个核心组件,主要用来简化数据库操作。它提供了一种模板方法设计模式,将SQL语句的执行与结果处理进行了抽象,使得开发者可以更加专注于业务逻辑,而无需关心底层数据访问的...

    Spring Security 3.1 +Spring +Servlet+JdbcTemplate

    在本项目中,Spring作为一个服务提供者,帮助管理组件间的依赖关系,同时通过AOP实现事务管理和日志记录等功能。 Servlet是Java EE平台中的标准接口,用于处理HTTP请求。在Spring Security 3.1的背景下,Servlet...

    图书管理系统( Spring+Spring MVC+JdbcTemplate).rar

    首先,Spring框架作为Java企业级应用的核心框架,为系统提供了依赖注入(DI)和面向切面编程(AOP)的能力。依赖注入允许系统组件之间松耦合,使得代码更易于测试和维护。SpringMVC是Spring框架的一部分,专门用于...

    Spring JDBCTemplate连接池jar包

    3. `spring-jdbc-5.0.0.RELEASE.jar`:包含Spring对JDBC的支持,包括JDBCTemplate和DataSourceTransactionManager,它们是与数据库交互和管理事务的关键。 4. `spring-tx-5.0.0.RELEASE.jar`:提供了事务管理功能,...

    Spring-JdbcTemplate

    其核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect Oriented Programming,AOP)、以及对事务、消息、测试等的支持。Spring通过其强大的容器管理机制,实现了控制反转(Inversion of ...

Global site tag (gtag.js) - Google Analytics