mybatis进阶4——与Spring的集成

1.概述

MyBatis-Spring用于将MyBatis代码无缝地整合到Spring中。

  • Spring将会加载必要的MyBatis工厂类和session类
  • 提供一个简单的方式来注入MyBatis数据映射器和SqlSession到业务层的bean中
  • 方便集成spring事务
  • 翻译MyBatis的异常到Spring的DataAccessException异常(数据访问异常)中

MyBatis-Spring兼容性


mybatis进阶4——与Spring的集成_第1张图片

2.集成配置最佳实践

step1.准备一个Spring项目

在pom.xml中添加相关Spring依赖。

step2.在pom.xml文件中添加MyBatis-Spring的依赖

        
        
            org.mybatis
            mybatis-spring
            1.3.0
        

step3.配置SqlSessionFactoryBean

在applicationContext.xml进行配置。

    
    
        
        
        
    

step4.配置MapperScannerConfigurer

    
    
        
    

step5.配置事务

3.集成的原理分析

3.1 SqlSessionFactoryBean

在MyBatis-Spring中,SqlSessiongFacotyBean是用于创建SqlSessionFactory的。

  • dataSource:用于配置数据源,该属性为必选项,必须通过这个属性配置数据源
  • mapperLocations:配置SqlSessionFactoryBean扫描XML映射文件的路径,可以使用Ant风格的路径进行配置
  • configLocation:用于配置mybatis config XML的路径,除了数据源外,对MyBatis的各种配置仍然可以通过这种方式进行,并且配置MyBatis settings时只能使用这种方式。但配置文件中任意环境、数据源和MyBatis的任务管理器都会被忽略。
  • typeAliasesPackage:配置包中类的别名,配置后,包中的类在XML映射文件中使用时可以省略包名部分,直接使用类名。这个配置不支持Ant风格的路径,当需要配置多个包路径时可以使用分号或逗号进行分隔。

3.2 MapperScannerConfigurer

通过MapperScannerConfigurer类自动扫描所有的Mapper接口,使用时可以直接注入接口。
MapperScannerConfigurer中常配置以下两个属性:

  • basePackage:用于配置基本的包路径。可以使用分号或逗号作为分隔符设置多于一个的包路径,每个映射器将会在指定的包路径中递归地被搜索到。
  • annotationClass:用于过滤被扫描的接口,如果设置了该属性,那么MyBatis的接口只有包含注解才会被扫描进去。

4.集成测试

说明:jdk1.10使用@Resource测试有问题,换成jdk1.8就可以了。因此jdk1.10测试时用的是@Autowired。

服务类:

public interface UserService {
    TUser getUserById(Integer id);
}
@Service
public class UserServiceImpl  implements UserService{
    @Autowired
    private TUserMapper userMapper;

    @Override
    public TUser getUserById(Integer id) {
        return userMapper.selectByPrimaryKey(id);
    }
}

applicationContext.xml自动扫描service:

   

测试:

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = "file:src/main/resources/applicationContext.xml")
@ContextConfiguration("classpath:applicationContext.xml")
public class MybatisSpringTest {
    @Autowired
    private UserService us;

    @Test
    public void TestSpringMyBatis(){
        System.out.println(us.getUserById(1).toString());
    }

测试结果:

17:56:47.022 [main] DEBUG c.e.m.m.T.selectByPrimaryKey - ==>  Preparing: select id, user_name, real_name, sex, mobile, email, note, position_id from t_user where id = ? 
17:56:47.055 [main] DEBUG c.e.m.m.T.selectByPrimaryKey - ==> Parameters: 1(Integer)
17:56:47.082 [main] DEBUG c.e.m.m.T.selectByPrimaryKey - <==      Total: 1
17:56:47.083 [main] DEBUG c.a.druid.pool.PreparedStatementPool - {conn-10001, pstmt-20000} enter cache
17:56:47.084 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2bcec6a6]
TUser [id=1, userName=lison, realName=李小宇, sex=1, mobile=186995587422, [email protected], note=lison的备注, positionId=1]

参考

  • 1)享学课堂Lison老师笔记

你可能感兴趣的:(mybatis进阶4——与Spring的集成)