本文来说下关于@Mapper注解的几个问题
@Mapper注解
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面
@Mapper
public interface StudentMapper {
List<Student> selectByStudentSelective();
}
@MapperScan注解
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加
/**
* 程序的
* 主启动类
*/
@MapperScan("cn.wideth.mapper")
@SpringBootApplication
public class PdaAndIpadApplication {
public static void main(String[] args) {
SpringApplication.run(PdaAndIpadApplication.class, args);
}
}
添加@MapperScan(“cn.wideth.mapper”)注解以后,cn.wideth.mapper包下面的接口类,在编译之后都会生成相应的实现类。
在springboot项目中,@Mapper注解和@MapperScan注解都是在这个JAR包中导入的。也就是下面这个starter。
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
@Mapper注解用来发现单个mapper,@MapperScan注解用来发现多个启动类所在包以及子包下面的mapper。
使用@MapperScan注解多个包
实际用的时候根据自己的包路径进行修改
/**
* 程序的
* 主启动类
*/
@MapperScan({"cn.wideth.mapper","cn.wideth.mapper2"})
@SpringBootApplication
public class PdaAndIpadApplication {
public static void main(String[] args) {
SpringApplication.run(PdaAndIpadApplication.class, args);
}
}
@MapperScan注解扫描非启动类下面的包
如果是使用多模块来开发springboot程序,可能存在包,和启动类所在的包不一致的问题。 如果dao接口类没有在Spring Boot主程序可以扫描的包或者子包下面,可以使用如下方式进行配置。
/**
* 程序的
* 主启动类
*/
@MapperScan({"cn.wideth.mapper","com.wideth.mapper"})
@SpringBootApplication
public class PdaAndIpadApplication {
public static void main(String[] args) {
SpringApplication.run(PdaAndIpadApplication.class, args);
}
}
本文小结
本文分析了一下@Mapper注解以及@MapperScan注解扫包的问题。