mybatis.mapper-locations和@MapperScan的区别

3,070 阅读2分钟

1.@MapperScan

  1. @Mapper: 在使用SpringBoot整合mybatis的时候我们在每一个dao接口上都要加上@Mapper这个注解,表示将该接口在编译期间接口实例化,放到spring容器中。
  2. @MapperScan: 指定要扫描的dao接口类路径,来代替@Mapper注解,使用该注解,就不用在每一个dao接口上加@Mapper接口了。

2.mybatis.mapper-locations

作用:实现dao接口和对应的mapper配置文件之间的绑定。扫描Mapper接口对应的XML文件

如下所示:扫描的是resources下的mapper文件夹中所有的以Mapper为路径后缀,以.xml结尾的文件。
 mybatis.mapper-locations=classpath:mapper/*Mapper.xml
1. 当mapper接口和mapper接口对应的配置文件在

    -  命名上相同
    -  所在的路径相同
    
    则mapper-locations可以不用配置,配置也不会生效。


2. 当mapper接口和mapper接口对应的配置文件在

    -  命名上不同或
    -  所在的路径不同


    假如路径如下:
    mapper接口:com.liuzeyu.mapper.UserMapper.java
    配置文件:mapper.UserMapper.xml

    实现接口绑定需要在配置文件中配置:
        mybatis.mapper-locations=classpath:mapper/*Mapper.xml
        
3. 实现接口绑定还可以在mapper接口上,直接使用注解实现,比如在dao的方法接口上加@Select,@Update注解来实现。

3.mybatis.mapper-locations和@MapperScan的区别

  1. mybatis.mapper-locations

    mybatis.mapper-locations是用来实现接口和mapper配置文件的绑定的,每个mapper配置文件中的每一个SQL标签书写了我们操作数据库的sql语句, 一个XML文件对应一个接口,XML中有不同的SQL标签,每个SQL标签又对应接口中的一个接口方法,当我们实现接口和 XML文件绑定后,在程序编译期间,就可以直接通过接口.方法去操作数据库,那么在程序运行期间,就会将接口实例化,并动态的对接口中的方法进行实现,然后操作数据库。

    补充:每一个接口上都要加上@Repository

  2. @MapperScan

    @Mapper:将该接口在编译期间接口实例化,放到spring容器中。

    @MapperScan:指定要扫描的dao接口类路径,来代替@Mapper注解

  3. 区别

    @MapperScan只是帮我们实现了接口的实例化,但是这个实例化的对象中,没有任何方法,通俗来说就是没有任何功能。

    mybatis.mapper-locations就是用来将我们在mapper配置文件中实现的操作数据库的功能与接口中的方法绑定到一起来执行的,然后就可以直接通过获取的接口实例化对象直接调用对应的接口方法。