• 详解 @MapperScan 注解和 @Mapper 注解


    实际上,这是一个非常简单的问题。我并没有一口回绝他,让他去百度。因为,新人都会经历这个过程。好不容易,问你一次,你直接让他百度,会打击到他的。而且,别人会觉得你摆架子。

    @Mapper 这个注解的定义如下:

    @Documented
    @Inherited
    @Retention(RUNTIME)
    @Target({ TYPE, METHOD, FIELD, PARAMETER })
    public @interface Mapper {
      // Interface Mapper
    }

    @Mapper 一般我们用在接口上,代码如下:

    @Mapper
    public interface UserDAO {
        @Select("select * from user where name = #{name}")
        User find(String name);
        @Select("select * from user where name = #{name} and pwd = #{pwd}")
        /**
          * 对于多个参数来说,每个参数之前都要加上@Param注解,
          * 要不然会找不到对应的参数进而报错
          */
        User login(@Param("name")String name, @Param("pwd")String pwd);
    }

    使用 @Mapper,最终 Mybatis 会有一个拦截器,会自动的把 @Mapper 注解的接口生成动态代理类。这点可以在 MapperRegistry 类中的源代码中查看。

    @Mapper 注解针对的是一个一个的类,相当于是一个一个 Mapper.xml 文件。而一个接口一个接口的使用 @Mapper,太麻烦了,于是 @MapperScan 就应用而生了。@MapperScan 配置一个或多个包路径,自动的扫描这些包路径下的类,自动的为它们生成代理类。

    @SpringBootApplication  
    @MapperScan({"com.xttblog.mapper","com.xttblog.dao"})
    public class XttblogApp {  
        public static void main(String[] args) {  
           SpringApplication.run(XttblogApp.class, args);  
        }  
    }

    当使用了 @MapperScan 注解,将会生成 MapperFactoryBean, 如果没有标注 @MapperScan 也就是没有 MapperFactoryBean 的实例,就走 @Import 里面的配置,具体可以在 AutoConfiguredMapperScannerRegistrar 和 MybatisAutoConfiguration 类中查看源代码进行分析。

    由此可见,动态代理和 AOP 知识非常的重要,各种框架都在大量的使用。

  • 相关阅读:
    Schema约束
    gitalk报错问题
    SQL语句中单引号、双引号和反引号的区分
    用Eclipse上传项目到github
    git服务器搭建
    使用IntelliJ IDEA和Eclipse导入Github项目
    事务隔离级别的简单理解
    大公司里怎样开发和部署前端代码?
    页面无刷新Upload File
    MVC 文件上传问题
  • 原文地址:https://www.cnblogs.com/muxi0407/p/11847794.html
Copyright © 2020-2023  润新知