Spring Boot通过配置文件支持数据库自定义表名

直接上干货:

例如一个叫xxx的项目,yml文件里加上这段

xxxproject:db:xxxTable: xxx_dbname #自定义的数据库表名

创一个Configuration类放表名和Mapper

// XxxProjectAutoConfiguration.java@Configuration
@MapperScan(basePackages = "cn.com.xxxproject.db.mapper")
public class XxxProjectAutoConfiguration {@Value("${xxxproject.db.xxxTable}")private String xxxTable;@Autowiredprivate XxxMapper xxxMapper;@Beanpublic DatabaseManager databaseManager() {return new DatabaseManager (xxxTable, xxxMapper);}
}

在这里插入图片描述

看到这聪明的你应该已经知道后续该怎么做了

// DatabaseManager.javapublic class DatabaseManager extends AbstractManager<XxxDO> {private static final String DEFAULT_LOCK_TABLE_NAME = "xxx_dbname";private final XxxMapper xxxMapper;private final String localIp;private final String xxxTable;public DatabaseLockManager(String xxxTable, XxxMapper xxxMapper) {this.xxxMapper = xxxMapper;this.localIp = getLocalIp();if (StringUtils.isNullOrEmpty(xxxTable)) {xxxTable = DEFAULT_LOCK_TABLE_NAME;}this.xxxTable = xxxTable;}// 随便写个方法,根据自己需求来定制@Overrideprotected boolean isExists(Long id) {return xxxMapper.isExists(xxxTable, id);}@Overrideprotected XxxDO selectForUpdate(String xxxKey) {return xxxMapper.selectForUpdate(xxxTable, xxxKey);}
}
<!-- LockMapper.xml --><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.com.xxxproject.db.mapper.XxxMapper"></mapper>
// LockMapper.java@Mapper
public interface LockMapper {@Select("select * from ${xxxTable} where id = #{id}")@Results(id = "XxxMap",value = { @Result(property = "id", column = "id"), @Result(property = "xxxKey", column = "xxx_key"),@Result(property = "nodeInfo", column = "node_info"), @Result(property = "count", column = "count"),@Result(property = "version", column = "version"),@Result(property = "createTime", column = "create_time"),@Result(property = "updateTime", column = "update_time") })boolean isExists(String xxxTable, Long id);@Select("select * from ${xxxTable} where xxx_key= #{xxxKey} for update")@ResultMap("XxxMap")XxxDO selectForUpdate(String xxxTable, String xxxKey);
}    

完事!


顺便放两个关于Mybatis的好文章:

mybatis注解在方法直接编写SQL@Select@Insert@Update@Delete


MyBatis框架核心之注解使用@ResultMap及多表查询

第一篇是偏入门操作,第二篇的4.3多表查询真的适合反复细品

本篇用到:结果集映射相关注解

1、通过@Results、@Result注解定义结果集映射
如果实体字段的名称与数据库表字段名称不一致时,我们就需要显式的指定映射关系。这是通过@Results、@Result注解来指定的,例如为UserMapper的selectById指定映射关系:

@Select("SELECT id,name FROM user where id= #{id}")
@Results(id = "userMap", value = {@Result(property = "id", column = "id", javaType = Integer.class,jdbcType = JdbcType.INTEGER,id = true),@Result(property = "name", column = "name",javaType = String.class,jdbcType = JdbcType.VARCHAR)})
public User selectById(int id);

其中:

@Results注解:id属性用于给这个映射关系起一个名字(这里指定的为userMap),其内部还包含了一个@Result[]来表示实体属性和数据库表字段的映射关系

@Result注解:property属性是java实体属性的名称,column表示对应的数据库字段的名称。javaType和JdbcType属性可以不指定。

2、通过@ResultMap复用结果集映射
上述方法electById方法已经通过@Results注解指定了结果映射关系,可以通过@ResultMap来引用@Results的id属性值进行复用。如在UserMapper的selectAll方法进行复用:

@Select("SELECT id,name FROM user")
@ResultMap("userMap")
public List<User> selectAll();

THX~

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

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

相关文章

Vue3-插槽(本质也是组件间的交流)

默认插槽 当你在父组件中&#xff0c;有标签需要插入子组件中显示&#xff0c;就需要默认插槽 具名插槽 当你在父组件中&#xff0c;有多个标签需要放置子组件的不同位置时&#xff0c;就需要具名插槽 具名-----》 v-slot:s2 作用域插槽 父组件在插槽中想要使用子组件的值&…

Less-1(sqlmap自动注入攻击)--sqli

环境准备 打开火狐浏览器&#xff0c;进入sqli第一关的页面 工具准备 sqlmap 参数解释 -u URL 指定目标URL进行注入测试。--dataDATA指定POST请求的数据进行注入测试--cookieCOOKIE指定用于身份验证的cookie进行注入测试-p PARAMETER指定要测试的参数--levelLEVEL设置测试的深…

你不知道的Tomcat

Tomcat基本概念 Tomcat是一个Servlet容器&#xff0c;也是一个web容器。我们的请求通过浏览器进入到Tomcat&#xff0c;Tomcat再把请求分发对应的Servlet。 Tomcat核心组件 Connector: 连接器负责处理进入Tomcat的传入连接和请求&#xff0c;然后将它们传递给Server服务对象中…

Qt无边框窗口拖拽和阴影

