• Mapper层注解讲解


    1 Mapper层注解

    Mapper层注解@Reponsitory@Mapper经常使用但是不知道区别,就学习记录下

    1.1 @Repository

    @Repository@Repository的作用与@Controller@Service的作用都是把对象交给Spring管理。@Repository是标注在Dao层接口上,作用是将接口的一个实现类交给Spring管理。

    注意

    • 使用这个注解的前提是必须在启动类上添加@MapperScan("Mapper接口层路径") 注解

    这个@Repository完全可以省略不写,也完全可以实现自动注入,但是在IDEA中会存在一个红色的波浪线。原因如下:

    • Spring配置文件中配置了MapperScannerConfiguer这个Bean,它会扫描持久层接口创建实现类并交给Spring管理。
    • SpringBoot的启动类上标注了@MapperScanner,它的作用和上面的MapperScannerConfiguer作用一样

    1.2 @Mapper

    @Mapper: 这个注解一般使用在Dao层接口上,相当于一个mapper.xml文件,它的作用就是将接口生成一个动态代理类。加入了@Mapper注解,目的就是为了不再写mapper映射文件。这个注解就是用来映射mapper.xml文件的。

    使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl

    注意
    Dao层不要存在相同名字的接口,也就是在Dao不要写重载。因为mapper文件是通过id与接口进行对应的,如果写了两个同名的接口,就会导致mapper文件映射出错。

    1.3 @Mapper和@MapperScan区别

    @Mapper注解写在每个Dao接口层的接口类上,@MapperScan注解写在SpringBoot的启动类上。

    当我们的一个项目中存在多个Dao层接口的时候,此时我们需要对每个接口类都写上@Mapper注解,非常的麻烦,此时可以使用@MapperScan注解来解决这个问题。让这个接口进行一次性的注入,不需要在写@Mapper注解

    @SpringBootApplication
    @MapperScan("cn.gyyx.mapper")
    // 这个注解可以扫描 cn.gyyx.mapper 这个包下面的所有接口类,可以把这个接口类全部的进行动态代理。
    public class WardenApplication {
        public static void main(String[] args) {
            SpringApplication.run(WardenApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    @Mapper注解相当于是@Reponsitory注解和@MapperScan注解的和,会自动的进行配置加载。
    @MapperScan注解多个包,@Mapper只能把当前接口类进行动态代理。

    在实际开发中,如何使用@Mapper、@MapperSacn、@Repository注解

    • SpringBoot的启动类上给定@MapperSacn注解。此时Dao层可以省略@Mapper注解,当让@Repository注解可写可不写,最好还是写上。
      当使用@Mapper注解的时候,可以省略@MapperSacn以及@Repository

    建议:

    • 以后在使用的时候,在启动类上给定@MapperScan("Dao层接口所在的包路径")。在Dao层上不写@Mapper注解,写上@Repository即可

    1.4 动态SQL注解

    MyBatis的动态SQL注解开发是基于Java注解和接口方法的,通过在接口方法上使用注解,可以在运行时生成对应的SQL语句。MyBatis会根据接口方法的注解来生成SQL,并将它们与数据库进行交互。它可以在实体类或映射文件中使用注解来配置映射关系。常用的注解包括 @Select、@Update、@Insert、@Delete等,它们分别用于配置查询、更新、插入和删除操作。通过这些注解,我们可以直接在实体类或映射文件中定义 SQL 语句,而不需要像传统的 MyBatis 配置方式那样在映射文件中使用