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

@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 知识非常的重要,各种框架都在大量的使用。

最新文章

  1. 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令
  2. 深入理解css中position属性及z-index属性
  3. http://poj.org/problem?id=3278(bfs)
  4. ajax中返回json数据有"
  5. Linux修改/etc/profile不生效的问题
  6. GoF--原型设计模式
  7. C语言指针(一)
  8. magic_quotes_runtime 与 magic_quotes_gpc
  9. Jupyter增加内核
  10. java web servlet
  11. Eclipse 代码自动补全
  12. HTML5新特性之WebRTC[转]
  13. express的学习,与使用
  14. AsyncLocal 与 async await
  15. 遍历php数组的几种方法
  16. idea2018注册
  17. DecimalFormat 的用法
  18. 【题解】 bzoj3693: 圆桌会议 (线段树+霍尔定理)
  19. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)
  20. extern介绍

热门文章

  1. [bzoj1733][Usaco2005 feb]Secret Milking Machine 神秘的挤奶机_网络流
  2. 查找担保圈-step7-提取未被包含过组的成员,得出结论
  3. Oracle - WITH AS -用于查询当月与上月数据
  4. STL string 常见用法详解
  5. THUSC2016
  6. 2019牛客暑期多校训练营(第二场) - B - Eddy Walker 2 - BM算法
  7. eclipse 创建Java web项目 Cannot change version of project facet Dynamic web module to xxx
  8. 搭建自己的框架WedeNet(五)
  9. $.ajax通用格式&&XMLHttpRequest对象属性和方法
  10. 【weixi】微信支付---微信公众号JSAPI支付