> 文档中心 > 04Spring整合MyBatis、声明式事务

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

                                           <!--     -->