SpringBoot优点达项目实战:获取系统配置接口(三)

news2024/7/5 19:39:13

SpringBoot优点达项目实战:获取系统配置接口(二)


文章目录

      • SpringBoot优点达项目实战:获取系统配置接口(二)
        • 1、查看接口
        • 2、查看数据库
        • 3、代码实现
          • 1、创建实体类SysConfig
          • 2、创建返回数据的vo
          • 3、创建controller类
          • 4、实现Service层
          • 5、实现mapper层
        • 4、测试结果

1、查看接口

GET /index/getConfig

请求参数

返回结果

状态码状态码含义说明数据模型
200OK成功Inline

返回数据结构

状态码 200

名称类型必选约束说明
» errnointegertruenonenone
» errmsgstringtruenonenone
» dataobjecttruenonenone
»» login_titlestringtruenone登录页标题
»» login_bgstringtruenone登录页背景
»» system_namestringtruenone系统名称
»» system_logostringtruenone系统logo
»» web_icostringtruenonefavicon
2、查看数据库

image-20240626171542672

从数据库中,可以看出,请求项为管理系统配置

idgroup_valuetab_valueattr_keyattr_nameattr_valuedel_flagtypeconfig_valuevalidatorplaceholder
77systemloginlogin_title登录页标题优化登录系统09
78systemloginlogin_bg登录页背景static/admin/image/loginbg.png09
80systembasesystem_name系统名称优化管理系统09
81systembasesystem_logo系统logostatic/admin/image/logo.png09
82systembaseweb_icofaviconstatic/admin/image/favicon.ico09
3、代码实现
1、创建实体类SysConfig
@Data
public class SystemConfig {

    @Schema(description = "主键")
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;

    @Schema(description = "配置名称")
    @TableField(value = "group_value")
    private String groupValue;

    @Schema(description = "组件名称")
    @TableField(value = "tab_value")
    private String tabValue;

    @Schema(description = "配置键")
    @TableField(value = "attr_key")
    private String attrKey;

    @Schema(description = "配置名称")
    @TableField(value = "attr_name")
    private String attrName;

    @Schema(description = "配置值")
    @TableField(value = "attr_value")
    private String attrValue;

    @TableLogic
    @Schema(description = "逻辑删除")
    @TableField(value = "del_flag")
    @JsonIgnore
    private Integer delFlag;

    @Schema(description = "类型")
    @TableField(value = "type")
    private Integer type;

    @Schema(description = "系统值")
    @TableField(value = "config_value")
    private String configValue;

    @Schema(description = "验证规则")
    @TableField(value = "validator")
    private String validator;

    @Schema(description = "提示文字")
    @TableField(value = "placeholder")
    private String placeholder;

    @Schema(description = "是否能删除")
    @TableField(value = "can_delete")
    private Integer canDelete;


    @Schema(description = "排序")
    @TableField(value = "sort_num")
    private Integer sortNum;
    
}
2、创建返回数据的vo

因为前端请求并不需要那么多的数据,所以我们可以在web-admin的包下创建

image-20240626172452307

@Data
@Schema(description = "系统配置实体")
public class SystemConfigVo {

    @Schema(description = "登录页标题")
    private String loginTitle;

    @Schema(description = "登录页背景")
    private String loginBg;

    @Schema(description = "系统名称")
    private String systemName;

    @Schema(description = "系统logo")
    private String systemLogo;

    @Schema(description = "favicon")
    private String webIco;
}
3、创建controller类
@Tag(name = "基础配置")
@RestController()
@RequestMapping("/index")
@Slf4j
public class BaseSystemConfigController {

    @Autowired
    private SystemConfigService systemConfigService;


    @GetMapping("/getConfig")
    @Operation(summary = "获取系统配置")
    public Result<SystemConfigVo> getConfig(){
        SystemConfigVo systemConfigVo = systemConfigService.getConfig();
        return Result.ok(systemConfigVo);
    }
}

包含的注解和类

  • @Tag(name = “基础配置”):这是 OpenAPI(Swagger)的注解,用于给 API 分组,方便生成 API 文档时进行分类。这里的分组名称是 “基础配置”。
  • @RestController:这是 Spring 的注解,表示这个类是一个控制器,并且它的每个方法的返回值会自动转换为 JSON 格式并写入 HTTP 响应中。
  • @RequestMapping(“/index”):这是 Spring 的注解,用于定义请求的基本路径。这里定义了这个控制器的所有请求路径前缀为 /index
  • @Slf4j:这是 Lombok 的注解,用于自动生成一个名为 log 的 Logger 对象,方便在类中进行日志记录。
  • @Autowired:这是 Spring 的注解,用于自动注入依赖。这里注入了 SystemConfigService 服务类。
  • @GetMapping(“/getConfig”):这是 Spring 的注解,用于将 HTTP GET 请求映射到 getConfig 方法。请求路径是 /index/getConfig
  • @Operation(summary = “获取系统配置”):这是 OpenAPI(Swagger)的注解,用于给 API 方法添加描述,方便生成 API 文档时显示。这里的描述是 “获取系统配置”。
4、实现Service层

创建service接口

/**
 * 针对表sys_config的数据操作service
 */
public interface SystemConfigService extends IService<SystemConfig> {
    /**
     * 获取系统配置信息
     * @return
     */
    SystemConfigVo getConfig();

    /**
     * 用户等登录
     * @param systemUser
     * @return
     */
    String login(SystemUser systemUser);
}
  • extends IService:IService 是 MyBatis-Plus 提供的一个通用服务接口,SystemConfigService 通过继承它获取了许多通用的 CRUD 操作方法。SystemConfig 是实体类,表示 sys_config 表。

实现类

@Service
@Slf4j
public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, SystemConfig>
implements SystemConfigService {


    @Autowired
    private SystemConfigMapper systemConfigMapper;
    /**
     * 获取系统配置信息
     *
     * @return
     */
    @Override
    public SystemConfigVo getConfig() {
        List<SystemConfig> systemConfigList = systemConfigMapper.getTabByVale(SystemConfigConstant.SYSTEM_CONFIG_SYSTEM);

        SystemConfigVo systemConfigVo = new SystemConfigVo();

        // 定义一个映射,将常量值映射到相应的设置方法
        Map<String, BiConsumer<SystemConfigVo, String>> configMap = new HashMap<>();
        configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_LOGIN_TITLE, SystemConfigVo::setLoginTitle);
        configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_LOGIN_BG, SystemConfigVo::setLoginBg);
        configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_SYSTEM_NAME, SystemConfigVo::setSystemName);
        configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_SYSTEM_LOGO, SystemConfigVo::setSystemLogo);
        configMap.put(SystemConfigConstant.SYSTEM_CONFIG_TAB_WEB_ICO, SystemConfigVo::setWebIco);

        for (SystemConfig config : systemConfigList) {
            BiConsumer<SystemConfigVo, String> setter = configMap.get(config.getAttrKey());
            if (setter != null) {
                setter.accept(systemConfigVo, config.getAttrValue());
            }
        }

        return systemConfigVo;
    }
}

类注解

  • @Service:标记该类是一个服务类,Spring 会自动将其注册为 Spring Bean。
  • @Slf4j:由 Lombok 提供,自动生成一个 log 对象用于日志记录。

类声明

  • SystemConfigServiceImpl 类继承了 ServiceImpl<SystemConfigMapper, SystemConfig>,并实现了 SystemConfigService 接口。

依赖注入

  • @Autowired:注入 SystemConfigMapper,用于与数据库交互

getConfig 方法

  • 从数据库中获取系统配置列表。
  • 创建 SystemConfigVo 对象,用于存储系统配置。
  • 定义一个映射,将配置项的键映射到 SystemConfigVo 对象的相应设置方法。
  • 遍历配置列表,根据键值对调用相应的设置方法,将配置值注入 SystemConfigVo 对象。
  • 返回填充了系统配置信息的 SystemConfigVo 对象。

主要逻辑

  • 获取系统配置列表:调用 systemConfigMapper.getTabByVale(SystemConfigConstant.SYSTEM_CONFIG_SYSTEM) 获取系统配置列表。
  • 映射配置项:使用 Map<String, BiConsumer<SystemConfigVo, String>> 将配置项的键映射到 SystemConfigVo 的设置方法。
  • 设置配置值:遍历配置列表,根据键值对调用相应的设置方法,将配置值注入 SystemConfigVo 对象。
  • 返回配置对象:返回包含所有系统配置信息的 SystemConfigVo 对象。
5、实现mapper层
@Mapper
public interface SystemConfigMapper extends BaseMapper<SystemConfig> {
    @Select("select * from sys_config where tab_value = #{systemConfigSystem}")
    List<SystemConfig> getTabByVale(String systemConfigSystem);
}
  • @Mapper : MyBatis 这是一个 Mapper 接口,Spring 会自动将其注册为一个 MyBatis Mapper。
  • extends BaseMapper: 使得 SystemConfigMapper 继承了 MyBatis-Plus 提供的通用 Mapper 接口,可以直接使用通用的 CRUD 方法。
  • @Select注解:定义了一个自定义的 SQL 查询语句,用于从 sys_config 表中根据 tab_value 查询记录。
  • getTabByVale 方法根据传入的 systemConfigSystem 参数查询 sys_config 表中的记录,并返回一个 SystemConfig 对象的列表。
4、测试结果

访问knife4j,进行接口测试

image-20240626174204198

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

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

相关文章

【Unity】RPG2D龙城纷争(六)关卡编辑器之角色编辑

更新日期&#xff1a;2024年6月26日。 项目源码&#xff1a;第五章发布&#xff08;正式开始游戏逻辑的章节&#xff09; 索引 简介一、角色编辑模式1.将字段限制为只读2.创建角色&#xff08;刷角色&#xff09;3.预览所有角色4.编辑选中角色属性5.移动角色位置6.移除角色 简介…

postgres数据库的流复制

1. 流复制和逻辑复制的差异 逻辑复制和流复制最直观的不同是&#xff0c;逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上&#xff0c;由逻辑解析模块对wal日志进行初步的解析&#xff0c;解析结果是ReorderBufferChange&#xff08;理解为HeapTup…

EOS Black延迟高如何处理 EOS Black延迟高这样降低

EOS Black中&#xff0c;玩家可以根据自己的喜好和策略&#xff0c;随心所欲地雕琢人物属性&#xff0c;选择装备属性&#xff0c;搭配千变万化的技能&#xff0c;甚至还可以自定义职业&#xff0c;打造出最适合自己的角色。这种自由度极高的玩法&#xff0c;让玩家能够真正体验…

3D Web轻量引擎HOOPS Web Platform赋能AEC行业数字化,高效渲染与多格式支持!

在建筑、工程和施工&#xff08;AEC&#xff09;行业&#xff0c;数字化转型和高效协作正变得越来越重要。为应对日益复杂的项目需求和不断提升的质量标准&#xff0c;AEC企业需要一种强大的工具来实现高效的3D可视化和数据管理。HOOPS Web Platform作为一款综合性3D开发平台&a…

数字图像分析(第二部分)

文章目录 第8章 图像分割图像分割定义阈值分割依赖像素的阈值选取Otsus方法依赖区域的阈值选取依赖坐标的阈值选取变化阈值法区域生长法分裂合并方法分水岭算法聚类分割算法K-meansAP算法Graph cut第9章 图像特征表达基于全局特征的图像表达直方图GIST基于局部特征的图像表达简…

【护眼科普】台灯怎么选对眼睛好?五大适合学生写作业的台灯推荐

作为一位家长&#xff0c;我深切地领悟到保护孩子眼部健康的至关重要性。随着科技的日新月异&#xff0c;孩子们愈发频繁地接触和使用各类电子设备&#xff0c;如平板电脑、手机和电视&#xff0c;屏幕时间几乎占据了他们日常生活的相当一部分。然而&#xff0c;不容忽视的是&a…

openlayers性能优化——开启图层预加载、减少空白等待时间

使用切片图层时、地图拖拽会有空白图片&#xff0c;为了减少空白等待时间&#xff0c;我们可以开始图层预加载。 const map_top new Map({layers: [new TileLayer({preload:Infinity, //预加载source: new StadiaMaps({layer: "outdoors",}),}),],target: "ma…

【5】apollo编写python节点步骤及实例

在workspace/modules下新建包buildtool create --template component modules/test_one 编译包 buildtool build -p modules/test_two/ 增加自己的proto消息 在刚才自动生成的proto文件里面添加自己定义的消息,记得重新编译. syntax "proto2";package apollo;…

网络编程基础知识拾遗:用大白话解释什么是交换机、路由器、光猫、IP地址和子网掩码、公网和内网IP、端口和域名

二层交换机 在没有二层交换机的环境中&#xff0c;两台电脑或多个电脑之间的通信主要依赖于直连方式或共享介质。假如你和你的舍友都有一台电脑&#xff0c;当你们之间想要进行通信的时候&#xff0c;在没有二层交换机的情况下&#xff0c;可以使用网线&#xff08;为了方便理…

