一. 参数设置
其实就是在mysql数据库里面创建一张系统设置表,存入一些可能变动但是有经常使用的值,其实如果我们写好的话
,我也看见有些人往里面存入了一些html页面,我没有这方面的需求,所以没有使用过
页面参数解析
public class SysConfig extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 参数主键 */
@Excel(name = "参数主键", cellType = ColumnType.NUMERIC)
private Long configId;
/** 参数名称 */
@Excel(name = "参数名称")
private String configName;
/** 参数键名 */
@Excel(name = "参数键名")
private String configKey;
/** 参数键值 */
@Excel(name = "参数键值")
private String configValue;
/** 系统内置(Y是 N否) */
@Excel(name = "系统内置", readConverterExp = "Y=是,N=否")
private String configType;
public Long getConfigId()
{
return configId;
}
public void setConfigId(Long configId)
{
this.configId = configId;
}
@NotBlank(message = "参数名称不能为空")
@Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
public String getConfigName()
{
return configName;
}
public void setConfigName(String configName)
{
this.configName = configName;
}
@NotBlank(message = "参数键名长度不能为空")
@Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
public String getConfigKey()
{
return configKey;
}
public void setConfigKey(String configKey)
{
this.configKey = configKey;
}
@NotBlank(message = "参数键值不能为空")
@Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符")
public String getConfigValue()
{
return configValue;
}
public void setConfigValue(String configValue)
{
this.configValue = configValue;
}
public String getConfigType()
{
return configType;
}
public void setConfigType(String configType)
{
this.configType = configType;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("configId", getConfigId())
.append("configName", getConfigName())
.append("configKey", getConfigKey())
.append("configValue", getConfigValue())
.append("configType", getConfigType())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
其还继承了一些共有属性,remark为备注,其他都简单一看就看的明白。
实现方式
通过注解 @PostConstruct,这个注解可以让使用它的方法在系统加载开始时就启动,将数据存入redis当中,其他的就是一些简单的增删改查的小方法,看起来很简单,但是使用起来很方便
/**
* 项目启动时,初始化参数到缓存
*/
@PostConstruct
public void init()
{
List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
for (SysConfig config : configsList)
{
redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
}
}
前端引入我就不写了,因为和字典管理是一模一样的,想学习的也可以百度若依学习一下
二. 字典管理
字典的真题逻辑和参数设置是差不多的,也是在项目启动的时候会将里面的数据传入到redis中,但是这个是可以清除缓存的
/**
* 项目启动时,初始化字典到缓存
*/
@PostConstruct
public void init()
{
List<SysDictType> dictTypeList = dictTypeMapper.selectDictTypeAll();
for (SysDictType dictType : dictTypeList)
{
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType());
DictUtils.setDictCache(dictType.getDictType(), dictDatas);
}
}
据我观察除了清除按钮外在多个地方都会去清除缓存,大概是每次数据有变动增删改,都会清除掉数据信息,当使用的时候会先去缓存里面取,当缓存里面没有才会从数据库里面取,再存入缓存。
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
@Override
public List<SysDictData> selectDictDataByType(String dictType)
{
List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
if (StringUtils.isNotEmpty(dictDatas))
{
return dictDatas;
}
dictDatas = dictDataMapper.selectDictDataByType(dictType);
if (StringUtils.isNotEmpty(dictDatas))
{
DictUtils.setDictCache(dictType, dictDatas);
return dictDatas;
}
return null;
}
使用方法和参数管理是一模一样的
1、main.js中引入全局变量和方法(已有)
import { getDicts } from "@/api/system/dict/data";
Vue.prototype.getDicts = getDicts
2、页面使用数据字典
this.getDicts("字典类型").then(response => {
this.xxxxx = response.data;
});
很简单但是很方便,这样很多的静态变量就可以纳入管理起来,如果是项目给企业中运用的时候,就可以根据企业需求来调整项目的某些名称。我就碰到过,某企业让我将入库和出库改为从某地到某地,因为他们的操作人员和业务员怕搞不清楚这些,那我个人不擅长处理和他们人员沟通,正好简单我就改了,但是如果当时我们项目纳入字典管理我就可以让他们自己改了。。。。。