当前位置: 首页 > news >正文

@Repository注解和@mapper的区别

1. @Repository 注解

  • 通俗解释

    • 你可以把 @Repository 注解想象成是一个专门负责管理数据库操作的 “仓库管理员”。这个管理员主要负责和数据库打交道,就像管理一个大仓库一样,他会进行各种操作,比如把货物(数据)存进仓库(数据库),从仓库里拿出货物,更新货物信息,或者把货物从仓库中删除。
  • 举例

    • 假设你在运营一个在线商城,需要存储和管理商品信息。你可以创建一个 ProductRepository 类,并用 @Repository 注解标记它,如下所示:
import org.springframework.stereotype.Repository;
import java.util.List;@Repository
public class ProductRepository {public List<Product> findAllProducts() {// 这里可以实现从数据库中查找所有商品的逻辑return null;}public void saveProduct(Product product) {// 这里可以实现将商品保存到数据库的逻辑}
}
  • 在这个例子中,ProductRepository 类就像一个仓库管理员,它的 findAllProducts() 方法可以帮你找出仓库里的所有商品,而 saveProduct(Product product) 方法可以把新的商品放到仓库里。这个类主要负责数据的存储和检索操作,而且它是由 Spring 容器管理的,就像仓库管理员是由公司管理一样。

2. @Mapper 注解

  • 通俗解释

    • @Mapper 注解通常用于 MyBatis 框架中,你可以把它看作是一个 “翻译官”。它的任务是将 Java 代码和 SQL 语句之间进行翻译,让 Java 代码能够和数据库进行通信。它会将你在 Java 接口中定义的方法 “翻译” 成相应的 SQL 语句,以便与数据库进行交互。
  • 举例

    • 还是以在线商城为例,你有一个 ProductMapper 接口,你可以这样写:
import org.apache.ibatis.annotations.Mapper;
import java.util.List;@Mapper
public interface ProductMapper {List<Product> findAllProducts();void saveProduct(Product product);
}
  • 在这里,ProductMapper 接口就像是一份翻译文件,你在接口中定义了 findAllProducts() 和 saveProduct(Product product) 等方法,MyBatis 框架会根据这些方法生成相应的 SQL 语句。例如,当你调用 findAllProducts() 方法时,MyBatis 会将其翻译成一条 SQL 语句,如 SELECT * FROM products,然后执行这条 SQL 语句,从数据库中找出所有的商品。

3. 区别总结

  • 职责范围

    • @Repository

      • 它的职责更广泛,主要是从概念上表示一个数据存储库,通常用于传统的 Spring 数据访问对象(DAO),可能包含更复杂的数据操作逻辑,如处理事务、异常处理等。它更像是一个管理仓库的人员,除了基本的数据存储和检索,还可能处理一些其他的事情,比如检查仓库的状态、协调货物的运输等。
    • @Mapper

      • 主要侧重于接口和 SQL 语句的映射,它就像一个翻译官,只是把 Java 代码和 SQL 语句进行转换,让 Java 代码可以直接操作数据库。它的主要任务就是将接口方法翻译成 SQL 语句,以便对数据库进行操作。
  • 使用场景

    • @Repository

      • 当你使用 Spring 的 JPA 或 Hibernate 等数据访问技术时,通常会使用 @Repository 注解。因为这些技术会帮你处理很多数据操作的细节,你可以在 @Repository 注解的类中使用它们提供的方法和功能,专注于业务逻辑和更复杂的数据操作。
    • @Mapper

      • 当你使用 MyBatis 框架时,会使用 @Mapper 注解。MyBatis 是一个轻量级的数据访问框架,你需要自己编写 SQL 语句,而 @Mapper 注解的接口会将你写的 Java 接口和 SQL 语句联系起来,让你能够通过接口方法操作数据库。

4. 代码示例

