1. 程式人生 > >MyBatis和Spring整合的奧祕

MyBatis和Spring整合的奧祕

*本篇部落格原始碼分析基於Spring 5.1.16.RELEASE,mybatis-spring 2.0.0,較高版本的mybatis-spring原始碼有較大區別。* Spring之所以是目前Java最受歡迎的框架,幾乎所有的Java專案都在使用,就是因為它良好的生態,很多技術可以與之整合,為什麼其他技術可以和Spring相整合,就是因為Spring擁有很多擴充套件點,閱讀Spring原始碼,有一部分原因就是有必要清楚的知道Spring提供了哪些擴充套件點,而怎麼合理的利用這些擴充套件點,就需要了解其他技術是如何利用這些擴充套件點的。 今天我就來帶著大家看下,國內最流行的資料庫框架MyBatis是如何利用Spring的擴充套件點的,從而雙劍合璧,讓Spring+MyBatis成為國內最流行的技術搭配。 ### 前置知識 為了後面的故事可以順利展開,很有必要先給大家介紹下,閱讀mybatis-spring原始碼的前置知識,沒有這些前置知識閱讀mybatis-spring原始碼是寸步難行。 #### mybatis-spring使用 因為現在有了SpringBoot,所以Mybatis和Spring的整合變得非常簡單,但是如果沒有SpringBoot,該怎麼整合呢?我翻閱了百度的前幾頁,不知道是不是搜尋關鍵詞問題,幾乎全是用XML的方式去整合Mybatis和Spring的,零XML配置,它不香嗎? 程式碼結構: ![image.png](https://upload-images.jianshu.io/upload_images/15100432-c2a982e6c0145a65.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 具體實現: ``` ``` ``` @MapperScan("com.codebear.mapper") @ComponentScan public class AppConfig { @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"); dataSource.setUsername("root"); dataSource.setPassword("123456"); SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); return factoryBean.getObject(); } } ``` ``` @Repository public interface StudentMapper { @Select("select * from student")