什么时候用@mapper和@repository
时间: 2023-10-15 10:02:18 浏览: 136
@Mapper和@Repository都是用于标记一个类的注解,但是它们的使用场景有所不同。
@Mapper注解通常用于MyBatis框架中,表示这个类是一个Mapper接口,它会被MyBatis框架自动解析生成相应的实现类,实现类中包含了对应的SQL语句。在使用Mapper时需要在配置文件中声明这个Mapper接口,以便MyBatis框架自动扫描并生成实现类。
@Repository注解通常用于Spring框架中,表示这个类是一个数据访问层(DAO)的实现类,用来访问数据库或其他数据存储。它也可以用来标记一个异常处理类或其他组件类。在Spring中,使用@Repository注解可以让Spring容器自动扫描并注入这个类的实例。
因此,@Mapper和@Repository注解的使用场景不同,需要根据具体情况进行选择。
相关问题
@Repository@Mapper
@Repository和@Mapper是用于数据接口层的注解。
@Repository是Spring的注解,用于声明一个Bean,它可以与@Mapper同时使用,也可以单独使用。如果单独使用@Repository,需要配合使用MapperScannerConfigurer或者@MapperScan注解来让Spring扫描并识别这个Bean。
@Mapper是Mybatis的注解,用于标识数据接口类,让Mybatis能够找到对应的mapper并在编译时动态生成代理类,实现数据库查询功能。单独使用@Mapper可能会在编辑器中出现警告,但不影响程序运行。可以配合使用@Repository来消除警告,或者在编辑器中设置忽略这种警告。
这两个注解的使用方式类似,都是在数据接口类上添加注解,但是@Mapper属于Mybatis,与Spring无关,而@Repository是Spring的注解。
所以,@Repository和@Mapper注解都是用于数据接口层,但是@Mapper是Mybatis的注解,@Repository是Spring的注解。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [@Repository注解的作用和用法,以及和@Mapper的区别](https://blog.csdn.net/fengling_smile/article/details/129853866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [@Repository 与 @Mapper的区别](https://blog.csdn.net/m0_51527921/article/details/125446670)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
@repository @mapper
在Spring框架及其生态系统中,`@Repository` 和 `@Mapper` 是用于标注持久层组件的重要注解。它们的主要目的是帮助开发者标识某些类为数据访问对象(DAO),以便于框架进行管理、事务处理以及异常转换等操作。
---
### **1. @Repository**
#### 定义:
`@Repository` 是 Spring 提供的一个 stereotype 注解,专门用于标记那些负责与数据库交互的类(如 DAO 层)。通过该注解,可以让 Spring 自动识别这些类,并将其注册为 Bean 加入到 IoC 容器中。
#### 功能特点:
- 将被标注的类声明为一个“存储库”,即它是应用程序的一部分,通常与数据访问有关。
- 能够自动捕获运行时产生的数据访问异常 (比如 SQLException),并将其转化为 Spring 的 DataAccessException 异常层次结构。
#### 使用场景:
当你需要创建一些传统意义上的 DAO 对象时,就可以使用这个注解:
```java
@Repository
public class UserRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public UserRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public User findById(Long id){
return jdbcTemplate.queryForObject(...);
}
}
```
在这里,`UserRepository` 类就是典型的 Repository 模式实现之一,它借助 JDBC 技术直接对数据库进行了查询操作。
---
### **2. @Mapper**
#### 定义:
`@Mapper` 则是 MyBatis 框架提供的专用注解,旨在简化 SQL 映射配置文件的工作流程。当我们在项目引入了 MyBatis 后,在 Mapper 接口中添加上此注解即可完成其基本初始化设置过程而无需额外 XML 文件支持。
#### 主要作用:
- 声明这是一个Mybatis映射器接口。
- 允许通过注释的方式编写SQL语句代替传统的XML形式维护SQL脚本内容。
- 配合其他工具生成最终完整的实体类关联关系图谱。
#### 示例代码:
```java
@Mapper
public interface OrderMapper {
@Select("SELECT * FROM orders WHERE order_id=#{id}")
Order selectOrderById(int id);
@Insert("INSERT INTO orders(user_id,status) VALUES(#{userId}, #{status})")
int insertOrder(Order order);
}
```
上述例子展示了如何简单地定义了一个基于内存表orders的操作集锦,其中包含了读取单条记录及新增订单的功能描述。
---
### 总结对比
| 特性 | @Repository | @Mapper |
|-------------------|---------------------------------------------|---------------------------------------|
| **所属框架** | Spring Framework | MyBatis |
| **主要用途** | 标记普通的dao/repository beans | 直接替代mybatis xml mapper |
| **依赖注入方式** | 支持spring容器内bean扫描 | mybatis-spring bridge |
虽然两者看似有相似之处都是针对数据层面做设计考虑但本质上还是有所区别开来分别适应各自的领域需求选择合适的方案才是关键所在!
阅读全文
相关推荐


















