04Spring整合MyBatis、声明式事务
目录
pom.xml
文件目录
UserMapper
UserMapper.xml
UserMapperImpl 【工具类】
User
applicationContext.xml
db.properties 【工具类】
spring-dao.xml 【建议在里面写set 和 typeAliases 】
mybatis-config.xml 【工具类】 【以加事务】
测试1
方式一
UserMapperImpl1
方式二
UserMapperImpl2
测试
方式三【常用】
自动扫描 【工具类】
此时 spring-dao.xml中
applicationContext.xml
测试
Spring中的事务管理
配置好事务管理器后我们需要去配置事务的通知 和 配置AOP
pom.xml
junit junit 4.12 org.mybatis mybatis 3.5.7 mysql mysql-connector-java 5.1.47 org.springframework spring-webmvc 5.3.13 org.springframework spring-jdbc 5.3.12 org.aspectj aspectjweaver 1.9.7 org.mybatis mybatis-spring 2.0.6 org.projectlombok lombok 1.18.20 src/main/resources **/*.properties **/*.xml **/*.png false src/main/java **/*.properties **/*.xml false
文件目录
UserMapper
public interface UserMapper { List getUserList();}
UserMapper.xml
select * from user;
UserMapperImpl 【工具类】
public class UserMapperImpl implements UserMapper { //我们的所有操作,都使用sqLSession来执行,在原来,现在都使用sqLSessionTemplate; private SqlSessionTemplate sqlSessionTemplate; public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSessionTemplate = sqlSessionTemplate; } @Override public List getUserList() { UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class); List userList = mapper.getUserList(); return userList; }}
User
@Data@AllArgsConstructor@NoArgsConstructorpublic class User1 { private int id; private String name; private String pwd;}
applicationContext.xml
db.properties 【工具类】
driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&serverTimezone=UTC&characterEncoding=utf8username=rootpassword=123456
spring-dao.xml 【建议在里面写set 和 typeAliases 】
mybatis-config.xml 【工具类】 【以加事务】
<!-- -->
测试1
@Test public void test2(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper userMapper = context.getBean("userMapper", UserMapper.class); for (User1 user1 : userMapper.getUserList()) { System.out.println(user1); } }
方式一
UserMapperImpl1
public class UserMapperImpl implements UserMapper { //我们的所有操作,都使用sqLSession来执行,在原来,现在都使用sqLSessionTemplate; private SqlSessionTemplate sqlSessionTemplate; public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSessionTemplate = sqlSessionTemplate; } @Override public List getUserList() { UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class); List userList = mapper.getUserList(); return userList; }}/* 注册 */
方式二
UserMapperImpl2
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper { @Override public List select() { //SqlSession sqlSession = getSqlSession(); //UserMapper mapper = sqlSession.getMapper(UserMapper.class); //UserMapper mapper = getSqlSession().getMapper(UserMapper.class); //最精简版 return getSqlSession().getMapper(UserMapper.class).getUserList(); //getUserList()自己的 dao 方法 }}/* 注册 */
测试
@Test public void test2(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper userMapper = context.getBean("userMapper", UserMapper.class); for (User1 user1 : userMapper.getUserList()) { System.out.println(user1); } } @Test public void test3(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper userMapper = context.getBean("userMapper2", UserMapper.class); for (User1 user1 : userMapper.getUserList()) { System.out.println(user1); } }
方式三【常用】
自动扫描 【工具类】
此时 spring-dao.xml中
applicationContext.xml
测试
@Test public void test3(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper userMapper = context.getBean("userMapper2", UserMapper.class); for (User1 user1 : userMapper.getUserList()) { System.out.println(user1); } }
Spring中的事务管理
要么都成功,要么都失败
十分重要,涉及到数据一致性
确保完整性和一致性
事务的ACID原则:
原子性
一致性
隔离性
多个业务可能操作一个资源,防止数据损坏
持久性
事务一旦提交,无论系统发生什么问题,结果都不会被影响。
Spring中的事务管理
编程式事务管理 需要在代码中,进行事务的管理
将事务管理代码嵌到业务方法中来控制事务的提交和回滚
缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码
声明式事务管理 AOP 横切 不影响原来的代码
一般情况下比编程式事务好用。
将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。
将事务管理作为横切关注点,通过aop方法模块化。Spring中通过Spring AOP框架支持声明式事务管理。
使用Spring管理事务,注意头文件的约束导入 : tx
xmlns:tx="http://www.springframework.org/schema/tx" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
配置好事务管理器后我们需要去配置事务的通知 和 配置AOP
<!-- -->