先看下效果&#xff1a; 说明 自定义窗口控件的无边框,窗口事件由于没有系统自带边框,无法实现拖拽拉伸等事件的处理,一种方法就是重新重写主窗口的鼠标事件&#xff0c;一种时通过nativeEvent事件处理。重写事件相对繁琐,我们这里推荐nativeEvent处理。注意后续我们在做win平…

MySQL知识点总结(二)——explain执行计划、SQL优化

MySQL知识点总结&#xff08;二&#xff09;——explain执行计划、SQL优化 explain执行计划typepossible_keyskeysextra SQL优化SQL优化的流程SQL优化技巧范围查询优化排序优化分组查询优化distinct优化分页查询优化join关联查询优化排序分页 关联查询分组 关联查询 排序in与…

手把手带你Git入门,从下载到精通,常用git命令

文章目录 Git概述什么是GitGit历史Git是什么 为什么要使用Git什么是版本控制系统 Git和SVN对比SVN集中式SVN优缺点 Git分布式Git优缺点 Git工作流程四个工作区域工作流程 Git下载与安装下载window版下载64位软件包安装Git Git基础环境配置设置用户信息查看配置信息 文件的两种状…

$.ajax()方法总结

$.ajax()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;今天我们将深入探讨前端开发中常用的异步请求方法之一——$.ajax()方法&#xff0c;并总结其使用技巧和一些常见场景。 1. 什么是$.ajax()方法&#xff1f; $.aj…

Leetcode 3021. Alice and Bob Playing Flower Game

Leetcode 3021. Alice and Bob Playing Flower Game 1. 解题思路2. 代码实现 题目链接&#xff1a;3021. Alice and Bob Playing Flower Game 1. 解题思路 这一题真心很蠢&#xff0c;事实上就是只要 x y xy xy为奇数Alick就能赢&#xff0c;因此只要看在给定的 m , n m,n …

mysql中一个中文字符占几个字节,怎么验证

一&#xff0c;长度取决于字符集编码 在MySQL中&#xff0c;一个中文字符所占用的字节数取决于你使用的字符集&#xff08;Character Set&#xff09;。 1&#xff0c;对于UTF-8字符集&#xff0c;一个中文字符通常占3个字节&#xff1b; 2&#xff0c;而对于GBK等双字节字符集…

ES6.8.6 创建索引配置分词器、映射字段指定分词器、查询数据高亮显示分词结果(内置分词器、icu、ik、pinyin分词器)

文章目录 ES环境内置分词器&#xff0c;以simple分词器示例查询创建索引simple_news&#xff0c;修改分词器为simple插入模拟数据分词查询&#xff1a;返回通过分词查询到的结果、高亮分词分词匹配&#xff1a;写一次示例&#xff0c;其他分词和匹配思路基本一致第一步&#xf…

DMA 和 零拷贝技术 到 网络大文件传输优化

文章目录 DMA 控制器的发展无 DMA 控制器 IO 过程DMA 控制器 传统文件传输性能有多糟糕&#xff1f;如何优化文件传输性能零拷贝技术mmap writesendfileSG-DMA&#xff08;The Scatter-Gather Direct Memory Access&#xff09; 零拷贝技术的应用 大文件传输应该用什么方式Pag…

后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinstall来统一包管理工具。 1.1 环境准备 1…

idea 创建 spring boot

1.创建步骤 2. 编码添加 2.1 这是自动生成的启动函数 package com.example.comxjctest4;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class Application {publi…

floyd算法求最短路径

给定一个 n个点 m 条边构成的无重边和自环的无向连通图。 点的编号为 1∼n。 请问&#xff1a;从 1到 n 的最短距离。去掉 k 条边后&#xff0c;从 1 到 n的最短距离。 输入格式 第一行包含整数 T&#xff0c;表示共有 T 组测试数据。每组数据第一行包含三个整数 n,m,k。接下来…

学习MySQL中的“IS NULL”优化

学习MySQL中的“IS NULL”优化 在数据库查询中&#xff0c;性能优化是一个至关重要的话题。特别是对于使用MySQL的开发者和数据库管理员来说&#xff0c;了解如何高效地处理NULL值是提高查询性能的关键。 基本优化 在MySQL中&#xff0c;当我们使用col_name IS NULL这样的条…

MySql的使用方法

一.什么是MySql MySql是一种数据库管理系统&#xff0c;是用来存储数据的&#xff0c;可以有效的管理数据&#xff0c;数据库的存储介质为硬盘和内存。 和文件相比&#xff0c;它具有以下优点&#xff1a; 文件存储数据是不安全的&#xff0c;且不方便数据的查找和管理&#xf…

【3分钟开服】幻兽帕鲁服务器一键部署保姆教程,PalWorld开服联机教程

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或肢解后食用。 想要部署属于自…

从零开发短视频电商 Tesseract OCR识别增强

文章目录 概要图像预处理阶段默认反转图像重新缩放二值化噪音消除膨胀/腐蚀旋转/偏移校正边框缺少边框边框太大扫描边框去除 透明度/Alpha通道 引擎处理阶段语言模型配置提高识别速度词典、单词列表和模式表格识别 使用 Tesseract OCR 的 GUI 和其他项目 原文如下&#xff1a; …

TypeScript实战系列之合理运用类型

目录 介绍any 和 unknownerve 的用途断言type 和 interfacedeclare 关键字的作用联合类型 和 类型守卫交叉类型 介绍 这篇主要介绍下ts 常用的基本类型和一些常用的技巧性技能 any 和 unknow any 和 unknown 是两个类型关键字&#xff0c;它们用于处理类型不确定或未知的情况…

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…