目录
- spring学习6:整合springmvc+spring+mybatis
- 一、创建一个java web工程
- 二、保证spring框架在工程中可用并整合mybatis
- 三、整合springmvc
- 四、测试
- 四、详解spring的事务控制
- 4.1 事务的隔离级别
- 4.2 事务的传播行为
- 4.3 是否是只读事务
- 4.4 配置步骤
- 4.5注意事项:事务可能不起作用的原因
- 4.6 基于注解配置事务
spring学习6:整合springmvc+spring+mybatis
这篇是ssm整合的学习记录
一、创建一个java web工程
用maven创建一个web工程,pom文件的内容如下
4.0.0
com.lyy
spring-ssm
1.0-SNAPSHOT
war
spring-ssm
http://www.example.com
UTF-8
1.8
1.8
5.0.2.RELEASE
5.0.1.RELEASE
1.6.6
1.2.12
5.1.6
3.4.5
org.aspectj
aspectjweaver
1.6.8
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
junit
junit
4.12
compile
mysql
mysql-connector-java
${mysql.version}
javax.servlet
servlet-api
2.5
provided
javax.servlet.jsp
jsp-api
2.0
provided
jstl
jstl
1.2
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.3.0
c3p0
c3p0
0.9.1.2
jar
compile
org.projectlombok
lombok
1.16.16
com.fasterxml.jackson.core
jackson-databind
2.9.7
com.fasterxml.jackson.core
jackson-core
2.9.7
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
80
/
UTF-8
tomcat7
org.apache.maven.plugins
maven-compiler-plugin
3.7.0
1.8
然后创建工程的目录结构,controller,service,dao等
二、保证spring框架在工程中可用并整合mybatis
创建spring的配置文件,在其中进行基本配置,并整合spring和mybatis,同时进行事务的配置
三、整合springmvc
将springmvc整合进工程,在web.xml中配置加载spring的配置文件
spring-ssm
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath*:applicationContext.xml
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
创建springmvc的配置文件,springmvc.xml
四、测试
创建一个测试springmvc是否配置成功的controller
@Controller
@RequestMapping("/test")
public class TestMVCController {
@GetMapping("/success")
public String test(){
return "success";
}
}
在 /WEB-INF/pages/下创建success.jsp,启动工程访问http://localhost/test/success
,如果能够正常访问到jsp页面就说明springmvc配置成功
再创建一个账户查询的接口,从controller到dao,使用spring的ioc和mybatis进行查询,
@RestController
@RequestMapping("/account")
public class AccountController {
@Autowired
private IAccountService accountService;
@GetMapping("/findAll")
public List findAll(){
return accountService.findAll();
}
}
启动工程访问`http://localhost/account/findAll,如果页面上返回了json格式的账户数据,说明ssm整合完成。
四、详解spring的事务控制
spring中事务相关的概念
4.1 事务的隔离级别
spring控制事务时可以配置事务的隔离级别
DEFAULT:默认级别,和数据库保持一致
READ_UNCOMMITTED:读未提交
READ_COMMITTED:读已提交
REPEATABLE_READ:mysq默认级别
SERIALIZABLE
4.2 事务的传播行为
REQUIRED:如果当前没有事务,就新建一个事务,如果已经有一个事务就加入到这个事务,默认值
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
以上是最常用的两种。
4.3 是否是只读事务
建议查询时设置为只读事务
4.4 配置步骤
事务管理器对象的选择:
org.springframework.jdbc.datasource.DataSourceTransactionManager 使用 Spring JDBC 或 iBatis 进行持久化数据时使用
org.springframework.orm.hibernate5.HibernateTransactionManager 使用 Hibernate 版本进行持久化数据时使用
4.4.1 配置事务管理器
配置一个事务管理器的bean,注入数据源
4.4.2配置事务的通知,在通知内部配置事务的属性
4.4.3 配置aop,指定事务作用的方法
4.5注意事项:事务可能不起作用的原因
(1)
在spring mvc的配置文件和spring的配置文件中,开启注解扫描时一定要分开扫描,即spring mvc只处理controller层,其余由spring 处理,否则事务就会不生效。
因为,如果我们在spring和springmvc配置文件中分别开启注解扫描,并且都是最大化的包,那么在Controller中用的ServiceImpl就是mvc容器中的了,而我们在spring的配置文件中,配置的事务,单单是针对spring容器中的bean。所以我们启动服务器,通过浏览器测试,也就是通过了Controller,也就是用了mvc容器中的ServiceImpl,是没有经过事务配置的类。事务当然不会起作用。spring和springMvc都有自己容器,虽不是同一个容器,但却是父子容器。mvc是子容器,所以在Controller处理器中,可以直接注入spring容器中bean,这时springMvc和spring容器都已经初始化了
(2)
service层不能捕获异常,事务控制是通过异常实现的,否则事务就不能控制,需要在controller层控制异常。
4.6 基于注解配置事务
(1)配置事务管理器的bean
(2) 在配置文件(或者配置类)中开启spring对注解事务的支持
配置类上要加上EnableTransactionManagement
注解
(3)在业务层对应的类或方法上加@Transactional注解
示例工程
示例工程地址