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

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

圖片來源網路

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

工程的目錄結構

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

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

效果展示

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

執行sql的顯示


分享到:


相關文章: