- 浏览: 112121 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Inmethetiger:
yixiandave 写道能不能在Validation注解的m ...
Spring验证小结和问题 -
yixiandave:
Inmethetiger 写道yixiandave 写道如果用 ...
Spring验证小结和问题 -
Inmethetiger:
yixiandave 写道如果用JSR303的话,可以引入hi ...
Spring验证小结和问题 -
yixiandave:
如果用JSR303的话,可以引入hibernate-valid ...
Spring验证小结和问题 -
jackytang520:
貌似用了这么久,没有碰到过这个问题..
idea属性文件中文乱码
前面讲了两大类,四种spring事务的方式。这篇主要记录基于注解的springmvc+声明式或者注解式事务。
基于注解的就只要把<tx:advice>注销掉。改成<tx:annotation-driven transaction-manager="transactionManager" />就行。
注意的是。在applicationContext.xml中的和[servlet-name]-servlet.xml中的<component-scan>。在前者中,没有包含控制器的包。如果包含,则事务不起作用。具体原因是:
服务器启动加载配置文件的顺序为web.xml---->applicationContext.xml(spring的配置文件)---->[servlet-name]-servlet.xml(springmvc配置文件)。由于applicationContext.xml配置文件中Controller会先进行扫描装配,但是此时Service还没有进行事务增加处理,得到的将是原来的Service(没有经过事务增强处理,故而没有事务处理能力)
所以,在applicationContext.xml中一定要先扫描非Controller中的包。而在[servlet-name]-servlet.xml中扫描Controller中的包。可以是我例子中的那样,也可以这样:
applicationContext.xml中
<context:component-scan base-package="com" > <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan>
[servlet-name]-servlet.xml中
<context:component-scan base-package="com" use-default-filters="false" > <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan>
具体例子如下:使用的方式没有上面那个简便。但是用来实验也还可以。
package cn.lyy.model; import org.springframework.stereotype.Component; @Component public class Teacher { private int id; private String name; private String email; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
package cn.lyy.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import cn.lyy.dao.TeacherDao; import cn.lyy.model.Teacher; @Service public class TeacherService { @Autowired private TeacherDao teacherDao; public void addTeacher(Teacher teacher) { teacherDao.insert(teacher); //throw new RuntimeException("运行异常"); //用来演示事务回滚 } }
package cn.lyy.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import cn.lyy.model.Teacher; @Repository public class TeacherDao { @Autowired private JdbcTemplate jdbcTemplate; public void insert(Teacher teacher) { final String sql = "insert into teacher values(" + teacher.getId() + ",'" + teacher.getName() + "','" + teacher.getEmail() + "')"; jdbcTemplate.execute(sql); } }
package cn.lyy.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import cn.lyy.model.Teacher; import cn.lyy.service.TeacherService; @Controller @RequestMapping public class TeacherController { @Autowired private TeacherService teacherService; @RequestMapping(value = "/addteacher.do") public void addTeacher() { Teacher teacher = new Teacher(); teacher.setId(3); teacher.setName("lyysssss"); teacher.setEmail("lyyMvc@163.com"); teacherService.addTeacher(teacher); } }
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:property-placeholder location="classpath:jdbc.properties" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource" /> </beans>
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <import resource="classpath:applicationContext-dao.xml" /> <context:component-scan base-package="cn.lyy.dao" /> <context:component-scan base-package="cn.lyy.model" /> <context:component-scan base-package="cn.lyy.service" /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" /> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="add*" isolation="READ_COMMITTED" propagation="REQUIRED" rollback-for="java.lang.RuntimeException" /> <tx:method name="update*" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="serviceMethod" expression="execution(* cn.lyy.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" /> </aop:config> </beans>
#postgre jdbc.driverClassName=org.postgresql.Driver jdbc.url=jdbc:postgresql:test jdbc.username=lyy jdbc.password=lyy
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="cn.lyy.controller" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/" /> <property name="suffix" value=".jsp"></property> </bean> </beans>
其他的就省略了。
总的来说,对事务有了一个大概的了解。接下里就应该了解一下事务的隔离级别,传播途径等内容了!
http://inmethetiger.iteye.com/blog/1733375
发表评论
-
Spring验证小结和问题
2014-07-27 16:36 4999因为从云笔记中粘贴过来的,代码格式就没有了。格式稍好点的地 ... -
在spring中使用Ehcache
2014-06-18 16:07 1096前提: 使用环境:详细页面 依赖包: ... -
Spring MVC 3.0版本和3.1版本的一点小区别
2013-06-12 00:57 2785先上代码: 主要是控制器: @Controller ... -
在Maven下的springJpa多模块开发引起的问题
2013-02-21 22:33 3181最近的项目搭建中,出现了一个问题。 ... -
spring 事务一:非注解springmvc+注解or声明式事务
2012-11-22 15:47 2587前两天一人问我,在使用spring mvc (基于注解) 的时 ... -
在spring中使用mybatis
2012-11-14 21:59 3737今天在使用mybatis的时候,发现dao的实现竟然可以不需要 ... -
@Controller中的@RequestMapping参数
2012-11-07 09:56 3906转载自:http://blog.sina.com.cn/s/b ... -
三种连接池的配置
2012-09-28 10:00 1226用spring默认的连接池性能效率不高, 如果数据库重启 ... -
spring jdbc之query详细实例2
2012-09-27 16:45 1977首发地址: http://inmethetiger.iteye ... -
spring jdbc之query详细实例1
2012-09-27 16:15 3298首发:http://inmethetiger.iteye. ... -
spring jdbc之最简单的增删改查
2012-09-27 10:10 2141首发地址: http://inmethetiger.iteye ... -
spring的实例化方式
2012-09-26 17:48 1914首发地址: http://inmethetiger.iteye ... -
Spring Aop(一)
2012-09-26 16:06 806这是一个简单的spring aop的例子。 一:定义目 ... -
spring mvc表单标签和@ModelAttribute
2012-09-20 21:05 9215首发地址:http://inmethetiger.iteye ... -
spring相关资料的URL(持续更新)
2012-09-20 13:34 1248首发地址http://inmethetiger.iteye.c ... -
Spring mvc注解之实现MultiActionController功能
2012-09-16 16:38 1714首发地址http://inmethetiger.iteye.c ... -
spring mvc 之注解版基础
2012-09-14 17:28 977首发地址:http://inmethetiger.iteye ... -
spring mvc 之MultiActionController和MethodNameResolver--附带实例
2012-09-14 17:23 2069首发地址:http://inmethetiger.iteye. ... -
Spring MVC的开发流程--附带实例
2012-09-12 18:05 2632首发地址: http://inmethetiger.i ...
相关推荐
3. **事务管理**:提供编程式和声明式事务管理,确保数据一致性。 4. **Spring MVC集成**:与SpringMVC无缝结合,提供统一的配置和上下文管理。 **MyBatis** MyBatis是一个轻量级的持久层框架,它解决了Java开发中...
4. **Spring事务管理**:Spring的@Transactional注解可以实现声明式事务管理,即在方法上添加此注解,Spring会自动进行事务的开启、提交、回滚等操作。这使得开发者无需手动管理事务,降低了出错的可能性,也使得...
在全注解开发中,我们可以使用@Autowired来自动装配bean,@Transactional来声明事务边界,@Service和@Repository则分别用于标记服务层和数据访问层的bean。 Hibernate是一个流行的Java ORM(对象关系映射)框架,它...
通过Spring的声明式事务管理,可以简化事务控制,减少代码中的错误。而Maven则保证了项目的构建一致性,方便进行版本管理和构建自动化。 总结来说,"Spring+Hibernate+SpringMVC+Maven整合"是现代Java Web开发中的...
- **事务管理**:Spring和Hibernate结合,可以实现声明式事务管理,确保数据一致性。 4. Thymeleaf: - **模板语言**:在HTML中嵌入Thymeleaf语法,如`[[${var}]]`显示变量,`th:text`绑定属性值。 - **条件和...
MyBatis与Spring框架结合使用时,可以实现声明式事务管理,简化了事务处理的代码。 这个压缩包中的“3.1.1jar”可能是Spring、SpringMVC和MyBatis的特定版本的库文件,这些库文件是集成这三个框架所必需的。确保...
- Spring事务管理:编程式事务和声明式事务的区别,@Transactional注解的使用。 - Spring Boot的自动配置原理及starter的机制。 2. **SpringMVC**: - 请求处理流程:从HTTP请求到响应的整个过程。 - ...
8. **事务管理**:Spring支持声明式事务管理,可以在Spring配置文件中开启事务管理,并在需要事务控制的Service层方法上添加@Transactional注解。 9. **Web配置**:配置SpringMVC的DispatcherServlet,设置视图解析...
- **事务管理**:Spring提供了声明式事务管理,简化了事务的处理。 - **模型-视图-控制器**:SpringMVC的MVC设计模式清晰分离了业务逻辑、数据模型和用户界面。 - **ORM支持**:Hibernate使得Java对象与数据库表之间...
在IT行业中,SpringMVC、MyBatis以及声明式事务管理是Java Web开发中的关键组件。这个项目结合了这三个核心技术,构建了一个高效、稳定的后端系统。以下将详细阐述这些技术及其相互配合的工作原理。 首先,...
此外,Spring还能接管Hibernate的事务管理,实现声明式事务,使得事务控制更加简洁。 具体整合步骤可能包括以下部分: 1. 配置Spring的ApplicationContext,定义Bean,包括DataSource、SessionFactory、Service层和...
在事务管理方面,Spring4.1提供了声明式事务管理,使得开发者无需手动处理事务,只需在方法上添加@Transactional注解即可。 **整合流程** SSH的整合通常涉及以下几个步骤: 1. **配置SpringMVC**:配置SpringMVC...
Spring是Java领域的一个核心框架,它提供了一种声明式事务管理、依赖注入、AOP(面向切面编程)等功能,极大地简化了Java应用程序的开发。在本项目中,Spring主要负责以下任务: - **依赖注入(Dependency Injection...
6. 事务管理:Spring 提供了声明式事务管理,可以在配置文件中声明事务边界,由Spring自动管理事务的开始、提交、回滚。 7. 整合测试:使用JUnit进行单元测试,可以测试单独的Service或DAO方法,也可以使用MockMVC...
JPA允许开发者以声明式的方式定义对象与数据库表之间的映射,简化了数据访问的复杂度。 **环境搭建步骤**: 1. **安装JDK**:首先确保你的系统中已经安装了Java Development Kit,并且环境变量配置正确。 2. **...
Mybatis与Spring框架结合使用时,可以实现声明式事务管理,进一步提升开发效率。 将SpringMVC、Spring和Mybatis集成在一起,首先需要配置Spring的上下文,声明Bean并管理其生命周期。然后,通过Spring的DataSource...
4. **事务管理**:Spring支持编程式和声明式事务管理,理解两者的区别和应用场景。 5. **Spring Boot**:作为Spring的快速开发工具,面试中可能会问到自动配置、起步依赖、Actuator监控等特性。 MyBatis是一个优秀...
2. **灵活的事务管理**:Spring提供了声明式事务管理,可以在SpringMVC和Mybatis之间无缝协调事务,确保数据一致性。 3. **方便的控制器层**:SpringMVC的控制器使得HTTP请求的处理变得简单,同时可以利用Spring的...
这是一个基于Java技术栈的Web应用开发整合包,主要包含了Spring、SpringMVC、MyBatis、Maven和easyUI这五个关键组件。下面将详细解释这些技术及其整合方式。 **Spring框架**:Spring是一个全面的Java企业级应用开发...