MySQL表设计 |
您所在的位置:网站首页 › 字典有什么功能 › MySQL表设计 |
文章目录
1、字典表的意义2、若依的字典表结构3、ruoyi枚举类4、代码.ruoyi字典查询接口与缓存
假设有一个职员表: 姓名性别证件类型学历国籍甲男身份证本科中国乙女身份证本科中国……………这个表有一亿条数据,现在用户要求证件类型要从"身份证"改为"居民身份证",这样一下更新所有数据,能完成,但维护困难,由此,考虑这么实现: 代号身份证类型001身份证002暂住证加了这样一个身份证类型表后,职员表变为: 姓名性别证件类型学历国籍甲男001本科中国乙女001本科中国……………此时把"身份证"改为"居民身份证",只需改身份证类型表的一行数据的一个字段。但此时有新的问题了,国籍、学历也是可以枚举完的字段,那再加个学历类型表?显然不行,如果这种字段有十几个,那以后查询就要进行几十个表的联结(join)操作。先看实现: 系统代码表 标识分类内容111Country中国112Country美国………………001ID身份证002ID暂住证即加一个类型字段,以区分是具体哪个字段的。 2、若依的字典表结构基于以上一个简单的背景,来看若依框架提供的字典表结构:ruoyi有两张字典相关表,一个字典类型表sys_dict_type,一个字典数据表sys_dict_data,将字典定义和数据分开。先看字典类型表: 再看字典数据表:
字典数据表支持层级也是一个要考虑的点,如下面这个需求:
字典中定义好数据了,再写一个对应于dict_type的枚举类,枚举类中定义值,方便后面代码中调用枚举值做业务处理。以ruoyi的审核状态字典为例:
关于Java类加载的时机,访问这里。 /定义了上面的字典对应的枚举类后,写业务逻辑代码: if (xxDto.getAuditCode().equals(AuditStatusEnum.NO.getCode())){ return new MyException("审核未通过,不可操作!"); } 4、代码.ruoyi字典查询接口与缓存定义接口,查询不同类型下的字典的key和value,给前端展示(当然前端也可以用html定义下拉框选项写死几个) /** * 根据字典类型查询字典数据信息 */ @GetMapping(value = "/type/{dictType}") public AjaxResult dictType(@PathVariable String dictType) { return AjaxResult.success(dictTypeService.selectDictDataByType(dictType)); }service层接口: /** * 根据字典类型查询字典数据 * * @param dictType 字典类型 * @return 字典数据集合信息 */ public List selectDictDataByType(String dictType);service接口实现类:这里是先在字典缓存中查,如果有,直接返回,如果缓存中没有,则调mapper层去数据库查,并把结果查询结果写进缓存备用 /** * 根据字典类型查询字典数据 * * @param dictType 字典类型 * @return 字典数据集合信息 */ @Override public List selectDictDataByType(String dictType) { List dictDatas = DictUtils.getDictCache(dictType); if (StringUtils.isNotNull(dictDatas)) { return dictDatas; } dictDatas = dictDataMapper.selectDictDataByType(dictType); if (StringUtils.isNotNull(dictDatas)) { DictUtils.setDictCache(dictType, dictDatas); return dictDatas; } return null; }获取字典缓存的方法定义: /** * 获取字典缓存 * * @param key 参数键 * @return dictDatas 字典数据列表 */ public static List getDictCache(String key) { Object cacheObj = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key)); if (StringUtils.isNotNull(cacheObj)) { List dictDatas = StringUtils.cast(cacheObj); return dictDatas; } return null; }此时,前端调用接口,传入对应的dictType,即可拿到下拉框中的字典字段: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |