Spring Boot和MyBatis的整合有两种方案:
1. 使用MyBatis官方提供的Spring Boot整合包实现,地址:https://github.com/mybatis/spring-boot-starter
2. 使用MyBatis和Spring的整合方式,也就是我们常规的整合方式。
推荐使用第二种,第一种在做后续的扩展不太方便,采用第二种,详细代码如下
第一步:创建MyBatis的配置文件
Spring Boot所谓的零配置是指和Spring相关的配置零配置,尽可能省去一切和Spring相关xml配置,但是MyBatis自身的配置还是要的,它和Spring有没有啥关系,只不过两者进行整合,但它还是一个独立的个体,配置MyBatis的基本xml文件:mybatis-config.xml。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- springboot省去的xml是指不需要Spring相关的xml配置,MyBatis自己的xml配置还是要保留 -->
<settings>
<!-- 驼峰的自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql" />
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true" />
</plugin>
<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
<!--主键自增回写方法,默认值MYSQL,详细说明请看文档 -->
<property name="IDENTITY" value="MYSQL" />
<!--通用Mapper接口,多个通用接口用逗号隔开 -->
<property name="mappers" value="com.github.abel533.mapper.Mapper" />
</plugin>
</plugins>
</configuration>
第二步:配置数据源
MyBatis是对数据库的操作,涉及到连接池,所以需要数据源,可以直接在Spring Boot的启动类中进行配置
package com.hhu.cart;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.jolbox.bonecp.BoneCPDataSource;
@Configuration
@SpringBootApplication
//@ComponentScan(basePackages="com.hhu")
@PropertySource(value={"classpath:env.properties","classpath:httpclient.properties","classpath:jdbc.properties","classpath:log4j.properties"}, ignoreResourceNotFound=true)
public class TaotaoApplication {
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.driverClassName}")
private String jdbcDriverClassName;
@Bean(destroyMethod="close")
public DataSource dataSource() {
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
boneCPDataSource.setUsername(jdbcUsername);
boneCPDataSource.setPassword(jdbcPassword);
boneCPDataSource.setJdbcUrl(jdbcUrl);
boneCPDataSource.setDriverClass(jdbcDriverClassName);
//设置和数据库连接池中空间连接的时间剪个,默认240,如果取消则设为0
boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
//设置连接池中未使用的连接最大存活时间,默认值60,如果永远存活则设为0
boneCPDataSource.setIdleMaxAgeInMinutes(30);
//每个分区最大的连接数
boneCPDataSource.setMaxConnectionsPerPartition(100);
//每个区最小的连接数
boneCPDataSource.setMinConnectionsPerPartition(5);
return boneCPDataSource;
}
public static void main(String[] args) {
SpringApplication.run(TaotaoApplication.class, args);
}
}
第三步:配置Spring对MyBatis管理的配置
这一步其实就是通过Spring对MyBatis的管理获取SqlSessionFactoryBean,代码如下:
package com.hhu.cart.spring.config;
import javax.sql.DataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
/**
* MyBatis和Spring的整合,以往多是xml的配置方式,这里改为注解的方式
* @author Weiguo Liu
* @data 2017年11月27日
*/
@Configuration
public class MyBatisConfig {
/*
* 在Application中创建了DateSource,这里配置MyBatis时直接注入即可
* 如果这里不使用@Autowired注入,那么在下面sqlSessionFactoryBean
* 方法中可以直接以形参的方式直接写,Spring会自动注入
*/
@Autowired
private DataSource dataSource;
/*
* 主要作用就是创建这个SqlSessionFactory
*/
@Bean
@ConditionalOnMissingBean //当容器里没有指定的Bean的情况下创建该对象
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// 设置数据源
sqlSessionFactoryBean.setDataSource(dataSource);
// 设置mybatis的主配置文件
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource mybatisConfigXml = resolver.getResource("classpath:mybatis/mybatis-config.xml");
sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
// 设置别名包
sqlSessionFactoryBean.setTypeAliasesPackage("com.hhu.cart.pojo");
return sqlSessionFactoryBean;
}
}
第四步:配置MyBatis的扫描类
MyBatis对数据库的操作少不了SQL语句的mapper文件,这里主要实现对mapper文件的扫描。
package com.hhu.cart.spring.config;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration//知名它是一个配置类
@AutoConfigureAfter(MyBatisConfig.class) //保证在MyBatisConfig实例化(存在SqlSessionFactory)之后再实例化该类
public class MapperScannerConfig {
// mapper接口的扫描器
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.hhu.cart.mapper");
return mapperScannerConfigurer;
}
}
其他的和以前的SSM整合大同小异