maven依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
整合Mybatis的两种方式
手动装配SqlSessionFactoryBean
注意:使用手动装配
SqlSessionFactoryBean
,一定要注意,
application.yml
中的
mybatis
配置是无效的,所有
mybatis
的配置都需要在代码中配置。
Bean配置类
@Configuration
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*Mapper.xml"));
return sqlSessionFactoryBean;
}
}
mybatis-config.xml配置sql打印
<?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>
<settings>
<!-- 打印查询语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
</configuration>
自动装配MybatisAutoConfiguration
注意:没有自定义
SqlSessionFactoryBean
时,Springboot会使用
MybatisAutoConfiguration
自动装配
SqlSessionFactoryBean
,mybatis的配置项需要在application.yml配置。
MybatisAutoConfiguration源码
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {}
application.yml配置sql打印
注释的内容同样可以达到效果,只是额外需要
mybatis-config.xml
配置文件
#mybatis:
# config-location: classpath:mybatis-config.xml
# mapper-locations: classpath:mapper/*Mapper.xml
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*Mapper.xml
一个坑
网上的博客基本上都是说在
application.yml
中配置
mybatis
,就可以打印
sql
,但是前提是使用
Springboot
自动装配的
MybatisAutoConfiguration
时,才有效。因为
application.yml
中的
mybatis
配置是针对自动装配时生效。
启动类
@SpringBootApplication
@ComponentScan(basePackages = {"com.edu.*"})
@MapperScan(basePackages = {"com.edu.dao"})
@EnableTransactionManagement
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}