【MybatisPlus】BaseMapper详解,举例说明

news2024/10/6 14:28:29

一、BaseMapper 简介

MyBatis-Plus 的核心类 BaseMapper 主要是用于提供基本的 CRUD(创建、读取、更新、删除)操作的接口定义。它是 MyBatis-Plus 框架中的一个重要组成部分,可以大大简化基于 MyBatis 的数据访问层代码的编写。

BaseMapper 接口通常定义了一些基本的数据库操作方法,例如:

  • insert:插入一条记录到数据库中。
  • deleteById:根据主键 ID 删除一条记录。
  • updateById:根据主键 ID 更新一条记录。
  • selectById:根据主键 ID 查询一条记录。
  • selectList:查询所有符合条件的记录列表。
  • selectPage:分页查询记录。

等等…
除了这些基本的 CRUD 方法外,BaseMapper 还可能包含一些其他便捷的查询方法,如按条件查询、统计符合条件的记录数等。这些方法可以通过 MyBatis-Plus 框架自动生成实现,无需手动编写对应的 SQL 语句。

通过使用 BaseMapper,开发人员可以避免编写重复的 CRUD 操作代码,提高开发效率,同时也能够确保代码的一致性和可维护性。

二、 原理

BaseMapper 类是 MyBatis-Plus 框架中的一个核心接口,用于提供基本的 CRUD(创建、读取、更新、删除)操作的方法定义。它通过继承 MyBatis 的 Mapper 接口并扩展了一些常用的数据库操作方法,使得开发人员可以更加便捷地进行数据访问层的开发,无需手动编写对应的 SQL 语句。

BaseMapper 接口的原理主要基于 MyBatis 的 Mapper 动态代理机制。在运行时,MyBatis-Plus 会动态生成 BaseMapper 接口的实现类,并通过 Java 反射机制来调用相应的数据库操作方法。这些方法在实现时会自动生成对应的 SQL 语句,并利用 MyBatis 的 SQL 执行引擎来执行这些 SQL 语句,从而实现对数据库的 CRUD 操作。
在这里插入图片描述

三、BaseMapper 应用

假设有一个名为 User 的实体类,对应数据库中的用户表,其字段包括 id、username 和 password。我们可以创建一个对应的 UserMapper 接口,继承自 BaseMapper 接口,从而获得基本的 CRUD 方法的实现。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 这里不需要编写任何方法,继承了 BaseMapper 接口后,已经包含了常用的数据库操作方法
}

然后,我们可以在服务层或控制器层中注入 UserMapper,并调用其方法来实现数据库操作,例如:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    // 添加用户
    public void addUser(User user) {
        userMapper.insert(user);
    }

    // 根据用户ID查询用户信息
    public User getUserById(Long userId) {
        return userMapper.selectById(userId);
    }

    // 更新用户信息
    public void updateUser(User user) {
        userMapper.updateById(user);
    }

    // 删除用户
    public void deleteUser(Long userId) {
        userMapper.deleteById(userId);
    }
}

在上面的示例中,我们通过注入 UserMapper 接口的实例 userMapper,并调用其继承自 BaseMapper 的 insertselectByIdupdateByIddeleteById 方法来实现对用户表的增、查、改、删操作。

通过这种方式,我们可以非常方便地进行数据库操作,而不需要编写繁琐的 SQL 语句,同时也提高了代码的可读性和可维护性。

四、BaseMapper 进阶操作

除了基本的 CRUD 操作之外,BaseMapper 还提供了一些进阶操作,可以更灵活地满足实际开发中的需求。以下是一些常见的进阶操作:

  • 自定义 SQL 方法:

    BaseMapper 接口支持在子接口中定义自定义的 SQL 方法,可以通过注解或 XML 文件来编写自定义的 SQL 语句,并在方法上使用@Select、@Update、@Insert、@Delete 等注解来指定对应的 SQL 类型。

  • 条件构造器:

    MyBatis-Plus 提供了强大的条件构造器(QueryWrapperUpdateWrappeLambdaQueryWrapperLambdaUpdateWrapper 等),可以帮助开发人员构建复杂的查询条件。BaseMapper 的查询方法通常接受一个条件构造器作为参数,从而支持根据条件查询符合条件的记录。详情参考【MybatisPlus】QueryWrapper、UpdateWrappe、LambdaQueryWrapper、LambdaUpdateWrapper

  • 分页查询:

    BaseMapper 提供了分页查询的方法,例如 selectPage 方法,可以指定查询的页码和每页的记录数,并返回一个分页对象(Page 对象),其中包含了查询结果的分页信息。

  • 批量操作:

    BaseMapper 支持批量插入、更新和删除操作,可以提高数据处理的效率。例如,批量插入可以通过 insertBatch 方法实现,批量更新可以通过 updateBatchById 方法实现,批量删除可以通过deleteBatchIds 方法实现。

  • 逻辑删除:

    MyBatis-Plus 支持逻辑删除功能,可以通过在实体类的字段上添加 @TableLogic 注解来指定逻辑删除的字段,并在全局配置中启用逻辑删除功能。BaseMapper 支持根据条件进行逻辑删除操作,例如,selectPage 方法可以通过指定查询条件来查询被逻辑删除的记录。

  • 乐观锁:

    MyBatis-Plus 支持乐观锁功能,可以通过在实体类的字段上添加 @Version 注解来指定乐观锁的字段,并在全局配置中启用乐观锁功能。BaseMapper 提供了根据乐观锁字段进行更新操作的方法,例如,updateById 方法可以通过乐观锁字段来实现乐观锁更新。