  • 假设你在一个 Spring Boot 应用中同时使用 @Repository 和 @Mapper

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;@Service
public class ProductService {// 使用 @Repository 注解的类@Autowiredprivate ProductRepository productRepository;// 使用 @Mapper 注解的接口@Autowiredprivate ProductMapper productMapper;public List<Product> getProductsFromRepository() {return productRepository.findAllProducts();}public List<Product> getProductsFromMapper() {return productMapper.findAllProducts();}
}

在这个 ProductService 类中,你可以看到 ProductRepository 和 ProductMapper 都被注入进来,并且可以使用它们的方法。但是它们的实现和背后的原理是不同的,ProductRepository 可能使用 JPA 或 Hibernate 等技术,而 ProductMapper 使用 MyBatis 框架将 Java 接口和 SQL 语句进行映射。

相关文章:

@Repository注解和@mapper的区别

1. Repository 注解 通俗解释&#xff1a; 你可以把 Repository 注解想象成是一个专门负责管理数据库操作的 “仓库管理员”。这个管理员主要负责和数据库打交道&#xff0c;就像管理一个大仓库一样&#xff0c;他会进行各种操作&#xff0c;比如把货物&#xff08;数据&#x…...

解锁成长密码:探寻刻意练习之道

刻意练习&#xff0c;真有那么神&#xff1f; 在生活中&#xff0c;你是否有过这样的困惑&#xff1a;每天苦练英语口语&#xff0c;可一到交流时还是支支吾吾&#xff1b;埋头苦学吉他&#xff0c;却总是卡在几个和弦转换上&#xff1b;工作多年&#xff0c;业务能力却似乎陷入…...

cuda-cuDnn

cuda sudo /bin/sh cuda_11.7.0_515.43.04_linux.run cudnn cuDNN Archive | NVIDIA Developer Linux 系统 CUDA 多版本共存以及切换 – 颢天 安装cuda # 如果已经安装过驱动&#xff0c;驱动不需要再安装&#xff0c;取消勾选 安装cuDNN&#xff0c;cuda-cuDNN对应关系见…...

如何使用Python和PIL库生成带竖排文字的封面图像

在今天的博客中&#xff0c;我们将学习如何使用Python和PIL&#xff08;Pillow&#xff09;库生成一个简单而有创意的封面图像。我们将创建一个背景图像&#xff0c;并在其上绘制带有竖排文字的标题和副标题&#xff0c;最后再添加一些装饰性元素如星星和萤火虫。这个教程适合初…...

低代码开发 实战转型案例一览

数字浪潮澎湃&#xff0c;企业应用开发需求呈井喷之势。传统全栈开发虽底蕴深厚&#xff0c;然其漫长周期与高昂成本&#xff0c;难以追赶市场快速交付的急切步伐。无代码与低代码平台顺势崛起&#xff0c;宛如暗夜明灯&#xff0c;吸引非技术人员纷至沓来&#xff0c;投身应用…...

SQL Server中FIRST_VALUE和 LAST_VALUE窗口函数允许在一个指定的窗口内返回第一个或最后一个值

在 SQL Server 中&#xff0c;FIRST_VALUE 和 LAST_VALUE 是用于窗口函数&#xff08;Window Functions&#xff09;的两个非常有用的函数。它们允许你在一个指定的窗口内返回第一个或最后一个值。这两个函数通常与 OVER 子句一起使用&#xff0c;以定义窗口的范围和排序规则。…...

机器学习-高斯混合模型

文章目录 高斯混合模型对无标签的数据集&#xff1a;使用高斯混合模型进行聚类对有标签的数据集&#xff1a;使用高斯混合模型进行分类总结 高斯混合模型 对无标签的数据集&#xff1a;使用高斯混合模型进行聚类 对有标签的数据集&#xff1a;使用高斯混合模型进行分类 总结...

微信V3支付报错 平台证书及平台证书序列号

1.平台证书及平台证书序列号设置错误报错&#xff1a; 错误1&#xff1a; Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…...

41.欠采样技术下变频不能用与跨两个nyquist的情况下

当接收到的信号位于同一nyquist区间时&#xff0c;信号被成功的折叠到了第一Nyquist区间中。 当接收信号位于两个或多个采样区间时&#xff0c;最后多个区间的信号都会被折叠到第一Nyquist区间中造成信号的重叠。...

20241227通过配置nomodeset参数解决更新grub之后,ubuntu20.04.5无法启动的问题

20241227通过配置nomodeset参数解决更新grub之后&#xff0c;ubuntu20.04.5无法启动的问题 2024/12/27 17:34 0.397475]pci0000:00:07.0:DPC:RPPI0 l0gsize 0 is invalid dev/nvmeon1p9:clean,251849/4276224 files,3266309/17089792 blocks 缘起&#xff1a;公司电脑要安装加密…...

从 GitLab.com 到 JihuLab.com 的迁移指南

本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期&#xff0c;GitLab Inc. 针对其 SaaS 产品做了限制&#xff0c;如果被判定为国内用户&#xff0c;则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品&#xff08;GitLab.com&#xff09;迁移到极狐GitL…...

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述&#xff1a;2 Data Parallelism 数据并行&#xff08;Data Parallelism&#xff09;的核心在于将模型的数据处理过程并行化。具体来说&#xff0c;面对大规模数据批次时&#xff0c;将其拆分为较小的子批次&#xff0c;并在多个计算设备上同时进行处…...

Python大数据可视化:基于Python对B站热门视频的数据分析与研究_flask+hive+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 排行榜界面 系统管理界面 看板展示 摘要 本项目以对B站热…...

利用 Python 编写一个 VIP 音乐下载脚本

在这篇博客中,我们将介绍如何使用 Python 编写一个简单的 VIP 音乐下载脚本,利用网页爬虫技术从一个音乐网站下载歌曲。通过解析网页,获取歌曲的真实下载链接,并将音乐文件保存到本地。我们将使用 requests 和 BeautifulSoup 库来实现这个过程。 目标 本脚本的主要功能是…...

linux内核如何实现TCP的?

TCP(传输控制协议)是网络通信中的核心协议之一,实现了可靠的、面向连接的、基于字节流的通信。在Linux内核中,TCP的实现相对复杂,涉及多个模块和层次。以下是一些关键概念和机制: 1. 协议栈 Linux 内核中的网络协议栈(Network Stack)是分层设计的,包括链路层、网络层…...

【Spring】基于XML的Spring容器配置——FactoryBean的使用

随着Spring框架应用程序的复杂性增加&#xff0c;开发者需要更加灵活和强大的工具来创建和管理Bean。FactoryBean是Spring提供的一种强大机制&#xff0c;它允许开发者自定义Bean的创建过程。这种机制不仅提高了Bean的创建灵活性&#xff0c;还可以简化复杂对象的构建过程。 在…...

Docker使用——国内Docker的安装办法

文章目录 参考资料前言Mac安装办法Homebrew 安装1. 直接下报错2. 安装homebrew&#xff0c; 用国内镜像3. 安装Docker4. 启动docker服务5. 测试是否安装成功 参考资料 鸣谢大佬文章。 macOS系统中&#xff1a;Docker的安装&#xff1a;https://blog.csdn.net/sulia1234567890…...

电商会员门店消费数据分析

导包 import os import sqlite3 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from IPython.display import display_htmlpd.set_option(max_colwidth,200)%matplotlib inline前期准备 转义路径 # 获取Windows系统下的路…...

Vue.js 入门与进阶:打造高效的前端开发体验

Vue.js 是一款渐进式的 JavaScript 框架&#xff0c;凭借其轻量、易用、灵活的特点&#xff0c;已经成为了前端开发者的首选之一。从简单的交互到复杂的单页应用&#xff08;SPA&#xff09;&#xff0c;Vue 为开发者提供了一套高效且易于上手的工具。在本文中&#xff0c;我们…...

Java包装类型的缓存

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128&#xff0c;127] 的相应类型的缓存数据&#xff0c;Character 创建了数值在 [0,127] 范围的缓存数据&#xff0c;Boolean 直接返回 True or Fal…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...