MyBatis-Plus动态更改查询的表名或字段名

部分业务可能会需要根据参数不同而查询不同的表,或者查询不同的字段。使用MyBatis-Plus可以很方便地实现这种需求,甚至不需要使用.xml文件。
三张数据表user、user1、user2内容都如下:

idnameagesex
1张三181
2李四<null><null>
3<null><null><null>

方式一

UserMapper.java中使用@Select注解,动态改变要查询的表或字段:
UserMapper.java

public interface UserMapper extends BaseMapper<User> {@Select("select ${column1} from ${table1} where ${column2} = #{variable1}")String test(@Param("column1") String column1,@Param("table1") String table1,@Param("column2") String column2,@Param("variable1") String variable1);
}

使用Test调用测试,service层实现类的代码如下:

@Override
public String test() {return baseMapper.test("name", "user", "id", "1");
}

得到控制台打印输出:

JDBC Connection [HikariProxyConnection@530131514 wrapping com.mysql.cj.jdbc.ConnectionImpl@30bf26df] will not be managed by Spring
==>  Preparing: select name from user where id = ?
==> Parameters: 1(String)
<==    Columns: name
<==        Row: 张三
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f362135]
张三

这种方式实现了动态更改要查询的表名或字段,但是必须要注意

  • @Select注解中如果将表名、字段名作为传参,必须使用$不能使用#,因为#会给传递的参数带上引号导致sql语法错误
  • @Param只有在仅一个参数且名称相同时可以省略,否则必须带上

方式二

使用拦截器的方式,将表名修改掉。在任意位置建一个MyBatis-Plus的配置类:

package cn.ly.mptest.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author : Liuyuan*/
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {String newTable = "user1";return newTable;});interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);return interceptor;}
}

改变返回的newTable的值,即可更换查询的表。在Test中调用:

@Test
void test() {User byId = userService.getById(1);System.out.println(byId.getName());
}

可以看到输出台打印的真正查询语句:

JDBC Connection [HikariProxyConnection@1958242673 wrapping com.mysql.cj.jdbc.ConnectionImpl@1f9d4b0e] will not be managed by Spring
==>  Preparing: SELECT id,name,age,sex FROM user1 WHERE id=?
==> Parameters: 1(Integer)
<==    Columns: id, name, age, sex
<==        Row: 1, 张三1, null, null
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7d979d34]
张三1

可以看到虽然使用的是User实体类,但是依然查询的from user1
这种方式不同MyBatis-Plus版本会有不同写法,可以参考这两篇博客:
博客1
博客2

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

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

相关文章

ubuntu启动kafka报错Could not create the Java Virtual Machine.

网上有两种方式&#xff0c;但是需要具体看自己的错误信息&#xff0c;我的错误信息如下: 这里大概是说要写入日志无权限&#xff0c;所以执行的时候&#xff0c;前面加一下sudo 执行成功。

反射(理论详细到不能详细,需要不断实践)

反射机制&#xff1a; 需求&#xff1a;从【外部】配置文件中获取 类名和方法名 将其运行-》只有反射可以实现 在不修改源码的情况下控制程序-》设计模式的ocp开闭原则 &#xff08;开&#xff1a;功能开放给你使用&#xff0c;闭&#xff1a;不让修改源码&…

阿里云语雀频繁崩溃,有什么文档管理工具是比较稳定的?

10月23 日14:00左右&#xff0c;蚂蚁集团旗下的在线文档编辑与协同工具语雀发生服务器故障&#xff0c;在线文档和官网都无法打开。直到当天晚上22:24&#xff0c;语雀服务才全部恢复正常。从故障发生到完全恢复正常&#xff0c;语雀整个宕机时间将近 8 小时&#xff0c;如此长…

【SpringCloud篇】Eureka服务的基本配置和操作

文章目录 &#x1f339;简述Eureka&#x1f6f8;搭建Eureka服务⭐操作步骤⭐服务注册⭐服务发现 &#x1f339;简述Eureka Eureka是Netflix开源的一个基于REST的服务治理框架&#xff0c;主要用于实现微服务架构中的服务注册与发现。它由Eureka服务器和Eureka客户端组成&#…

机器学习与 S3 相集成 :释放数据的力量

文章作者&#xff1a;Libai 引言 在当今数据驱动的世界中&#xff0c;企业不断寻求如何高效利用企业自身所产生的数据的解决方案。机器学习已经成为一种提取有价值的见解和做出数据驱动决策的强大工具。然而&#xff0c;机器学习模型的成功在很大程度上依赖于高质量数据的可用…