通过使用这些进阶操作,开发人员可以更加灵活地进行数据访问层的开发,满足不同的业务需求,提高代码的复用性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0基础跨考408|一战上岸复盘及经验分享

基础阶段‼️ 王道的四本书的选择题部分要都做完、订正完。 王道的四门视频课要一轮刷完&#xff08;或者题主在B站看了其他的老师&#xff0c;这其实也是算一轮的&#xff0c;只要题主是认真学习了的&#xff0c;题主说自己不知道看什么课&#xff0c;王道就好了&#xff09;…

成功的SOHO在接待方面值得我们思考的地方

有个客户离春节放假之前的一个月就说要来访工厂&#xff0c;后面直到放假的最后一天也没等到他&#xff0c;中间商说他去了另外一个省&#xff0c;忙别的生意去了。 刚接触他的时候&#xff0c;是一位中国代理商联系我们工厂&#xff0c;做了不少设计和项目&#xff0c;期间修…

GEE入门篇|图像处理(三):阈值处理、掩膜和重新映射图像

阈值处理、掩膜和重新映射图像 本章前一节讨论了如何使用波段运算来操作图像&#xff0c; 这些方法通过组合图像内的波段来创建新的连续值。 本期内容使用逻辑运算符对波段或索引值进行分类&#xff0c;以创建分类图像。 1.实现阈值 实现阈值使用数字&#xff08;阈值&#xf…

Java实现读取转码写入ES构建检索PDF等文档全栈流程

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo&#xff0c;并已实现WebHook的搭建和触发流程接口。 实现读取本地文件入库ES 总体思路&#xff1a;基于前面已经搭建的WebHook触发流程&#xff0c;接收到push更新消息之后&#xff0c;使用本地的git工…

【QT】布局介绍

布局 水平布局垂直布局网格布局 widget的应用 将对应的按钮&#xff0c;label放入到widget中 水平弹簧和垂直弹簧 使用弹簧来对他们布局 设置弹簧属性&#xff1a; 最后结果——页面中的内容和随页面的缩小和方法自适应。 水平布局和垂直布局只能针对一行一列 将用户密码放入…

第七篇 - 人工智能与机器学习技术VS量测(Measurement)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司 - 它是如何赋能数字化营销生态的?

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒…

2024年字节跳动+京东+美团面试总结,程序员经验分享

现在的IT行业竞争压力越来越大&#xff0c;尤其是Android开发行业。而很多Android程序员却每天都在重复CRUD,原地徘徊&#xff01; 今年年初&#xff0c;你就想改变现状&#xff0c;于是在网上刷了大量面试题&#xff0c;强行记下之后&#xff0c;开始参加面试&#xff01;但是…

AI日报:这种病毒从生成式AI工具中窃取您的数据

文章目录 人工智能计算机病毒蠕虫像细菌一样传播病毒测试 人工智能计算机病毒 一组研究人员创造了一种能够利用生成人工智能系统的计算机病毒&#xff0c;包括Gemini Pro和GPT-4驱动的ChatGPT版本。 Morris II是一种蠕虫&#xff0c;它操纵生成的人工智能模型来执行恶意任务&…

AndroidStudio连不上adb报错ADB Connection Error

之前笔者一直通过AndroidStudio来看日志&#xff0c;也一直用的一套自己的SDK&#xff0c;用了好几年了。 但是突然有一天&#xff0c;AndroidStudio启动后就弹出警告窗&#xff1a;ADB Connection Error&#xff0c;如下&#xff1a; 在Event Log面板还持续性的输出&#x…

