1、数据查询并缓存
public List<SysMenu> findListAllMenu() { List<SysMenu> menuList = CacheKit.get(CacheConst.cache_menu.getCacheKey(), "findListAllMenu"); if (menuList.isEmpty()) { String sql = "select menu_id, menu_name, menu_url, parent_id, menu_auth from sys_menu order by parent_id asc"; menuList = menu.find(sql); CacheKit.put(CacheConst.cache_menu.getCacheKey(), "findListAllMenu", menuList); } return menuList; }
当没有缓存时,debug返回结果显示为
2、service中对查询结果处理,例如,勾选已选菜单
public List<SysMenu> findAllMenuZtree(String rights) { List<SysMenu> allMenus = menuDao.findListAllMenu(); for (SysMenu m : allMenus) { //根节点展开 if ("0".equals(m.getStr("parent_id"))) { m.put("open", true); } //当前菜单是否勾选 if (RightsHelper.testRights(rights, m.getStr("menu_id"))) { m.put("checked", true); } } return allMenus; }
问题就出在这里,当没有缓存时返回结果正常,处理之后数据也是正常的。当有缓存时,1步骤方法返回结果为之前已处理过的数据集合,debug结果为:
一脸懵逼,数据是在处理之前已经缓存了的,处理过后的数据怎么会跑到缓存里面去?求指点一下问题所在。
项目:JFinal