【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");