1. 用户实体管理的增删改查总结
增加、查询、删除操作都和单独操作单表的操作一样,所以可以放心使用JPA接口去操作。
不同1:更新用户本实体信息,首先先将原实体的关联实体集合查询出来,放到临时变量中,之后赋值给欲更新的对象,最后调用更新接口更新主实体,保证主实体与关联实体的关系。
代码如下:
//找到原始数据 UxAdmin uxAdminOld = uxAdminDao.findById(id);
//关联对象----角色 Set<UxRole> roleOld = uxAdminOld.getRoles();
//重新赋值 uxAdmin.setRoles(roleOld);
//更新 uxAdminDao.update(uxAdmin); |
不同2:重新更新用户与角色的关联关系,此功能是从用户实体发起的,以用户作为主实体,角色作为从属实体。就直接将新的从属实体集合从数据库查询出来,对主实体赋其值,之后更新就好了,如果没有更新的对象,设置为null即可,表示没有任何的角色与该用户关联,用户没有任何角色。
代码如下:
//查出用户 uxAdmin = uxAdminDao.findById(id);
if("".equalsIgnoreCase(roleIds)){
//设置新的角色 uxAdmin.setRoles(null); }else{
//查出备选的角色集合 Set<UxRole> roles = uxRoleDao.findByIdsForJPQL(roleIds);
//设置新的角色 uxAdmin.setRoles(roles); }
//更新操作 uxAdminDao.update(uxAdmin); |
2. 菜单实体管理的增删改查总结
从类图就可以看得出来,用户实体与菜单实体差不多。所以操作也大同小异。
查询、增加、删除操作和单实体操作没什么分别。直接操作即可,关键就是更新记录,和用户实体一样。先将关联集合实体查询出来放到临时变量中,之后给目标更新实体赋值、再调用更新接口更新实体。
代码如下:
UxSysMenu uxSysMenuOld = uxSysMenuDao.findById(uxSysMenu.getImenuid());
//保持原有的角色与菜单的关系 uxSysMenu.setUxRoles(uxSysMenuOld.getUxRoles());
//更新菜单 uxSysMenuDao.update(uxSysMenu); |
3. 角色实体管理增删改查总结
在角色管理中依然是更新操作区别于其他操作
不同1:单实体信息更新
//查找一个角色对象 UxRole uxRoleOld = uxRoleDao.findById(roleId);
//获得旧菜单 Set<UxSysMenu> menuOlds = uxRoleOld.getMenus();
//获得旧人员 Set<UxAdmin> adminOlds = uxRoleOld.getUxAdmins();
uxRole.setMenus(menuOlds);
uxRole.setUxAdmins(adminOlds);
uxRole.setId(roleId);
//更新 uxRoleDao.update(uxRole); |
可以看出也是先将角色关联的菜单集合、用户集合都临时记住,之后再更新主实体。保证关系不会因为角色实体的更新而丢失。
不同2:更新角色的从属菜单关系
代码如下
UxRole role = uxRoleDao.findById(roleId);
String[] menuArray = menuIds.split(",");
Set<UxSysMenu> newMenus = new HashSet<UxSysMenu>();
// 遍历菜单id数组 for (String menuIdStr : menuArray) {
if (!"".equalsIgnoreCase(menuIdStr) && !"0".equalsIgnoreCase(menuIdStr)) {
UxSysMenu uxSysMenu = uxSysMenuDao.findById(Integer .parseInt(menuIdStr));
newMenus.add(uxSysMenu);
} }
// 设置新的菜单 role.setMenus(newMenus);
// 更新 uxRoleDao.update(role); |
相当于对角色实体的菜单集合重新赋值后再更新。