Spring Boot 集成MyBatis

在集成MyBatis前,我们先配置一个druid数据源。

Spring Boot 系列

  1. ​Spring Boot 入门​
  2. ​Spring Boot 属性配置和使用​
  3. ​Spring Boot 集成MyBatis​
  4. ​Spring Boot 静态资源处理​
  5. ​Spring Boot - 配置排序依赖技巧​
  6. ​Spring Boot - DevTools 介绍​

Spring Boot 集成druid

​druid​​有很多个配置选项,使用​​spring​​​ Boot 的配置文件可以方便的配置​​druid​​。​​application.yml​​配置文件中写上:

spring:
datasource:
name: test
url: jdbc:mysql://192.168.16.137:3306/test
username: root
password:
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20

​type: com.alibaba.druid.pool.DruidDataSource​​配置即可!

Spring Boot 集成MyBatis

Spring Boot 集成MyBatis有两种方式,一种简单的方式就是使用MyBatis官方提供的:

​mybatis-spring-boot-starter​

​mybatis-spring​​的配置方式,这种方式需要自己写一些代码,但是可以很方便的控制MyBatis的各项配置。

一、​​mybatis-spring-boot-starter​​方式

在pom.xml中添加依赖:

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>

​mybatis-spring-boot-starter​​依赖树如下: 

Spring Boot 集成MyBatis_分页

​mybatis​​使用的3.3.0版本,可以通过: 

​<mybatis.version>3.3.0</mybatis.version>​​属性修改默认版本。 

​mybatis-spring​​使用版本1.2.3,可以通过: 

​<mybatis-spring.version>1.2.3</mybatis-spring.version>​​修改默认版本。

在application.yml中增加配置:

mybatis: 
mapperLocations: classpath:mapper/*.xml
typeAliasesPackage: tk.mapper.model

除了上面常见的两项配置,还有:

  • mybatis.config:mybatis-config.xml配置文件的路径
  • mybatis.typeHandlersPackage:扫描typeHandlers的包
  • mybatis.checkConfigLocation:检查配置文件是否存在
  • mybatis.executorType:设置执行模式(

​SIMPLE, REUSE, BATCH​

  • ),默认为

​SIMPLE​

二、mybatis-spring方式

​mybatis​​依赖和​​mybatis-spring​​依赖。​​MyBatisConfig​​配置类:

/**
* MyBatis基础配置
*
* @author liuzh
* @since
@Configuration
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer

@Autowired
DataSource dataSource;

@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("tk.mybatis.springboot.model");

//分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("params", "count=countSql");
pageHelper.setProperties(properties);

//添加插件
bean.setPlugins(new Interceptor[]{pageHelper});

//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}

@Bean
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new

​SqlSessionFactory​​和一个​​SqlSessionTemplate​​,为了支持注解事务,增加了​​@EnableTransactionManagement​​注解,并且反回了一个​​PlatformTransactionManager​​Bean。​​MapperScannerConfigurer​​,如果我们想要扫描MyBatis的Mapper接口,我们就需要配置这个类,这个配置我们需要单独放到一个类中。

/**
* MyBatis扫描接口
*
* @author liuzh
* @since
@Configuration
//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig

@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
mapperScannerConfigurer.setBasePackage("tk.mybatis.springboot.mapper");
return

​@AutoConfigureAfter(MyBatisConfig.class)​​,必须有这个配置,否则会有异常。原因就是这个类执行的比较早,由于​​sqlSessionFactory​​还不存在,后续执行出错。

做好上面配置以后就可以使用MyBatis了。

关于分页插件和通用Mapper集成

分页插件作为插件的例子在上面代码中有。

​MapperScannerConfigurer​​的时候使用​​tk.mybatis.spring.mapper.MapperScannerConfigurer​​即可,配置属性使用​​Properties​​。

Spring Boot集成MyBatis的基础项目

我上传到github一个采用第二种方式的集成项目,并且集成了分页插件和通用Mapper,项目包含了简单的配置和操作,仅作为参考。

项目地址:​​https://github.com/abel533/MyBatis-Spring-Boot​

分页插件和通用Mapper的相关信息可以通过上面地址找到。