[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
- 原有的mybatis-config.xml:
环境:四个属性;mappers:映射接口的实现类UserMapper.xml的位置
保留: AliasType别名管理、Setting设置管理,其他的都放置到Spring-dao.xml配置中。
- 改变为: spring-dao.xml(本质是一个Spring的配置文件),可以注册Beans
其中,需要注册:数据源的类, SqlSessionFactory的类(可以连接mybatis-config.xml的地方), SqlSessionTemplate的类(以前的SqlSession)
<?xml version="1.0" encoding="UTF-8"?>
-
添加一个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();
}
}
- 添加一个applicationContext.xml配置文件,把之前的spring-dao.xml文件导入,实现数据库管理和dao层bean管理的分离
<?xml version="1.0" encoding="UTF-8"?>
- 测试类(相当于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. 流程:
流程:
- pom.xml: 依赖_(junit, spring-webmvc,数据库的: mysql-connector-java, mybatis, spring-jdbc, mybatis-spring, aspectjweaver), 配置build使java文件夹下的xml文件可以正常编译
- mybatis-config.xml配置typealias,setting;(mybatis的头文件)
- spring-mybatis.xml配置datasource, SqlSessionFactory(包括接入mybatis-config.xml的配置)(Spring头文件)
- applicationContext.xml, import配置文件spring-mybatis.xml; 管理注册的bean(Spring头文件)
- pojo, UserMapper接口,UserMapper.xml(mybatis头文件)
- UserMapper类,继承SqlSessionDaoSupport类并实现UserMapper接口,注入SqlSessionFactory,或 只实现接口但注入时用SqlSessionTemplate。(对应上述两种方式)
- 在applicationContext.xml中注册UserMapping的bean
- 写测试类,CPX获取bean并执行
7. 声明式事务
两种方式:
- AOP声明式事务
- 编程式事务
1的步骤:
- 配置一个声明式事务,id, class为固定的DataSourceTransactionManager,是用有参构造注入
- 配置一个事务通知,相当于AOP中写一个Aspect和其中的Advice
- 配置切面位置(使得某个方法为事务方法)