算能技术资料地址、Demo github地址

技术资料地址&#xff1a; https://developer.sophgo.com/site/index/material/38/all.html Demo github地址&#xff1a;https://github.com/sophgo/sophon-demo

人工智能在警务工作中的运用

AI 能否帮助警察打击犯罪&#xff1f; 执法部门负责维护公共安全&#xff0c;他们必须处理随之而来的所有挑战。幸运的是&#xff0c;警察可以依靠技术来处理很多工作。近几年来&#xff0c;尤其是人工智能技术在全球变成了警务工作中的一个重要部分。 随着基于 AI 的警务技术…

java-poi操作笔记

row表示行&#xff0c;cell表示row中的第几个cell package sample.Utils;import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Workbook; impor…

c++搭建http服务器

HTTP请求协议格式如下&#xff1a; HTTP响应协议格式如下&#xff1a; #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <string>#pragma comment(lib, "ws2_32.lib")//std::string generateResponse(const st…

企业级SQL开发:如何审核发布到生产环境的SQL性能

自从上世纪 70 年代数据库开始普及以来&#xff0c;DBA 们就不停地遭遇各种各样的数据库管理难题&#xff0c;其中最为显著的&#xff0c;可能就是日常的开发任务中&#xff0c;研发人员们对于核心库进行变更带来的一系列风险。由于针对数据库的数据变更是一项非常常见的任务&a…

C#-关于网络

操作IP地址、执行DNS查询。。。 使用套接字编程&#xff1b; 创建TCp和UDP客户端和服务器 使用HttpClient及其工厂&#xff1b;

python文件docx转pdf

centos部署的django项目&#xff0c;使用libreoffice做文件转换&#xff0c;官网给环境安装好libreoffice后&#xff0c;可使用命令行来进行转化 还可转换其他的各种格式&#xff0c;本文只做了pdf转换 import subprocess import os def convert_to_pdf(input_file, o…

Linux修改时区失败,手动修改localtime无效

有时候改了这个也不行&#xff0c;用命令行修改也不行 解决办法 &#xff1a;cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 或者想改其他时区的直接 ll /usr/share/zoneinfo/ 查看

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接 8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。聚好看在大会上首次发布基于eBPF观测数据库性能的产品DBdoctor&#xff0c;受到了业界广泛的关注。近期几位业内同仁过来要大会的PPT&#xff…

python爬虫-某公开数据网站实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;分析页面和请求方式 此网站没有技巧的加密&#xff0c;仅是需要携带cookie和请求…

Flask下载文件接口,以excl表哥为例

一、response 1、定义写入表哥的代码 def create_excel_xls(path, sheet_name, value):index len(value) # 获取需要写入数据的行数workbook xlwt.Workbook() # 新建一个工作簿sheet workbook.add_sheet(sheet_name) # 在工作簿中新建一个表格for i in range(0, inde…

使用Redis做数据缓存

目的 本关目的&#xff1a;使用Redis实现数据缓存。 相关知识 本文将将会你掌握&#xff1a;1&#xff0e;将数据加入缓存队列&#xff0c;2&#xff0e;缓存数据。 在我之前的文章中提到了实现了使用 Redis 做动态页面缓存&#xff0c;以此提高访问速度&#xff0c;但同时…

【AntDB 数据库】国产数据库发展之信创政策的加持

由于我国在信息技术领域起步较晚&#xff0c;国内大量的市场份额被国际IT巨头占据&#xff0c;甚至长期处于被垄断的地位&#xff0c;这也给了某些国家妄图通过挑起科技、贸易摩擦制衡我国发展的机会。为了解决可能存在的安全风险&#xff0c;在重要信息系统、关键基础设施中使…

什么牌子的开放式耳机好?开放式耳机选购指南来了!

在当今音频科技不断演进的时代&#xff0c;开放式耳机作为一种受欢迎的音频设备&#xff0c;吸引着越来越多的消费者&#xff0c;与封闭式耳机相比&#xff0c;开放式耳机在音质表现和舒适度上都具有独特的优势&#xff0c;在众多品牌和型号中选择一款满足个人需求的开放式耳机…

L1-022:奇偶分家

题目描述 给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输出格式&#xff1a; 在一行中先后输出奇数的个数、偶数…