@Mapper与@MapperScan的区别
@Mapper注解
作用:
在接口类上添加了@Mapper
,在编译之后会生成相应的接口实现类
添加位置:
接口类上;
案例:
@Mapper
public interface UserDAO {
//代码
}
注意:
若想要每个接口都要变成实现类,那么需要在每个接口类上都加上@Mapper
注解,这样比较麻烦;
所以为了解决这个问题我们通过使用@MapperScan
注解来解决;
@MapperScan注解
作用:
指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:
Springboot
启动类上;
案例:
@SpringBootApplication
@MapperScan("com.lexed.dao")//要扫描的接口所在包
public class SpringbootStarter {
public static void main(String[] args) {
SpringApplication.run(SpringbootStarter.class, args);
}
}
注意:
添加@MapperScan("com.lexed.dao")
注解以后,com.lexed.dao
包下面的接口类,在编译之后都会生成相应的实现类
@MapperScan
注解多个包时:
包与包之间用逗号隔开
案例:
@SpringBootApplication
@MapperScan("com.lexed.dao","com.lexed.demo")//要扫描的接口所在包
public class SpringbootStarter {
public static void main(String[] args) {
SpringApplication.run(SpringbootStarter.class, args);
}
}
@MapperScan
支持表达式,扫描包和其子包中的类时:
即dao
接口类没有在Spring Boot
主程序可以扫描的包或者子包下面,可以使用如下方式进行配置:
案例:
@SpringBootApplication
@MapperScan("com.lexed.*.mapper","org.lexed.*.mapper")
public class SpringbootStarter {
public static void main(String[] args) {
SpringApplication.run(SpringbootStarter.class, args);
}
}
总结:
区别 | @Mapper | @MapperScan |
---|---|---|
添加位置 | 接口类上 | 启动类上 |
操作数量 | 是对单个接口类的注解,单个操作 | 是对整个包下的所有的接口类的注解,是批量的操作 |
注意:
使用 @MapperScan
注解后,接口类 就不需要再使用 @Mapper
注解;