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

【redis、ruoyi-vue】基于ruoyi-vue实现数据redis的增删改查

用部门SysDept作为例子进行实现。
一、SysDeptServiceImpl (伪代码,只关注设计到数据办变更的地方)
存redis的时候采用构建新map的形式,方便根据id或名称获取到数据,具体看自己的业务。
hashMap.put(li.getDeptId()+“”, li);
hashMap.put(li.getDeptName(), li);

/*** 部门管理 服务实现* * @author hbrj*/
@Service
public class SysDeptServiceImpl implements ISysDeptService {private static final Logger log = LoggerFactory.getLogger(SysDeptServiceImpl.class);@Autowiredprivate SysDeptMapper deptMapper;@Autowiredprivate SysRoleMapper roleMapper;@Autowiredprivate RedisCache redisCache;// 启动加载@PostConstructpublic void init() {redisCache.deleteObject("deptList");List<SysDept> deptList = deptMapper.selectDeptList(new SysDept());HashMap<String, SysDept> hashMap = new HashMap<String, SysDept>();deptList.forEach(li->{hashMap.put(li.getDeptId()+"", li);hashMap.put(li.getDeptName(), li);});redisCache.deleteObject("deptList");redisCache.setCacheMap("deptList", hashMap);}/*** 根据ID查询所有子部门(正常状态)* * @param deptId*            部门ID* @return 子部门数*/@Overridepublic int selectNormalChildrenDeptById(Long deptId) {return deptMapper.selectNormalChildrenDeptById(deptId);}/*** 新增保存部门信息* * @param dept 部门信息* @return 结果*/@Overridepublic int insertDept(SysDept dept){SysDept info = deptMapper.selectDeptById(dept.getParentId());// 如果父节点不为正常状态,则不允许新增子节点if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())){throw new ServiceException("部门停用,不允许新增");}dept.setAncestors(info.getAncestors() + "," + dept.getParentId());int sta= deptMapper.insertDept(dept);if (sta >0) {redisCache.deleteObject("deptList");init();}return sta;}/*** 修改保存部门信息* * @param dept 部门信息* @return 结果*/@Overridepublic int updateDept(SysDept dept){SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId());if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)){String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();String oldAncestors = oldDept.getAncestors();dept.setAncestors(newAncestors);updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors);}int sta = deptMapper.updateDept(dept);if (sta >0) {redisCache.deleteObject("deptList");init();}if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors())&& !StringUtils.equals("0", dept.getAncestors())){// 如果该部门是启用状态,则启用该部门的所有上级部门updateParentDeptStatusNormal(dept);}return sta;}/*** 修改该部门的父级部门状态* * @param dept 当前部门*/private void updateParentDeptStatusNormal(SysDept dept){String ancestors = dept.getAncestors();Long[] deptIds = Convert.toLongArray(ancestors);deptMapper.updateDeptStatusNormal(deptIds);redisCache.deleteObject("deptList");init();}/*** 修改子元素关系* * @param deptId 被修改的部门ID* @param newAncestors 新的父ID集合* @param oldAncestors 旧的父ID集合*/public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors){List<SysDept> children = deptMapper.selectChildrenDeptById(deptId);for (SysDept child : children){child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));}if (children.size() > 0){deptMapper.updateDeptChildren(children);redisCache.deleteObject("deptList");init();}}/*** 删除部门管理信息* * @param deptId 部门ID* @return 结果*/@Overridepublic int deleteDeptById(Long deptId){int sta= deptMapper.deleteDeptById(deptId);if (sta >0) {redisCache.deleteObject("deptList");init();}return sta;}}

二、从redis获取部门列表数据

Map<String, SysDept> deptList=redisCache.getCacheMap("deptList");
SysDept sysDept = deptList.get("1");
http://www.xdnf.cn/news/1320481.html

相关文章:

  • Java面试宝典:Redis高级特性和应用(发布 订阅、Stream)
  • [python学习记录1]python简介
  • 最小路径和
  • 在职老D渗透日记day19:sqli-labs靶场通关(第26a关)get布尔盲注 过滤or和and基础上又过滤了空格和注释符 ‘)闭合
  • 线程(基本概念和相关命令)
  • LeetCode热题100--104. 二叉树的最大深度--简单
  • Rust:实现仅通过索引(序数)导出 DLL 函数的功能
  • STM32单片机学习日记
  • 网络常识-SSE对比Websocket
  • 记一次安装OpenStack(Stein)-nova报错问题解决
  • 数据赋能(396)——大数据——抽象原则
  • 智能汽车领域研发,复用云原生开发范式?
  • 48.Seata认识、部署TC服务、微服务集成
  • http工作流程
  • C++算法竞赛:位运算
  • 前端项目练习-王者荣耀竞赛可视化大屏 -Vue纯前端静态页面项目
  • 服务器管理与配置学习总结
  • MYSQL-175. 组合两个表
  • JavaScript性能优化实战(四):资源加载优化
  • LeetCode 837.新 21 点:动态规划+滑动窗口
  • 【数据结构】堆和二叉树详解——上
  • 旋钮键盘项目---foc讲解(闭环位置控制)
  • 学习Python中Selenium模块的基本用法(5:程序基本步骤)
  • Linux817 shell:until,nfs,random
  • 力扣438:找到字符串中所有的字母异位词
  • Django前后端交互实现用户登录功能
  • [python学习记录2]变量
  • 脉冲计数实现
  • Docker之自定义jkd镜像上传阿里云
  • 排列组合+数量+资料