SpringBoot中使用多线程调用异步方法,异步方法有无返回值例子。

快速了解Async注解的用法&#xff0c;包括异步方法无返回值、有返回值&#xff0c;最后总结Async注解失效的几个坑。 在我们的 SpringBoot 应用中&#xff0c;经常会遇到在一个接口中&#xff0c;同时做事情1&#xff0c;事情2&#xff0c;事情3&#xff0c;如果同步执行的话&a…

发电机保护屏产品介绍,组成

发电机保护屏产品介绍&#xff0c;组成 发电机保护屏是用于保护发电机组的电气装置。它根据发电机的类型和实际运行要求&#xff0c;将多种保护装置组合在一起&#xff0c;形成一个保护屏柜。发电机保护测控屏是指把发电机类保护装置集中在安装在一个控制柜里&#xff0c;主要用…

【软件下载】Folx详细安装教程视频-Folx软件最新版下载

根据大数据调查表明Acceleration PRO下载&#xff1a;抽出多达10个流的故障能够显着提高下载速度。根据行业数据显示与iTunes PRO集成&#xff1a;通过将Folx集成到iTunes来下载歌曲和视频&#xff0c;能够在下载后立即自动添加到iTunes库。实际上我们可以这样讲通过代理下载&a…

LabVIEW遇到无法控制国外设备时怎么办

当使用LabVIEW遇到无法控制国外产品的问题时&#xff0c;解决此类问题需要系统化的分析和处理方法。以下是详细的解决思路和具体办法&#xff0c;以及不同方法的分析和比较&#xff0c;包括寻求代理、国外技术支持、国内用过的人请教等内容。 1. 了解产品的通信接口和协议 思路…

小型海外仓布局策略:高效利用有限空间,标准化3F流程

合理高效的仓库空间设计&#xff0c;不只是对大型海外仓很关键。对空间有限的小型海外仓来说或许价值更大。 本身仓储空间就有限&#xff0c;如果还没有科学规划&#xff0c;造成空间浪费&#xff0c;那将直接影响到核心业务的运转。 今天我们就给大家整理了对小型海外仓布局…

制作一个智能体:抖音热点话题文案制作助手

文章目录 第一步&#xff0c;添加助手第二步&#xff0c;选择语聚GPT第三步&#xff0c;填写相关信息第四步&#xff0c;工具中选择抖音(普通号)第五步&#xff0c;选择“查询热门视频数据”第六步&#xff0c;测试总结 这篇文章&#xff0c;我们手把手的演示开发一个智能体&am…

Mysql回表和覆盖索引

一、简述 回表&#xff0c;顾名思义就是回到表中&#xff0c;也就是先通过普通索引扫描出数据所在的行&#xff0c;再通过行主键ID 取出索引中未包含的数据。所以回表的产生也是需要一定条件的&#xff0c;如果一次索引查询就能获得所有的select 记录就不需要回表&#xff0c;…

LLM文本数据集775TB:覆盖32个领域,444个数据集

大语言模型在各领域展现出巨大潜力&#xff0c;其性能在很大程度上依赖于训练和测试所用的数据集。然而&#xff0c;目前在如何构建和优化这些数据集方面&#xff0c;尚缺乏统一的认识和方法论。下面从五个方面整合和分类了LLM数据集的基本内容&#xff1a;预训练语料库、指令微…

在低版本Excel中创建次级下拉列表

在低版本中indirect函数不支持选区&#xff0c;创建次级下拉列表得依靠“名称管理”给选区命名。 (笔记模板由python脚本于2024年06月26日 06:24:22创建&#xff0c;本篇笔记适合常用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www…

数据库系统概论(第5版教材)

第一章 绪论 1、数据(Data)是描述事物的符号记录&#xff1b; 2、数据库系统的构成&#xff1a;数据库 、数据库管理系统&#xff08;及其开发工具&#xff09; 、应用程序和数据库管理员&#xff1b; 3、数据库是长期存储在计算机内、有组织、可共享的大量数据的集合&…

linux应用开发基础知识(七)——管道和消息队列进程通信

管道通信 匿名管道 #include <unistd.h> int pipe(int pfd[2]);pfd[0]用于读管道&#xff0c;而pdf[1]用于写管道。 注意&#xff1a;匿名管道只能用于亲缘关系的进程之间通信。管道通道是单向的&#xff0c;一边读&#xff0c;另一边写。管道可以用于大于两个进程共…