当前位置: 首页 > news >正文

java业务开发常用的配置表及代码

配置表

通过配置表,灵活的配置。

开发中某些经常变更的参数值,加上配置。比如 订单30分钟后失效,需求变更,要改为15分钟,那么直接改配置表就行了,不用发版。

某些关键的容易出错的逻辑,加上一个开关,也就是 config_value 为 0或1,为1表示打开,为0表示关掉。

不需要的逻辑,可以及时用开关关掉。

或者是逻辑复杂,开发环境造数据麻烦时,也可以用配置表配置开关,把前置条件关掉,方便验证数据。

建表语句:

config_key 唯一索引,保证配置的 key 唯一。

config_value,如果有多个,可以用逗号隔开。

is_delete 表示是否删除:0-否;1-是。

CREATE TABLE `tb_system_config` (`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',`config_key` varchar(128) NOT NULL COMMENT '配置的KEY',`config_value` varchar(2000) DEFAULT '' COMMENT '配置的值。如果有多个,用逗号隔开',`description` varchar(100) DEFAULT '' COMMENT '描述',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除:0-否;1-是',PRIMARY KEY (`id`),UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4  COMMENT='系统配置表';

查询系统配置表:

插入配置数据后,查询:

找出 config_key 为 config_test 的配置值。

SELECT config_value FROM tb_system_config_test WHERE config_key='config_test' AND is_delete=0;

依赖包:

采用 mybatisPlus ,也可以自己用 mybatis 处理。

    <properties><mybatis.plus.version>3.4.0</mybatis.plus.version></properties><dependencies><!--mybatis-plus下面这两个依赖必须加--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis-plus以下依赖是拓展,比如分页插件--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis.plus.version}</version></dependency><!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

实体类:

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tb_system_config")
public class SystemConfigEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/@TableId(value = "id", type = IdType.AUTO)private Integer id;/*** 配置的KEY*/private String configKey;/*** 配置的值*/private String configValue;/*** 描述*/private String description;/*** 创建时间*/@TableField(fill = FieldFill.INSERT)private Date createTime;/*** 更新时间*/@TableField(fill = FieldFill.UPDATE)private Date updateTime;/*** 是否删除:0-否;1-是*/@TableLogicprivate Boolean isDelete;}

Mapper :

public interface SystemConfigMapper extends BaseMapper<SystemConfigEntity> {}

Mapper.xml:

namespace 和 type 的路径,自行修改。。

<?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="com.example.demo.dao.SystemConfigMapper"><!-- 通用查询映射结果 --><resultMap id="BaseResultMap" type="com.example.demo.domain.SystemConfigEntity"><id column="id" property="id" /><result column="config_key" property="configKey" /><result column="config_value" property="configValue" /><result column="description" property="description" /><result column="create_time" property="createTime" /><result column="update_time" property="updateTime" /><result column="is_delete" property="isDelete" /></resultMap><!-- 通用查询结果列 --><sql id="Base_Column_List">id, config_key, config_value, description, create_time, update_time, is_delete</sql></mapper>

Service 服务类:

如果系统接入了 缓存,也可以先从缓存中获取数据。

插入/更新数据后,记得删掉缓存,保持一致性。

系统配置表的逻辑如下:

@Service
public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, SystemConfigEntity> implements SystemConfigService {/*** 根据 key 获取配置的 value* @param key* @return*/public String getValueByKey(String key) {LambdaQueryWrapper<SystemConfigEntity> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(SystemConfigEntity::getConfigKey, key);//未删除的数据queryWrapper.eq(SystemConfigEntity::getIsDelete, false);SystemConfigEntity systemConfigEntity = getOne(queryWrapper);if (systemConfigEntity == null) {return "";}return systemConfigEntity.getConfigValue();}/*** 获取所有的配置。* 需要多次查询时使用,不用反复查数据表。** @return*/public Map<String, String> getValueMap() {LambdaQueryWrapper<SystemConfigEntity> queryWrapper = new LambdaQueryWrapper<>();//未删除的数据queryWrapper.eq(SystemConfigEntity::getIsDelete, false);List<SystemConfigEntity> list = list(queryWrapper);Map<String, String> map = new HashMap<>();if (CollectionUtils.isEmpty( list)) {return map;}map = list.stream().collect(Collectors.toMap(SystemConfigEntity::getConfigKey, SystemConfigEntity::getConfigValue, (key1, key2) -> key2));return map;}}

相关文章:

java业务开发常用的配置表及代码

配置表 通过配置表&#xff0c;灵活的配置。 开发中某些经常变更的参数值&#xff0c;加上配置。比如 订单30分钟后失效&#xff0c;需求变更&#xff0c;要改为15分钟&#xff0c;那么直接改配置表就行了&#xff0c;不用发版。 某些关键的容易出错的逻辑&#xff0c;加上一…...

安装Homebrew安装Git(Mac)

使用Homebrew安装Git&#xff08;Mac&#xff09; 1 安装Xcode 安装Homebrew之前&#xff0c;需要安装Xcode Comand Line Tools&#xff1a; xcode-select --install 2 安装Homebrew /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mas…...

[云原生1.] Docker容器的简单介绍和基本管理

文章目录 1. Docker容器的基本概述1.1 简介1.2 容器的优点1.3 Docker与虚拟机的区别1.4 Docker核心组成1.4.1 镜像1.4.2 容器1.4.3 仓库 1.5 容器在内核中支持2种重要技术1.5.1 linux六大namespace&#xff08;命名空间&#xff09; 1.6 Docker的使用场景 2. Docker的部署2.1 前…...

JSR303数据校验

Component //注册bean ConfigurationProperties(prefix "person") Validated //数据校验 public class Person { Email(message"邮箱格式错误") //name必须是邮箱格式 private String name; } 使用数据校验&#xff0c;可以保证数据的正确性&#xff01;…...

JavaCV + FFmpeg 播放音视频

JavaCV FFmpeg 播放音视频 1、导入JavaCV库1.1 使用ffmpeg必要库1.2 简单FFmpeg命令 待续~~~~ FFmpeg documentation bytedeco/javacv - GitHub 1、导入JavaCV库 gradle下面这种会导入javacv-platform所有包&#xff0c;非常耗时&#xff1a;https://repo.maven.apache.org/…...

万能DIY预约小程序源码系统 上门预约服务小程序搭建 适用于各种预约场景 自由DIY功能模块

在这个快节奏的时代&#xff0c;预约服务已经成为了我们日常生活的一部分。从看病挂号到餐厅预订&#xff0c;从美发美容到家政服务&#xff0c;预约已经深入到了各个领域。然而&#xff0c;传统的预约方式存在着许多不便&#xff0c;如电话预约、在线填写表格等&#xff0c;不…...

边缘检测算法

边缘检测算法是在数字图像处理中常用的一种技术&#xff0c;用于检测图像中物体边缘的位置。以下是几种常见的边缘检测算法&#xff1a; Sobel算子&#xff1a;Sobel算子是一种基于梯度的算法&#xff0c;通过计算图像的水平和垂直方向的梯度值&#xff0c;并将其组合起来得到边…...

数据结构与算法-树

树 &#x1f388;1.树和二叉树&#x1f388;2.树&#x1f52d;2.1树的定义&#x1f52d;2.2树的4种表示方法&#x1f52d;2.3树的基本术语&#x1f52d;2.4树的抽象数据类型定义 &#x1f388;3.二叉树&#x1f52d;3.1二叉树的定义&#x1f52d;3.2二叉树的抽象数据类型定义&a…...

【Bug排查】Uncaught (in promise) Error: Infinite redirect in navigation guard

记一次Bug排查 今日在做尚硅谷的商品甄选项目时&#xff0c;遇到无法登录的问题&#xff1a;报错Uncaught (in promise) Error: Infinite redirect in navigation guard 一开始我去搜CSDN&#xff0c;都说是路由的问题&#xff0c;我对前端也不了解&#xff0c;试着改了一下&…...

ant使用第三方任务

ant提供了一个插件机制来使用第三方的任务。为了使用第三方的任务&#xff0c;需要做两步&#xff1a; 将它们的实现放在ant能找到的地方。声明任务 声明任务的几种方法&#xff1a; 声明一个任务&#xff1a;利用<taskdef name"taskname" classname"Impl…...

MySQL 性能分析

MySQL 性能分析 对 mysql 进行性能分析&#xff0c;主要就是提升查询的效率&#xff0c;其中索引占主导地位。对 mysql 进行性能分析主要有如下几种方式&#xff1a; 方式一&#xff1a;查看 sql 执行频次 show global status like ‘Com_______’; // global 表示全局 show s…...

【MySQL】数据库——库操作

文章目录 1. 创建数据库[IF NOT EXISTS] 的使用 2. 删除库3. 数据库的编码问题查看系统默认支持的字符集查看系统默认支持的校验集只查看 database的校验集指定编码创建数据库修改字符集修改校验集验证规则对数据库的影响utf8_general_ci ——不区分大小写utf8_bin ——区分大小…...

Python 轻量 ORM peewee 上手

介绍 有时候需要用 Python 直接操作数据库, 手工撸 SQL 倒也不是不能行, 但是总觉得有点背离了 人生苦短, 我用 Python 的初心, 习惯了 SQLAlchemy 的直接操作后, 就变懒了. 但是对于比较简单的数据库操作场景, 再跑一套 SQLAlchemy 又显得有些臃肿, 这次上手轻量 Python ORM …...

微信小程序开发的OA会议之会议,投票,个人中心的页面搭建及模板

目录 一.自定义组件 1.1.创建 1.2.定义 1.3.编写 1.4.使用 二.会议 2.1.数据 2.2.显示 2.3. 样式 三.个人中心 3.1.页面 3.2.样式 四.投票 4.1.引用 4.2.数据 4.3.页面 4.4.样式 好啦今天就到这里了&#xff0c;希望能帮到你哦&#xff01;&#xff01;&…...

决策树-入门

1、认识决策树 决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-then结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 怎么理解这句话&#xff1f;通过一个对话例子 想一想这个女生为什么把年龄放在最上面判断&#xff01;&a…...

使用Redis发布订阅模式实现 Session共享

其实并不是实现session共享&#xff0c;而是通过redis的发布订阅&#xff0c;让所有集群的服务器&#xff0c;都让自己的session发送一下消息。比如说userId在第35台服务器上&#xff0c; 有100台服务器&#xff0c;那么第1台服务器收到消息&#xff0c;需要通知userId&#xf…...

安达发|AI在APS生产计划排程系统中的应用与优势

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;已经在许多领域取得了显著的成果。在生产管理计划系统中&#xff0c;AI技术的应用也日益受到关注。本文将探讨如何将AI人工智能用在生产管理计划系统上&#xff0c;以提高生产效率、降低成本并优化资源配置。…...

国产低功耗MCU芯片:Si24R03

Si24R03集成了基于RISC-V核的低功耗MCU和工作在2.4GHz ISM频段的无线收发器模块&#xff0c;是一款高度集成的低功耗SOC片。 应用领域&#xff1a; 1、物联网 2、智N门锁 3、电机控制 4、消费电子 5、工业控制 其无线收发器模块是专为低功耗无线场合设计&#xff0c;在关…...

【Java】学生管理系统项目演示

目录 学生管理系统 学生管理系统代码思路分析 nextLine() 和 nextInt() 区别 学生管理系统 需求&#xff1a;实现对学生的增删改查功能&#xff0c;学生&#xff08;学号&#xff0c;姓名&#xff0c;年龄&#xff0c;地址&#xff09;字段 学生管理系统代码思路分析 定义学…...

Rust错误处理

返回值和错误处理 panic 深入剖析 主动调用 fn main() {panic!("crash and burn"); }backtrace 栈展开 panic 时的两种终止方式 当出现 panic! 时&#xff0c;程序提供了两种方式来处理终止流程&#xff1a;栈展开和直接终止 何时该使用 panic! 先来一点背景知…...

byp4xx:自动化绕过HTTP 40X状态码的Go语言工具详解

1. 项目概述&#xff1a;byp4xx&#xff0c;一个专为绕过HTTP 40X状态码而生的工具在Web应用安全测试&#xff0c;尤其是渗透测试和漏洞赏金&#xff08;Bug Bounty&#xff09;的日常工作中&#xff0c;遇到403 Forbidden或404 Not Found这样的HTTP状态码是家常便饭。很多时候…...

别光刷LeetCode了!用ZJUT OJ这几道经典题,夯实你的C++基础与STL应用

别光刷LeetCode了&#xff01;用ZJUT OJ这几道经典题&#xff0c;夯实你的C基础与STL应用 当算法刷题成为程序员必修课时&#xff0c;太多初学者陷入"LeetCode崇拜"的误区——盲目追求题量而忽视基础打磨。ZJUT OJ上那些看似简单的题目&#xff0c;恰恰是锤炼C核心功…...

从深度强化学习环境搭建出发:为什么我选择在Ubuntu 20.04上用Unity Hub 2021.2.12

深度强化学习环境搭建&#xff1a;Ubuntu 20.04与Unity Hub 2021.2.12的技术选型实践 在深度强化学习&#xff08;DRL&#xff09;的研究与开发中&#xff0c;仿真环境的构建往往成为项目落地的关键瓶颈。不同于传统机器学习任务&#xff0c;DRL算法需要在动态交互中不断试错&a…...

WiMAX技术解析:从原理到部署实战

1. WiMAX技术概述&#xff1a;从标准到应用场景WiMAX&#xff08;全球微波接入互操作性&#xff09;这个名词背后&#xff0c;实际上是一组IEEE 802.16系列标准的商业化称谓。作为从业十余年的通信工程师&#xff0c;我见证了这个技术从实验室走向市场的全过程。与常见的Wi-Fi&…...

Arcade-plus谱面编辑器:从零开始制作专业Arcaea谱面的完整指南

Arcade-plus谱面编辑器&#xff1a;从零开始制作专业Arcaea谱面的完整指南 【免费下载链接】Arcade-plus A better utility used to edit and preview aff files 项目地址: https://gitcode.com/gh_mirrors/ar/Arcade-plus Arcade-plus是一款功能强大的开源谱面编辑工具…...

5步永久备份你的QQ空间回忆:GetQzonehistory完整指南

5步永久备份你的QQ空间回忆&#xff1a;GetQzonehistory完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春岁月的QQ空间说说会随着时间消失&#xff1f;…...

Hi3518ev200刷机避坑指南:uboot刷写常见错误及解决方案

Hi3518ev200刷机实战&#xff1a;uboot刷写全流程解析与深度排错 最近在折腾Hi3518ev200开发板时&#xff0c;发现不少同行在uboot刷写阶段频频踩坑。作为一款经典的嵌入式处理器&#xff0c;Hi3518ev200在安防摄像头、物联网终端等领域应用广泛&#xff0c;但官方文档对刷机流…...

3分钟掌握Bebas Neue:免费开源标题字体的终极设计解决方案

3分钟掌握Bebas Neue&#xff1a;免费开源标题字体的终极设计解决方案 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 还在为寻找专业、免费且视觉冲击力强的标题字体而烦恼吗&#xff1f;Bebas Neue字体正是你需…...

蓝桥杯单片机省赛拿分秘籍:手把手教你搞定第十一届的电压阈值计数与无效按键检测

蓝桥杯单片机省赛实战精要&#xff1a;电压阈值计数与无效按键检测的工程化实现 在蓝桥杯单片机设计与开发组的竞赛中&#xff0c;电压阈值计数和无效按键检测是检验选手嵌入式系统设计能力的重要考点。这两个看似独立的功能模块&#xff0c;实际上共同构成了一个完整的嵌入式系…...

保姆级教程:在Vue3项目中从零配置AntV X6图编辑引擎(含对齐线插件)

Vue3项目深度整合AntV X6图编辑引擎实战指南 在当今数据驱动的应用开发中&#xff0c;可视化图编辑功能已成为企业级前端项目的标配需求。AntV X6作为阿里经济体内部孵化的专业级图编辑引擎&#xff0c;凭借其丰富的拓扑图、流程图定制能力和完善的插件生态&#xff0c;正在逐步…...