SpringBoot整合MyBatis+詳細打印執行SQL語句

圖片來源網路

為啥寫這篇文章呢,有人可能會說springBoot的mybatis的starter都有了寫這篇文章不是多此一舉嗎?難道是真的嗎?其實我一開始也是使用mybatis的starter的,但是當我需要配置一個讓mybatis可以將執行sql語句打印出來的配置時,難到了我,所以才想和大家分享一下springBoot整合MyBatis的方法,如果大家有更好地方法,歡迎討論。首先看一下項目的目錄結構

工程的目錄結構

SpringBoot整合Mybatis的思路

1.設置數據源DataSource,我們使用@ConfigurationProperties來加載yml裡數據源的配置

2.配置SqlSessionFactory在裡面配置加載的xml配置文件和數據源

3.使用@MapperScan來掃描加載DAO層接口

4.在yml中配置相關參數

5.mybatis與數據庫對應的文件生成可以參照之前寫的還在手寫Mybatis的xml文件,那你就OUT了

代碼實現

1.引入相關jar

org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java 6.0.6 com.alibaba druid 1.0.29 org.projectlombok lombok 1.16.18

2.定義一個類,繼承DruidDataSource,負責數據源的屬性加載和初始化數據源

//為代碼清晰去除相關引用 @ConfigurationProperties(prefix = DataSourceSettings.PREFIX) @Data public class DataSourceSettings extends DruidDataSource { public static final String PREFIX = "druid.dataSource"; private String mapperLocations; }

3.設置掃描mapper的路徑和初始化SqlSessionFactoryBean

//為代碼清晰去除相關引用 @Configuration @MapperScan(basePackages = {"com.example.demo.mapper"}) @EnableConfigurationProperties(DataSourceSettings.class) public class DataSourceAutoConfiguration { //DataSourceSettings繼承DruidDataSource,所以也是數據源 @Autowired DataSourceSettings settings; //SqlSessionFactoryBean相關配置 @Bean public SqlSessionFactoryBean sqlSessionFactory(ApplicationContext applicationContext) throws IOException { SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); //配置數據源 sqlSessionFactory.setDataSource(settings); //日誌主要為打印SQL語句 Properties properties = new Properties(); properties.setProperty("logImpl", "STDOUT_LOGGING"); sqlSessionFactory.setConfigurationProperties(properties); //加載xml的路徑配置 sqlSessionFactory.setMapperLocations( applicationContext.getResources(settings.getMapperLocations())); return sqlSessionFactory; } //事務管理器配置 @Bean public DataSourceTransactionManager mybatisTransactionManager() { DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); dataSourceTransactionManager.setDataSource(settings); return dataSourceTransactionManager; } }

4.編寫yml配置

druid: dataSource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8 username: root password: initialSize: 5 maxActive: 200 minIdle: 5 maxWait: 60000 validationQuery: SELECT 1 FROM DUAL removeAbandoned: true removeAbandonedTimeout: 180 mapperLocations: classpath*:mapper/**/*.xml logging: ##配置sql打印日誌 level: com.example.demo.mapper: DEBUG org.springframework.web: DEBUG java.sql: DEBUG org.mybatis.spring: DEBUG

5.SpringBoot啟動類

import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication @EnableTransactionManagement //啟動事務管理 public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

效果展示

執行sql的顯示