天天看點

Spring Boot的MyBatis注解:@MapperScan和@Mapper

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

繼續閱讀