Mybatis 中的 @Mapper, @MapperScan, @Repository,mybatis.mapper-locations 的用法与区别
@Mapper
@Mapper是mybatis自身带的注解。
使用@Mapper注解的接口,可以让spring自动创建该接口实现类对象。(先和对应的mapper.xml绑定,然后生成实现类)
@MapperScan
有时候当我们有很多 mapper 接口时,就需要写很多 @Mapper 注解,这样很麻烦,有一种简便的配置化方法便是在 SpringBoot 启动类上使用 @MapperScan 注解。
@MapperScan 注解指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类。(先和对应的mapper.xml绑定,然后生成实现类)
@Repository
@Repository 是 Spring 的注解,用于声明一个 Bean。@Repository单独使用没用。可以这样理解,注解放在接口上本来就没有意义,spring 中在 mapper 接口上写一个 @Repository 注解,只是为了标识,要想真正是这个接口被扫描,必须使用 @ComponentScan 扫描注解。(启动类上的 @SpringBootApplication 注解中已经包含了 @ComponentScan 注解)
@Mapper 和 @Repository 的区别
-
@Mapper不需要配置扫描地址,可以单独使用,如果有多个mapper文件的话,可以在项目启动类中加入@MapperScan(“mapper文件所在包”)
-
@Repository不可以单独使用,否则会报错误,要想用,必须配置扫描地址
mybatis.mapper-locations
application.yml 中有 mybatis.mapper-locations 这一项,作用是是扫描Mapper接口对应的xml文件。