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);
}
}