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

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

相关文章

Facebook的智能时代:AI技术在社交中的崛起

随着科技的快速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深刻改变了我们的生活方方面面&#xff0c;而社交媒体领域也不例外。在这个信息爆炸的时代&#xff0c;Facebook正以令人瞩目的速度推动着AI技术在社交领域的崛起。本文将深入探讨Facebook如何在智能…

Datawhale组队学习 Task10 环境影响

第12章 环境影响 在本章中&#xff0c;首先提出一个问题&#xff1a;大语言模型对环境的影响是什么&#xff1f; 这里给出的一个答案是&#xff1a;气候变化 一方面&#xff0c;我们都听说过气候变化的严重影响(文章1、文章2)&#xff1a; 我们已经比工业革命前的水平高出1.…

Centos Cron设置定时任务

这本是很简单的问题&#xff0c;但是我服务器重装系统两次&#xff0c;遇到的问题都不一样&#xff0c;所以记录一下 1.首先要确保服务器上有 cron 服务 sudo systemctl status crond2.设置时区 sudo timedatectl set-timezone Asia/Shanghai3.重启crond 服务使crond服务的时…

Django配置websocket时的错误解决

基于移动群智感知的网络图谱构建系统需要手机app不断上传数据到服务器并把数据推到前端标记在百度地图上&#xff0c;由于众多手机向同一服务器发送数据&#xff0c;如果使用长轮询&#xff0c;则实时性差、延迟高且服务器的负载过大&#xff0c;而使用websocket则有更好的性能…

npm 和 yarn 的使用

安装 yarn npm i yarn -g查看版本 npm -v yarn --version切换 npm/yarn 的下包镜像源 // 查看当前的镜像源 npm config get registry// 切换淘宝镜像源 // 新的淘宝源&#xff0c;旧的淘宝源已于2022年05月31日零时起停止服务 npm config set registry https://registry.…

表贴式PMSM的直接转矩控制(DTC)MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 表贴式PMSM的直接转矩控制(DTC),直接使用滞环控制对转矩和磁链进行控制&#xff0c;相对于传统的FOC控制而言&#xff0c;其不需要进行解耦变换&#xff0c;在此次的有以下几点需要注意&#xff1a…

Flask使用Jinja2渲染模版使用变量实战

前言&#xff1a; Flask 使用 Jinja2 作为其默认模板引擎&#xff0c;这意味着您可以直接在 Flask 应用程序中使用 Jinja2 模板。您可以创建模板文件&#xff0c;然后在视图函数中渲染这些模板&#xff0c;将动态数据传递给模板进行渲染&#xff0c;并最终生成最终的 HTML 页面…

入境游火了!合合信息扫描全能王“扫描证件”功能获海外用户追捧

春节脚步渐近&#xff0c;全国多地出入境证件办理量增长明显。国家移民管理局从1月11日起正式施行便利外籍人员来华5项措施&#xff0c;进一步打通外籍人员来华经商、学习、旅游的相关堵点。某头部旅行服务公司发布的《2024春节旅游市场预测报告》显示&#xff0c;春节期间入境…

C++---列表初始化

一.初始化的四种方法 我们以int作为类型 &#xff0c;a b c d作为变量进行演示 int main() {int a 10; //常见 C语言int b(20);//和函数声明冲突吗&#xff1f; 答&#xff1a;不冲突&#xff0c;因为函数的参数列表有类型 int b(int a)//有没有类型是我们区别很多问题的关键i…

监控招标标书:构建安全智能监控体系的关键一步

监控招标标书是指针对监控设备、系统及相关服务的采购项目所需提交的书面文件&#xff0c;它承载着建设智能监控体系的关键信息和技术方案。在当今社会&#xff0c;监控设备已经成为了各行各业不可或缺的一部分&#xff0c;从安保监控到工业生产&#xff0c;都离不开各类监控设…

thinkadmin操作栏审核通过(操作确认),审核驳回(录入信息)

录入信息页面 {extend name="../../admin/view/main"}{block name=content} <style>textarea {font-size: 16px;padding: 10px;border: 1px solid #ccc;

机器学习_集成学习之Boosting(提升较弱的模型,以降低弱模型的偏差)

文章目录 介绍AdaBoost算法梯度提升算法(GBDT)极端梯度提升(XGBoost)Bagging 算法与 Boosting 算法的不同之处 介绍 Boosting 的意思就是提升&#xff0c;这是一种通过训练弱学习模型的“肌肉”将其提升为强学习模型的算法。要想在机器学习竞赛中追求卓越&#xff0c;Boosting…