1、Spring Boot與MyBatis融合的沖突問題:
Spring家族的使命就是為了簡化而生,但是随着Spring的發展壯大,有點事與願違了。為了堅持初心,Spring家族祭出了一大殺器—Spring Boot。Spring Boot的核心理念是:不建議使用xml檔案配置。但是,這對MyBatis來說進退兩難,因為MyBatis離不開xml,需要xml來配置sql語句。為了迎合Spring Boot的發展理念,MyBatis官方開發了mybatis-spring-boot-starter,我們要想更少的依賴xml,需要深入的研究mybatis-spring-boot-starter中的用法,尤其是@MapperScan和@Mapper的用法。
2、@MapperScan和@Mapper簡介:
在不使用@MapperScan前,我們需要直接在Mapper類上面添加注解@Mapper,這種方式要求每一個Mapper類都需要添加此注解,非常麻煩,屬于重複勞動。通過使用@MapperScan注解,可以讓我們不用為每個Mapper類都添加@Mapper注解。
3、@Mapper注解的使用
作用:在接口類上添加了@Mapper,在編譯之後會生成相應的接口實作類
添加位置:接口類上面,代碼如下所示:
@Mapper
public interface StudentMapper {
//todo
}
4、@MapperScan注解的使用
作用:指定要變成實作類的接口所在的包,包下面的所有接口在編譯之後都會生成相應的實作類
添加位置:是在Springboot啟動類上面添加,
@SpringBootApplication
@MapperScan("cn.mybatis.mappers")
public class SpringbootMybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
}
}
添加@MapperScan(“cn.mybatis.mappers”)注解以後,cn.mybatis.mappers包下面的接口類,在編譯之後都會生成相應的實作類
另外,使用@MapperScan注解可以作用到多個包,代碼如下所示:
@SpringBootApplication
@MapperScan({"cn.mybatis.mappers.class","cn.mybatis.mappers.student"})
public class SpringbootMybatisDemoApplication{
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
}
}
5、使用@MapperScan注解注意事項
Spring Boot不建議使用XML檔案配置,MyBatis則有點犯難了,官方推薦使用mybatis-spring-boot-starter與Spring Boot整合。
MyBatis官方建議:直接在Mapper類中采用注解的形式操作資料庫,通過@MapperScan掃描制定的映射器存放路徑,最終不需要加任何注解,也不需要對應的xml檔案來配置sql語句。代碼如下形式:
//不需要加任何注解,也不需要對應的xml檔案
public interface UserMapper{
@Select("select * from user")
List<User> getUserList(String userId);
}