spring学习6:整合springmvc+spring+mybatis

目录

  • 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
                    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注解

示例工程

示例工程地址

你可能感兴趣的:(spring学习6:整合springmvc+spring+mybatis)