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

自定义全局变量在SpringBoot的应用

       本文介绍了java使用全据变量的方法。当查询列表需要转义时,for循环内可以减少数据库频繁查询操作,sql查询语句可以减少join连接查询操作,可以提高数据库查询效率和程序效率。

       全局变量类主要采用单例模式,定义业务字典全局变量(通常为<id, name>,也可根据需要自定义)

一、全局变量类GlobalBeanPropertyUtil.java

java全局变量文件存储字典数据(业务自定义)和转化方法。使用时使用单例模式,传入业务列表并用javaStream过滤

common-module模块

文件:GlobalBeanPropertyUtil.java

import com.alibaba.fastjson.JSONObject;

import lombok.Data;

import org.springframework.beans.factory.annotation.Autowired;

import java.util.Arrays;

import java.util.List;

import java.util.Map;

@Data

public class GlobalBeanPropertyUtil {

        //单例模式

        private static GlobalBeanPropertyUtil instance;


        //全局变量(字典)

        private Map<Long, String> sysUsersMap;

        private Map<Long, String> factoryDeviceMap;



        private GlobalBeanPropertyUtil() {

        }



        public static GlobalBeanPropertyUtil getInstance() {

                if (instance == null) {

                        instance = new GlobalBeanPropertyUtil();

                }

                return instance;

        }





        //获取用户名称

        public String getUserNames(String userIds){

                if(StringUtils.isEmpty(userIds)){

                        return null;

                }

                List<String> userIdsList = Arrays.asList(userIds.split(","));


                StringBuilder res = new StringBuilder();

                for(String id : userIdsList){

                        String userName = this.sysUsersMap.get(Long.parseLong(id));

                        if(userName!=null){

                                res.append(userName);

                                res.append(",");

                        }

                }

                if(!"".equals(res.toString())) {

                        res.deleteCharAt(res.lastIndexOf(","));

                }

                return res.toString();

        }

        


        //获取设备名称

        public String getDeviceNames(List<Long> deviceIdsList){

                StringBuilder res = new StringBuilder();

                for(Long id : deviceIdsList){

                        String deviceName = this.factoryDeviceMap.get(id);

                        if(deviceName!=null){

                                res.append(deviceName);

                                res.append(",");

                        }

                }

                if(!"".equals(res.toString())) {

                        res.deleteCharAt(res.lastIndexOf(","));

                }

                return res.toString();

        }

}

二、使用示例

在for循环外,查询所有列表,并通过javaStream8转化<ley, value>(通常为<id, name> )形式的字典。

GlobalBeanPropertyUtil globalBeanPropertyUtil = GlobalBeanPropertyUtil.getInstance();



//设备-转义映射

List<FactoryDevice> listDevice = factoryDeviceService.selectFactoryDeviceList(new FactoryDevice());

Map<Long, String> factoryDeviceMap = listDevice.stream().collect(Collectors.toMap(FactoryDevice::getId,FactoryDevice::getDeviceName));

globalBeanPropertyUtil.setFactoryDeviceMap(factoryDeviceMap);



//人员-转义映射

List<SysUser> sysUsers = userService.selectAllUserList(new SysUser());

Map<Long, String> sysUsersMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId,SysUser::getUserName));

globalBeanPropertyUtil.setSysUsersMap(sysUsersMap);



for(FactoryCheckPlan plan:list){

    plan.setDeviceList(factoryCheckPlanDeviceMapper.selectDeviceByPlanId(plan.getId()));

    plan.setProductLineList(factoryCheckPlanDeviceMapper.selectLineByPlanId(plan.getId()));

    plan.setCheckUser(globalBeanPropertyUtil.getUserNames(plan.getCheckUser()));

    plan.setRummager(globalBeanPropertyUtil.getUserNames(plan.getRummager()));

    if(plan.getScanLevel().equals("1") && StringUtils.isNotNull(plan.getProductLineId()))

        plan.setProductLineName(String.join(",",factoryProductLineService.selectNameByIds(plan.getProductLineId().split(","))));

    if(plan.getScanLevel().equals("2") && StringUtils.isNotNull(plan.getDeviceId())){

        plan.setDeviceName(globalBeanPropertyUtil.getDeviceNames1(plan.getDeviceId()));

    }

}


http://www.kler.cn/news/283012.html

相关文章:

  • 后端完成api顺序
  • 外卖霸王餐项目是什么?怎么搭建属于自己的外卖霸王餐小程序 ?
  • 灰度发布-介绍-全链路灰度实现
  • 由浅入深学习 C 语言:Hello World【提高篇】
  • 浏览器缓存
  • 网络安全-安全渗透简介和安全渗透环境准备
  • 【CSP:202109-2】非零段划分(Java)
  • 4.sklearn-K近邻算法、模型选择与调优
  • MySQL集群技术1——编译部署mysql
  • “重启就能解决一切问题”,iPhone重启方法大揭秘
  • 解决:无法从域控制器读取配置信息
  • 2024.8.29 C++
  • C#面:ASP.NET MVC 中还有哪些注释属性用来验证?
  • RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型
  • 设计模式--装饰器模式
  • 理解torch.argmax() ,我是错误的
  • 融资和融券分别是什么意思,融资融券开通后能融到多少资金?
  • Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2.2
  • Java 入门指南:Java NIO —— Selector(选择器)
  • 【hot100篇-python刷题记录】【搜索二维矩阵】
  • 分布式锁的实现:ZooKeeper 的解决方案
  • hive数据迁移
  • 低代码革命:JNPF平台如何简化企业应用开发
  • Linux 中的中断响应机制
  • TCP keepalive和HTTP keepalive区别
  • SCP拷贝失败解决办法
  • 基于单片机的指纹识别考勤系统设计
  • Web应用服务器Tomcat
  • 基于STM32开发的智能家居温度控制系统
  • Linux下的使用字符设备驱动框架编写ADC驱动 ——MQ-4传感器