前端工具网站合集(持续更新)

综合类网站 那些免费的砖 统计推荐免费工具网站 那些免费的砖 - 优雅地白嫖各种免费资源 (thosefree.com)https://www.thosefree.com/ CSS样式网站 毒蘑菇-配色 CSS 配色&#xff0c;阴影网站 一个好用的配色网站! 毒蘑菇 - 配色 (dumogu.top)https://color.dumogu.top/ …

工艺美术设计VR仿真教学软件为教师提供更丰富的教学资源

随着科技的飞速发展&#xff0c;我们的生活正在经历着前所未有的变革。其中&#xff0c;虚拟现实(VR)技术的出现&#xff0c;不仅改变了我们的娱乐方式&#xff0c;更在教育领域中开辟出一片新的天地。今天&#xff0c;我们就来探讨一下VR美术绘画教学平台带来的价值。 首先&am…

day14_用户前台项目环境搭建(首页接口开发,分类接口开发,网关服务搭建,Redis缓存,Spring Cache)

文章目录 1 尚品甄选H5介绍1.1 业务功能介绍1.2 系统架构1.3 前端H5开发说明 2 搭建项目环境2.1 项目结构说明2.2 模块依赖说明2.3 环境说明2.4 项目模块创建2.4.1 spzx-parent2.4.2 spzx-service2.4.43 service-product 2.5 导入接口文档 3 首页接口开发3.1 需求分析3.3 接口开…

[最佳实践] Windows上构建一个和Linux类似的Terminal

感谢大佬批评指正&#xff0c;现已更新 preview Target&#xff1a;致力打造最赏心悦目Window下的终端&#xff0c;同时能够很接近Linux的使用习惯 key word&#xff1a;windows终端美化 windows terminal windows powershell 类似Linux下的Window终端 Window也能用ll windows…

让Excel 365 Excel 2021快速转化为生产力,创造价值!

文章目录 每日一句正能量前言关键点内容简介作者简介读者赞誉后记购买链接赠书活动 每日一句正能量 人的一生&#xff0c;好不好只有自己知道&#xff0c;乐不乐只有自己明白。快乐是一种心情&#xff0c;一种自然、积极向上的心态。在平凡之中寻求快乐&#xff0c;在磨难之中寻…

AI智能伪原创工具:原创文章自动生成的革新

随着人工智能技术的迅猛发展&#xff0c;AI智能伪原创工具正逐渐改变着我们的日常生活和工作方式。其中&#xff0c;原创文章自动生成技术的出现&#xff0c;为内容创作者、企业和学术界带来了全新的可能性和便利。这项技术的引入不仅提高了内容创作的效率&#xff0c;还为用户…

【查找算法】插值查找

一&#xff1a;插值查找 代码公式&#xff1a;int mid left (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]); 1.1 基本概念 插值查找&#xff0c;有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值…

什么样的跨网数据交换产品 能实现数据摆渡和数据同步?

首先&#xff0c;为什么会产生跨网数据摆渡的需求和场景呢&#xff1f;那是因为做了网络隔离&#xff0c;企业进行网络隔离的原因主要包括以下几点&#xff1a; 1、提高安全性&#xff1a;网络隔离是防止未授权访问和网络攻击的有效手段。通过将网络划分为多个独立的子网&…

Docker 快速入门实操教程(完结)

Docker 快速入门实操教程&#xff08;完结&#xff09; Docker&#xff0c;启动&#xff01; 如果安装好Docker不知道怎么使用&#xff0c;不理解各个名词的概念&#xff0c;不太了解各个功能的用途&#xff0c;这篇文章应该会对你有帮助。 前置条件&#xff1a;已经安装Doc…

flutter 使用webview

背景&#xff1a; 一般都有使用webview加载网页的需求&#xff0c;比如加载隐私协议、用户协议等。 如何做&#xff1a; 当然&#xff0c;我们自己不用封装轮子&#xff0c;在pub.dev上有成熟的轮子&#xff1a;webview_flutter 首先&#xff0c;将依赖导入&#xff0c;在pub…

Appium系列(1)安装启动Appium

Appium环境准备 Mac电脑jdk环境AndroidSDK环境node>8.1.0&#xff08;最好用最新版本&#xff09; 安装命令 npm i -g appium安装不成功请检查node 版本是否正确 安装成功命令行输入appium回车查看 安装驱动程序 1、先检查当前驱动情况 通过 appium driver list 进行…