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

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接口。

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)的类:

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接口上添加额外的注解。

@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.hqwc.cn/news/644122.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

勾八头歌之RNN

一、RNN快速入门 1.学习单步的RNN:RNNCell # -*- coding: utf-8 -*- import tensorflow as tf# 参数 a 是 BasicRNNCell所含的神经元数, 参数 b 是 batch_size, 参数 c 是单个 input 的维数,shape [ b , c ] def creatRNNCell(a,b,c):# 请在此添加代码…

【复现代码——环境配置】

目录 一、复现代码举例二、创建环境——选择一个Python版本2.1 创建基本环境2.1.1 基于AutoDL2.1.2 基于PyCharm 2.2 终端激活环境2.3 退出环境2.4 删除环境 三、PyTorch安装3.1 查看cuda3.2 安装PyTorch 四、其他依赖安装4.1 tensorboardX4.2 matplotlib4.3 medpy4.4 visdom4.…

【Day 8】MySQL 多表查询 + Mybatis 基础

1 多表查询 笛卡尔积:在数学中,两个集合(A集合 和 B集合)的所有组合情况 在多表查询时,需要消除无效的笛卡尔积 select * from tb_emp,tb_dept where dept_id tb_dept.id;多表查询分为: 连接查询 内连接:相当于查…

5-内核开发-/proc File System 学习

5-内核开发-/proc File System 学习 课程简介: Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础,让他们能够理解和参与到Linux内核的开发过程中。…

移动零 ----双指针

题目链接 题目: 分析: 上述题目, 是将数组分块, 分为前半非零, 后半零, 这种数组分块题我们首先想到双指针 思路: 定义两个指针, 一个cur 一个dest, cur用来遍历数组, dest 指向分界处的第一个零位置, 将数组分块首先让cur 0; dest 0;cur 遍历数组, 如果cur 0, 那么cur…

python+django校园社交高校交友网站2x7r5.

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台,设计的基本思路是: 前端:vue.jselementui 框架&#…

后端工程师——Java工程师岗位要求

在国内,Java 程序员是后端开发工程师中最大的一部分群体,其市场需求量也是居高不下,C++ 程序员也是热门岗位之一,此二者的比较也常是热点话题,例如新学者常困惑的问题之一 —— 后端开发学 Java 好还是学 C++ 好。读完本文后,我们可以从自身情况、未来的发展,岗位需求量…

SD-WAN制造业网络优化方案

制造业在数字化浪潮的推动下,进行转型的需求越来越强烈。网络作为制造业数字化转型的关键基础设施,其稳定性、安全性和灵活性直接影响着企业的运营效率和市场竞争力。而SD-WAN可以为制造业提供有效的解决方案,让制造业顺利高效地进行数字化转…

揭开六西格玛培训真实面貌,为何它仍是企业优选

近年来,网络上时常有声音称六西格玛培训已经过时,不再适应当今快速变化的商业环境。然而,这种观点并不全面,也未能深入理解六西格玛管理的核心价值和现代应用。事实上,六西格玛作为一种以数据为驱动、旨在减少缺陷和提…

基于Springboot的幼儿园管理系统

基于SpringbootVue的幼儿园管理系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 用户管理 教师管理 幼儿园信息管理 班级信息管理 工作日志管理 会议记录管理…

【AI写作】未来科技趋势:揭秘DreamFusion的革新力量

首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~ 按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~ 笔尖Ai写作:…

如何在Facebook上发布广告?

在广告管理工具中创建广告 创建广告系列和广告组。在广告名称文本框中输入描述性名称。选择代表您业务的Facebook 公共主页和Instagram 帐户。 所有广告都必须具有关联的Facebook 公共主页。选择广告格式。 选择素材。 您可能还会看到其他选项,具体取决于您先前所做…