[Spring 05] Mybatis-spring整合 事务支持


Spring_05 Mybatis-Spring

6. Mabatis-Spring

1. 环境搭建:

数据库: Mybatis.user(id int(20), name varchar(30), pwd varchar(30))

pojo类: User @Data

核心配置:mybatis-config.xml,

UserMapper接口, UserMapper.xml实现类, 测试类(读配置文件,连接数据库,openSession()等等)


2. Spring整合Mybatis的方法一:注册SqlSessionTemplate的bean

  1. 原有的mybatis-config.xml:

环境:四个属性;mappers:映射接口的实现类UserMapper.xml的位置

保留: AliasType别名管理、Setting设置管理,其他的都放置到Spring-dao.xml配置中。


    
        
        
            
            
            
            
        
    



    

  1. 改变为: spring-dao.xml(本质是一个Spring的配置文件),可以注册Beans

其中,需要注册:数据源的类, SqlSessionFactory的类(可以连接mybatis-config.xml的地方), SqlSessionTemplate的类(以前的SqlSession)

<?xml version="1.0" encoding="UTF-8"?>



    
        
        
        
        
    

    
        


        
        
    


    
        
    

  1. 添加一个UserMapperImpl.java实现类:

    原因: 这个类需要在Spring的配置文件中注册bean,所以必须要有对应的实现类,

    ? 同时,要使用set注入,所以要添加一个SqlSessionTemplate私有属性和set方法。

public class UserMapperImpl implements UserMapper{
    private SqlSessionTemplate sqlSessionTemplate;
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
    public List getUser() {
        UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
        return mapper.getUser();
    }
}
  1. 添加一个applicationContext.xml配置文件,把之前的spring-dao.xml文件导入,实现数据库管理和dao层bean管理的分离
<?xml version="1.0" encoding="UTF-8"?>

    
    
        
    

  1. 测试类(相当于service层的调用)
@Test
public void test() throws IOException {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserMapper userMapperImpl = context.getBean("userMapperImpl", UserMapper.class);
    for (User user : userMapperImpl.getUser()) {
        System.out.println(user);
    }
}

3. Spring整合Mybatis的方法二:实现类继承SqlSessionDaoSupport并实现原有接口

实现的UserMapper.java:

public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
    public List getUser() {
        SqlSession sqlSession = getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.getUser();
    }
}

applicationContext.xml注册文件为: (注入的为: SSFactory, 不用写SqlSessionTemplate)


    

4. 流程:

流程:

  1. pom.xml: 依赖_(junit, spring-webmvc,数据库的: mysql-connector-java, mybatis, spring-jdbc, mybatis-spring, aspectjweaver), 配置build使java文件夹下的xml文件可以正常编译
  2. mybatis-config.xml配置typealias,setting;(mybatis的头文件)
  3. spring-mybatis.xml配置datasource, SqlSessionFactory(包括接入mybatis-config.xml的配置)(Spring头文件)
  4. applicationContext.xml, import配置文件spring-mybatis.xml; 管理注册的bean(Spring头文件)
  5. pojo, UserMapper接口,UserMapper.xml(mybatis头文件)
  6. UserMapper类,继承SqlSessionDaoSupport类并实现UserMapper接口,注入SqlSessionFactory, 只实现接口但注入时用SqlSessionTemplate。(对应上述两种方式)
  7. 在applicationContext.xml中注册UserMapping的bean
  8. 写测试类,CPX获取bean并执行

7. 声明式事务

两种方式:

  1. AOP声明式事务
  2. 编程式事务

1的步骤:

  • 配置一个声明式事务,id, class为固定的DataSourceTransactionManager,是用有参构造注入
  • 配置一个事务通知,相当于AOP中写一个Aspect和其中的Advice
  • 配置切面位置(使得某个方法为事务方法)