首页 > 其他分享 >springboot中@Repository 和 @Mapper的区别

springboot中@Repository 和 @Mapper的区别

时间:2024-01-28 10:23:05浏览次数:29  
标签:Mapper springboot Repository 接口 标识 MyBatis 注解

在springboot中他们两都是数据访问层的注解(在定义方面)
@Repository:

  1. @Repository 注解通常用于对 DAO(Data Access Object)组件进行标识。

    • 它告诉 Spring 框架,被注解的类是用于数据访问的组件,可以通过 Spring 的组件扫描机制自动注册为 Spring Bean,并且可以将底层的数据访问异常转换为 Spring 的数据访问异常类型。
    • 一般情况下,@Repository 注解用于标识对数据库的访问,例如对数据库表的增删改查操作。

    @Mapper
    2.@Mapper 注解通常用于标识 MyBatis 的 Mapper 接口。

  • 在使用 MyBatis 框架时,我们需要创建 Mapper 接口来定义数据库操作的方法,而使用 @Mapper 注解可以将这些接口标识为 MyBatis 的映射器接口,使其能够被 MyBatis 自动扫描并注册为映
    射器。
  • 在整合 MyBatis 或 MyBatis-Plus 框架时,我们会用到 @Mapper 注解来标识 Mapper 接口,使其成为 Spring 容器中的 Bean。

第一个问题:实际情况下他们的区别?
实际情况下,@Repository 和 @Mapper 注解的区别可以通过以下案例来说明:

假设我们有一个名为 "User" 的实体类,以及一个对数据库进行操作的接口。

使用 @Repository 注解:
java

@Repository
public interface UserRepository {
    User findById(Long id);
    void save(User user);
    void deleteById(Long id);
}

在这个例子中,我们使用 @Repository 注解标识了 UserRepository 接口。这个接口主要用于定义与数据库进行交互的方法,如根据用户 id 查询用户、保存用户、删除用户等操作。

使用 @Mapper 注解:
java

@Mapper
public interface UserMapper {
User findById(Long id);
void save(User user);
void deleteById(Long id);
}
在这个例子中,我们使用 @Mapper 注解标识了 UserMapper 接口。这个接口同样用于定义与数据库进行交互的方法,如根据用户 id 查询用户、保存用户、删除用户等操作。

在实际情况下,@Repository 注解和 @Mapper 注解的区别可以总结如下:

@Repository 注解是 Spring 框架提供的注解,用于标识数据访问组件,包括对数据库的访问。它主要用于与底层数据访问框架(如 JPA、Hibernate)一起使用,对数据访问层进行标识和异常转换。
@Mapper 注解是 MyBatis 框架提供的注解,用于标识 Mapper 接口,定义数据库操作方法。它主要用于与 MyBatis 或 MyBatis-Plus 框架一起使用,将这些接口作为映射器进行数据库操作。
总的来说,@Repository 注解更通用,可以与不同的数据访问框架一起使用,而 @Mapper 注解更专注于与 MyBatis 框架一起使用,并且主要用于标识 Mapper 接口。

标签:Mapper,springboot,Repository,接口,标识,MyBatis,注解
From: https://www.cnblogs.com/apelet/p/17992513

相关文章

  • SpringBoot日志配置
    1.简介Spring使用spring5及以后commons-logging被spring直接自己写了。支持log4j2,logback是默认使用的。虽然日志框架很多,但是我们不用担心,使用SpringBoot的默认配置就能工作的很好。 SpringBoot怎么把日志默认配置好的1、每个starter场景,都会导入一个核心场景......
  • 如何改Maven Dependencies的源码,如何把springboot组件的源码改造后使用
    由于springboot提供的源码有些地方不太符合预期,所以需要改动改动,这里就会说到,如何改MavenDependencies的源码。如何把springboot组件的源码改造后使用。v修改源码的几种方式直接在自己工程中建同包同类名的类进行替换采用@Primary注解排除需要替换的jar包中的类@Bean......
  • Springboot CRUD简单实现
    SpringBoot对Spring的改善和优化,它基于约定优于配置的思想,提供了大量的默认配置和实现使用SpringBoot之后,程序员只需按照它规定的方式去进行程序代码的开发即可,而无需再去编写一堆复杂的配置SpringBoot的主要功能如下:起步依赖:SpringBoot以功能化的方式将需要的依赖进行组装,并......
  • SpringBoot启动过程中发布的事件
    springboot启动过程中会发布的事件(启动类的run()方法执行时)ApplicationStartingEvent:应用运行开始事件SpringBoot运行run()方法未进行任务操作时先发布此事件ApplicationEnvironmentPreparedEvent:Environment准备完成事件在Environement准备完成且应用上下文context......
  • springboot学习:建立springboot项目及相关注意事项
    一、建立maven项目后引入依赖:以下没有版本号的依赖表示在springboot父依赖中已锁定相应的版本号必需依赖:1.springboot父依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</versio......
  • SpringBoot启动项目报错:java.lang.UnsatisfiedLinkError: D:\files\software\jdk-1
    目录问题描述解决方法:问题描述在运行向的时候出现报错:java.lang.UnsatisfiedLinkError:D:\files\software\jdk-15.0.1\jdk-17.0.3.1\bin\tcnative-1.dll:Can'tloadIA32-bit.dllonaAMD64-bitplatform atjava.base/jdk.internal.loader.NativeLibraries.load(Native......
  • SpringBoot简易教程
     SpringBoot简易教程(01):SpringBoot基础入门SpringBoot简易教程(02):SpringBoot配置文件详解SpringBoot简易教程(03):SpringBoot整合ssmSpringBoot简易教程(04):SpringBoot单元测试SpringBoot简易教程(05):SpringBoot开发RestfulAPI及使用jmeter测试SpringBoot简易教程(06):swagger测试Rest......
  • SpringBoot中使用LocalDateTime踩坑记录
    目录前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。本项目基于Java21和SpringBoot3开发,序列化工具使用的是默认的Jackson,使用SpringDataRedis操作Redis缓......
  • 在springboot中controller控制器的crud语句@RequestBody遗落的报错
    在进行java练习的过程中,对一个单链表进行增删改查时发现了如下错误:对编译器的控制台进行检查之后,发现了报错语句如下:2024-01-2619:43:52.551ERROR18544---[p-nio-80-exec-5]o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service()forservlet[dispatcherSe......
  • SpringBoot中Bean的条件装配
    目录概述ProfileConditionalConditionalOnConditionalOnProperty概述众所周知,SpringBoot最腻害的地方就是容器,开发人员的日常工作就是编写bean,并由框架扫描存到容器里面,当程序跑起来的时候,各种bean协同工作完成了软件功能。那么容器是什么呢?从概念层面来讲,容器是一个池子;从物......