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

原文地址:https://www.cnblogs.com/muxi0407/p/11847794.html

时间: 2024-11-11 14:51:53

详解 @MapperScan 注解和 @Mapper 注解的相关文章

详解spring boot mybatis全注解化

本文重点介绍spring boot mybatis 注解化的实例代码 1.pom.xml //引入mybatis <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> //

SpringMVC详解(三)------基于注解的入门实例

前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能这样来进行开发的.那么这篇博客我们就讲解实际开发中用的最多的基于注解配置的SpringMVC配置. 本篇博客源码下载 项目结构为: 1.在 web.xml 文件中配置前端处理器 <?xml version="1.0" encoding="UTF-8"?> &

Spring详解(六)------AOP 注解

上一篇博客我们讲解了 AspectJ 框架如何实现 AOP,然后具体的实现方式我们是通过 xml 来进行配置的.xml 方式思路清晰,便于理解,但是书写过于麻烦.这篇博客我们将用 注解 的方式来进行 AOP 配置. 为了便于大家理解,讲解方式是这样的,我们先给出 xml 的配置,然后介绍如何通过 注解 来进行替代. PS:本篇博客源码下载链接:http://pan.baidu.com/s/1dFdBHZF 密码:3v4k 1.xml 的方式实现 AOP ①.接口 UserService pack

SpringMVC之ajax传递jason数据详解以及@RequestBody和@ResonseBody注解

最近在做ajax进行用户名校验时遇到了一些问题,在不断debug的过程中也加深了我对springMVC之ajax传递jason数据的理解,希望对有需要的小伙伴一些帮助~ 工具:IDEA 我们通过code来理解一下: 1.如下图时js代码:因为是对用户名校验,所以传入的数据只有用户名: PS:SpringMVC 通过ajax传参到后台时:因为@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,用 JSON.stringify

Mybatis----传入参数parameterType类型详解

Mybatis----传入参数parameterType类型详解 前言 Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型.本文主要给大家介绍了关于MyBatis传入参数parameterType类型的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1. MyBatis的传入参数parameterType类型分两种 \1. 1. 基本数据类型

详解Gson使用(一)简单对象转化

JSON是一种轻量级的数据交换格式. 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率). 在之前我写过一篇文章,<Android解析json数据> http://blog.csdn.net/a249900679/article/details/51195505 介绍了json和用JSONObject.JSONArray解析json数据的方法,接下来几篇文章将会介绍解析json数据的更好的方法:使用Gson解析. Gson是Google推出的用来解析json数据以及将对象转

mybaits入门demo映射文件详解(三)

第二篇文章:  mybaits入门demo配置文件详解(二) Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码.MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref –

MyBatis中的@Mapper注解及配套注解使用详解(上)

前言: 从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件(那个xml写的是真的蛋疼...).很恶心的一个事实是源码中并没有对于这个注解的详细解释 现在我们通过一个简易的maven项目去了解@Mapper注解的使用方式 完整项目请访问我的github项目地址下载 构建一个maven的web项目,目录结构如下:  导入相应的依赖 <dependency> <groupId>org.mybatis</groupId> <ar

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)

前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及MyBatis的一些简单介绍. 本文不会对MyBatis作详细说明,大象还是假定阅读本文的朋友对MyBatis(ibatis)有最基本的了解,只有这样才能较好的理解本文的内容.关于MyBatis请查看它的官方文档及其它参考资料,本文不作详细讨论. 一.工程结构图      上面这是典型的Maven项目