MyBatis-Plus自定义sql注入器

news2024/11/16 5:39:07

文章目录

  • 一、前言
  • 二、MyBatis-Plus自定义sql注入器功能实现
    • 2.1、编写自定义sql类
    • 2.2、将自定义sql添加到BaseMapper中
    • 2.3、编写自己的sql注入器

一、前言

在日常开发过程中,我们可能会发现 MyBatis-Plus 提供的那些自带的 sql 语句无法满足我们的开发需求,想要加一些自定义的 sql,而且要应用于所有的 Mapper 上,需要怎么实现呢?

二、MyBatis-Plus自定义sql注入器功能实现

官方文档地址:https://baomidou.com/pages/42ea4a/

2.1、编写自定义sql类

编写一个自定义 sql 类,要继承 AbstractMethod 类,然后实现其 injectMappedStatement 方法来定义 sql 语句并加入到 MappedStatement 里,也可以重写 getMethod 方法来修改方法名。

ps:这里以 LogicDeleteByIdWithFill (逻辑删除并做自动填充)举例,这个是 MyBatis-Plus 自己做的扩展,如果需要自己定义 sql,仿照这个或者DefaultSqlInjector 类里的各个默认方法写就可以了。

image-20230726144224910

其实如果自己在 xml 里写 sql 的话,最终也是添加到 MappedStatement 里,这里其实就是模拟了这个操作,而且每个 Mapper 都会走这段代码,看似每个 Mapper 的 xml 里没有这些方法,但其实都存在。

2.2、将自定义sql添加到BaseMapper中

这里建议写一个自己的 BaseMapper 继承自 MyBatis-Plus 的 BaseMapper,然后所有的业务 Mapper 都继承自己的 BaseMapper

public interface MyBaseMapper<T> extends BaseMapper<T> {

    /**
     * 带自动填充的删除
     *
     * @param entity
     * @return
     */
    int deleteByIdWithFill(T entity);
}

注意,这里的方法名要与2.1中 getMethod 方法返回的方法名一致。

2.3、编写自己的sql注入器

编写一个自己的 sql 注入器,继承 DefaultSqlInjector ,实现其 getMethodList 方法,将之前写的自定义 sql 类加入其中

@Component
public class MySqlInjector extends DefaultSqlInjector {

    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        methodList.add(new LogicDeleteByIdWithFill());
        return methodList;
    }
}

这样就会在原本的方法基础上增加我们自定义的这个方法。

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

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

相关文章

Java中注解应用场景

