SpringBoot的MyBatis注解:@MapperScan和@Mapper(一)
前言
1、目的
- Spring-boot项目使用MapperScan注解。
2、搜索关键词
- springboot整合mybatis
3、参看文章
- SpringBoot整合Mybatis完整详细版:https://blog.csdn.net/iku5200/article/details/82856621
这篇文章整理的比较详尽。
一、简述
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注解。
二、使用
2.1、@Mapper注解的使用
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面,代码如下所示:
-
@Mapper public interface StudentMapper { //todo }
2.2、@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); } }
2.3、使用@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); }
参看链接:http://www.mybatis.cn/archives/862.html
三、常见问题
3.1添加MapperScan后需要引入mybatis依赖
<!-- springboot mybatis 整合包 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!-- mysql 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
具体项目代码参看链接:https://blog.csdn.net/weixin_39843093/article/details/110509137
3.2@MapperScan还可以写xml文件吗
一般直接通过注解的形式,在mapper接口中写sql。
可以,下面这种方式没有试过,但是下面的博文里有例子。
yml里的mybatis注解就是告诉spring要到那里去找到xml文件
1 mybatis:
2 mapper-locations: classpath*:com/fengzi/bms/mapper/*.xml
总结就是,@Mapper或@MapperScan找到接口,yml或properties配置文件中的mybatis:找到xml
参看链接:https://blog.csdn.net/iku5200/article/details/82856621
3.3 配置文件配置
org.mybatis.spring.boot依赖如何配置文件,org.mybatis.spring.boot依赖如何配置数据源
直接在yml文件进行配置就行了。
参看链接:
https://www.cnblogs.com/zhuxiang1633/p/11685457.html
https://www.cnblogs.com/gavincoder/p/10105762.html
在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。