【注解】Mapper的注解 @Mapper、@Repository、@MapperScan

server/2024/10/19 7:27:00/

Mapper的注解 @Mapper、@Repository、@MapperScan

    • 一、@Mapper
      • 1.1、主要作用
      • 1.2、示例
    • 二、@Repository
      • 2.1、主要作用
      • 2.2、示例
      • 2.3、注意事项
    • 三、@MapperScan

@Mapper 是 Mybatis 的注解,和 Spring 没有关系,
@Repository 是 Spring 的注解,用于声明一个 Bean。
@MapperScan 是Spring Boot 提供的注解,用于指定要扫描的Mapper接口包路径,并将这些接口自动注册为Spring Bean。

一、@Mapper

在Java开发中,特别是在使用MyBatis框架时,@Mapper 注解扮演着重要的角色。它主要用于指示某个接口是一个MyBatis的Mapper接口,这样MyBatis框架就可以自动识别并处理它。

1.1、主要作用

  • 标记 Mapper 接口@Mapper 注解用于标识一个接口为MyBatis的Mapper接口。这告诉MyBatis生成这个接口的代理对象,代理对象会实现接口中定义的数据库访问操作。

  • 避免 Mapper XML文件:虽然MyBatis允许使用XML文件来配置SQL语句和接口绑定,使用 @Mapper 注解可以让你完全省略XML配置。所有的SQL可以通过注解如 @Select, @Update, @Insert, 和 @Delete 直接在Mapper接口的方法上声明。

1.2、示例

下面是一个简单的例子,展示了如何使用 @Mapper 注解在MyBatis中定义一个Mapper接口。

java">package com.example.mapper;import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(int id);
}

在这个例子中,UserMapper 接口通过 @Mapper 注解被标记为MyBatis的Mapper接口。@Select 注解用于指定获取用户信息的SQL查询。

@Mapper 注解是MyBatis与Spring集成时用于简化配置和增强模块整洁性的有用工具。通过使用它,开发者可以更加便捷地在Spring应用中实现数据访问层,无需处理复杂的XML配置。

二、@Repository

Mapper接口本身并不是Spring管理的Bean。MyBatis的Mapper接口是用于定义数据库操作方法的接口,并不需要由Spring来管理生命周期或进行依赖注入。
@Repository 是Spring Framework 中的注解之一,用于标识一个类为数据访问层(DAO)的组件,通常与持久化操作相关。它的作用类似于 @Component 注解,但专门用于标识数据访问组件,让Spring容器知道这个类是用来进行数据库操作的。

2.1、主要作用

  • 标识数据访问组件:@Repository 注解用于标识一个类为数据访问层(DAO)的组件。这告诉Spring容器将这个类实例化并管理起来,可以在其他组件中通过依赖注入使用它。
  • 异常转换:@Repository 注解还具有将数据访问层产生的数据访问异常(例如JDBC异常)转换为Spring的数据访问异(DataAccessException)的功能。这样可以统一异常处理,并且可以选择性地处理不同类型的异常。
  • 自动异常转换:在Spring的数据访问框架中,如Spring JDBC或Spring Data JPA,使用 @Repository 注解的类会自动启用异常转换功能,将底层的数据库异常转换为Spring的数据访问异常,方便统一处理。

2.2、示例

下面是一个简单的示例,展示了如何使用 @Repository 注解标识一个数据访问层(DAO)的类:

java">import org.springframework.stereotype.Repository;@Repository
public class UserRepository {// 数据访问方法public User getUserById(int id) {// 实际的数据库操作return userRepository.findById(id);}
}

在这个例子中,UserRepository 类被标记为 @Repository,表示它是一个数据访问组件,用来进行数据库操作。当其他组件需要访问数据库时,可以通过依赖注入的方式使用 UserRepository 类。

tips:
如果没有标注 @Repository 的数据访问组件,例如mapper文件,在使用@Autowired 依赖注入的时候,idea 会报红,因为spring 种没有识别到这个文件。但是又可以正常运行,是因为 Mybatis 识别到了@Mapper文件或者 @MapperScan 扫描到。因此可以在 mapper 文件加上 @Repository 注解,让Spring认识它,这样 idea 就不会报红了。

2.3、注意事项

虽然 @Repository 注解通常用于标识数据访问组件,但并不是强制要求每个数据访问类都要加上这个注解。如果你的项目中使用了Spring Data JPA或其他数据访问框架,并且遵循了这些框架的规范,那么这些框架会自动处理数据访问组件的注册和异常转换,你可能不需要手动添加 @Repository 注解。
在Spring Boot应用中,通常会使用Spring Data JPA或其他持久化框架来简化数据访问层的开发,这些框架已经处理了数据访问组件的注册和异常转换,因此对于基于这些框架的数据访问类,你可能不需要手动添加 @Repository 注解。

三、@MapperScan

可以使用Spring的 @MapperScan 注解来扫描MyBatis的Mapper接口,并将它们注册为Spring管理的Bean。这样,你就可以在其他组件中直接注入Mapper接口,而无需在Mapper接口上添加额外的注解。

java">@SpringBootApplication
@ComponentScan(basePackages = {"com.example"})
@MapperScan("com.example.bickerrecord.dao")
public class BickerrecordApplication {public static void main(String[] args) {SpringApplication.run(BickerrecordApplication.class, args);}}

这样,所有在 com.example.mapper 包下的接口都会被自动注册为MyBatis的Mapper接口。且不用加任何注解。
在这里插入图片描述


http://www.ppmy.cn/server/15937.html

相关文章

RattbitMQ安装

1.RabbitMQ是什么? RabbitMQ是消息队列的一种,生态好,好学习,易于理解,时效性强,支持很多不同语言的客户端,扩展性、可用性都很不错。学习性价比非常高的消息队列,适用于绝大多数中小规模分布式系统。 今天先来简单讲…

Java在区块链开发中的作用及发展

Java在区块链开发中的作用以及发展 一、引言 随着信息技术的飞速发展,区块链技术作为一种新兴的去中心化分布式账本技术,正逐渐引起人们的广泛关注。区块链以其独特的不可篡改、去中心化、安全可信等特性,在数字货币、供应链管理、金融科技…

springSecurity简单直接说明

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombo…

浏览器JavaScript兼容解决方案整理

1、addEventListener 与 attachEvent 区别 attachEvent ——兼容&#xff1a;IE7、IE8&#xff1b;不兼容firefox、chrome、IE9、IE10、IE11、safari、opera。 addEventListener——兼容&#xff1a;firefox、chrome、IE、safari、opera&#xff1b;不兼容IE7、IE8 解决方案&…

2024系统架构师---论软件系统架构风格

论软件系统架构风格 系统架构风格(System Architecture Style)是描述某一特定应用领域中系统组织方式的惯用模式架构风格定义了一个词汇表和一组约束&#xff0c;词汇表中包含一些构件和连接件类型&#xff0c;而这组约束指出系统是如何将这些构件和连接件组合起来的口软件系统…

Java | Leetcode Java题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isMatch(String s, String p) {int sRight s.length(), pRight p.length();while (sRight > 0 && pRight > 0 && p.charAt(pRight - 1) ! *) {if (charMatch(s.charAt(sRight - 1)…

Clickhouse离线安装教程

https://blog.51cto.com/u_15060531/4174350 1. 前置 1.1 检查服务器架构 服务器&#xff1a;Centos7.X 需要确保是否x86_64处理器构架、Linux并且支持SSE 4.2指令集 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 …

如何配置nginx的转发?

配置Nginx的转发可以通过修改Nginx的配置文件来实现。以下是配置Nginx转发的基本步骤&#xff1a; 打开Nginx的配置文件&#xff0c;通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf。 在http块中添加一个新的server块&#xff0c;用于配置转发目标的基本信…