1.Parameter注解 Parameter(names "-browser", description "browser name, supported scope [chrome]", required true) Param注解的用法解析_parameter_fFee-ops的博客-CSDN博客 Public User selectUser(param(“userName”) String name, param(“…

C# Solidworks二次开发:向量相关的数学函数API的使用介绍

今天要讲的是Solidworks二次开发时候&#xff0c;如何使用一些与数学相关的API方法的介绍&#xff0c;在Solidworks中本身提供了一个函数用于对数学对象的访问&#xff0c;函数名为MathUtility。借助这个函数&#xff0c;我们来引出今天要介绍的几个API。 &#xff08;1&#…

剑指 Offer. 二叉树的镜像

请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 镜像输出&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 代码如下&#xff1a; class Solution { public:Tre…

android下的app性能测试应主要针对那些方面,如何开展?

如何开展安卓手机下的App性能测试&#xff0c;对于优秀的测试人员而言&#xff0c;除了要懂得性能测试的步骤流程外&#xff0c;还应该懂的性能测试的一些其他知识&#xff0c;比如性能测试指标、各指标的意义&#xff0c;常用的性能测试工具、如何查看结果分析等等知识。所以本…

P1535 [USACO08MAR] Cow Travelling S(dfs+剪枝 or 记忆化搜索)

1:本题暴力做法简单&#xff0c;重点在于我们如何剪枝&#xff1a; :《曼哈顿距离》我们每走一个点就判断&#xff0c;当前点到终点的最短步数是不是小于当前剩余的步数&#xff0c; 如果大于就肯定不符合直接return,或者当步数为0时&#xff0c;当还没到达终点&#xff0c;那…

web流程自动化详解

今天给大家带来Selenium的相关解释操作 一、Selenium Selenium是一个用于自动化Web浏览器操作的开源工具和框架。它提供了一组API&#xff08;应用程序接口&#xff09;&#xff0c;可以让开发人员使用多种编程语言&#xff08;如Java、Python、C#等&#xff09;编写测试脚本&…

JavaWeb+jsp+Tomcat的叮当书城项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88123111?spm1001.2014.3001.5503 技术&#xff1a;ssm jsp JDK1.8 MySQL5.7 Tomcat8.3 源码数据库课程设计 功能&#xff1a;管理员与普通用户和超级管理员三个角色&#xff0c;管理员可…

C++笔记之vector的底层实现和扩容机制

C笔记之vector的底层实现和扩容机制 1. 先申请内存空间&#xff0c;内存空间容量变成原来的n倍(一般是原来的两倍) 2. 将原本容器中的数据拷贝到新的内存空间中 3. 释放原来的内存空间 4. 将数组指针指向新容器的内存空间 code review! 文章目录 C笔记之vector的底层实现和扩…

VS+QT+PCL点云显示转网格表面体窗体实现

程序示例精选 VSQTPCL点云显示转网格表面体窗体实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTPCL点云显示转网格表面体窗体实现>>编写代码&#xff0c;代码整洁&…

郑州主域名和多个子域名的泛域名https证书

随着网络的发展&#xff0c;一个站长往往会创建多个域名网站&#xff0c;为了与主站有联系&#xff0c;站长会选择主站域名的二级域名来创建网站&#xff0c;比如主站是www .***. com&#xff0c;那么新创建的网站的域名就是top .***. com、vip .***. com等。 1.在安装部署htt…

在Linux中用strsignal函数输出对各种信号的描述

2023年7月29日&#xff0c;周六上午 目录 函数原型Linux有多少种信号使用示例 函数原型 #include <string.h>char* strsignal(int signum);strsignal函数接受一个整数参数signum&#xff0c;表示信号的编号。 用于把信号编号转换成一个简短的对这个信号编号的描述。 L…

建设数据中台到底有啥用?

最近专注在数据和人工智能领域&#xff0c;从数据仓库、商业智能、主数据管理到大数据平台的建设&#xff0c;经过很多项目的沉淀和总结&#xff0c;最后我和团队一起总结了精益数据创新的体系。一直战斗在企业信息化一线。 企业为什么要建设数据中台&#xff0c;数据中台对于…

Windows文件夹浏览器Q-Dir

Windows自带的文件夹&#xff0c;没有标签分页功能&#xff0c;当打开多个文件夹时&#xff0c;需要来回切换窗口&#xff0c;比较繁琐。     这里介绍一款可以快速切换Windows文件夹的小工具:Q-Dir&#xff0c;当打开Q-Dir时&#xff0c;默认是4个窗口显示。QDir支持窗口里的…

【Matlab】判断点和多面体位置关系的两种方法实现

我的主页&#xff1a; 技术邻&#xff1a;小铭的ABAQUS学习的技术邻主页博客园 : HF_SO4的主页哔哩哔哩&#xff1a;小铭的ABAQUS学习的个人空间csdn&#xff1a;qgm1702 博客园文章链接&#xff1a; https://www.cnblogs.com/aksoam/p/17590039.html 分别是向量判别法&…

互联网医院牌照申请指南:开启数字化医疗创新之路

申请互联网医院牌照的流程主要包括以下几个步骤&#xff1a;   准备材料&#xff1a;根据相关法规和政策要求&#xff0c;准备好申请互联网医院牌照所需的材料&#xff0c;包括但不限于医疗机构执业许可证、法人资质证明、医疗设备购置证明、医疗人员资格证书等。   填写申…

使用Hutool工具类中的BeanUtil.fillBeanWithMap方法报错`DateException`

使用Hutool工具类中的BeanUtil.fillBeanWithMap方法报错DateException 问题背景 在实现登录功能时&#xff0c;我先将用户信息存入Redis中&#xff0c;然后再获取用户信息的时候&#xff0c;又取出来。我存入Redis的用户信息是Hash格式的&#xff0c;所以取出来的时候&#xff…

BI-SQL丨两表差异比较

BOSS&#xff1a;哎&#xff0c;白茶&#xff0c;我们最近新上了一个系统&#xff0c;后续有一些数据要进行源切换&#xff0c;这个能整么&#xff1f; 白茶&#xff1a;没问题&#xff0c;可以整&#xff01; BOSS&#xff1a;哦&#xff0c;对了&#xff0c;差点忘记告诉你了…

【腾讯云 Cloud Studio 实战训练营】Claude GPT+Cloud Studio快速完成Excel工资自动核算

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

mac关闭VPN之后,浏览器就不能够正常上网了(图解)

可能打开谷歌浏览器会显示无法正常连接网络等信息&#xff0c;这个时候可以按照以下步骤&#xff1a; 点击"检查代理服务器地址" 会显示以下这段话&#xff0c;按照这个步骤来操作就可以了。 打开系统偏好设置&#xff0c;点击网络 点击高级 取消掉所有已勾选代…

Spring-mybatis结合的底层原理

1.项目前期准备 1.1 导入maven jar包 <dependencies><!-- spring依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version></depende…