mapper注解 源码
时间: 2023-10-18 07:21:57 浏览: 86
Mapper 注解是 Mybatis 框架中的一个注解,它是在接口上使用的,用于标识该接口是一个 Mybatis 的 Mapper 接口。在 Mapper 接口中定义了一些方法,这些方法对应了 SQL 语句,可以通过 Mybatis 框架执行 SQL,从而实现数据的 CRUD 操作。
下面是 Mapper 注解的源码:
```java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Mapper {
Class<? extends Annotation> value() default Repository.class;
}
```
可以看到,Mapper 注解有以下特点:
1. 该注解的作用目标为 TYPE,即接口上使用。
2. 该注解的生命周期为 RUNTIME,即运行时保留。
3. 该注解是文档化的,即可以被 javadoc 工具记录。
4. 该注解是继承的,即如果一个类继承了一个标注了 @Mapper 注解的接口,则该类也会被认为是一个 Mapper。
该注解中有一个 value 属性,默认值为 Repository.class,用于指定该 Mapper 接口所对应的注解类型,一般情况下,该属性不需要指定,使用默认值即可。
相关问题
spring对mapper注解的源码解析
在Spring中,我们可以使用`@Mapper`注解来标识一个Mapper接口,并将它交由Spring容器管理。当我们在使用`@Autowired`注解注入Mapper接口时,Spring会自动为我们创建该接口的实现类,并将该实现类交由Spring容器管理。
下面是`@Mapper`注解的源码解析:
```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface Mapper {
String value() default "";
}
```
可以看到,`@Mapper`注解是一个标准的Java注解,它只有一个`value`属性,用于指定Mapper接口的名称。
在Spring中,`@Mapper`注解是由`org.mybatis.spring.annotation.MapperScan`注解来扫描的。当我们在配置文件中使用`@MapperScan`注解时,Spring会扫描指定的包路径下的所有Mapper接口,并将它们交由Spring容器管理。
具体实现可以参考Mybatis-Spring项目中的代码。
mapper注解被解析源码
在 MyBatis 中,`@Mapper` 注解通常用于标记一个接口类,表示这个接口是一个 MyBatis Mapper 接口,需要被 MyBatis 自动扫描并生成对应的实现类。具体的源码解析如下:
1. `org.mybatis.spring.mapper.MapperScannerConfigurer` 类的 `postProcessBeanDefinitionRegistry()` 方法,该方法会扫描指定包下的类,并将符合条件的类转换成 `BeanDefinition` 对象,并添加到 `BeanDefinitionRegistry` 中。
2. `org.mybatis.spring.mapper.ClassPathMapperScanner` 类的 `doScan()` 方法,该方法会遍历指定包下的所有类,并判断是否符合 Mapper 接口的条件。判断条件如下:
- 类必须是接口类型。
- 类上必须标注有 `@Mapper` 注解。
3. 如果类符合条件,则将其转换成 `BeanDefinitionHolder` 对象,并添加到 `BeanDefinitionRegistry` 中。
4. 在 `org.mybatis.spring.mapper.MapperFactoryBean` 类中,会根据 `MapperFactoryBean` 的类型,生成对应的 Mapper 接口实现类。这里会通过 JDK 动态代理技术,根据 Mapper 接口定义生成对应的动态代理类。
5. 在执行 Mapper 接口方法时,实际上是执行了对应的动态代理类的方法,而动态代理类又会调用 `SqlSessionTemplate` 类中的方法,最终完成数据库操作。
阅读全文