问题:如何查询出列标和权限
在吴总的讲解下明白,当前登录者的数据存在user表中,user表中有一个org_id,关联orgnazition表查到当前登录者的的level。
level有三种,如果level=1就是省级超级管理员可看到所有属于该角色的人员;如果level=2就是地级超级管理员可看到本市及其下属组织机构的属于该角色的所有人员;如果level=3就是博物馆超级管理员仅能看到本馆属于该角色 的所有人员。这个解决了权限问题。
接下来就是查人。三表关联(user表,orgnazition表,userRole表),其中user表是中间表,所以作为基础表。
user表和orgnazition表查出工作单位,user和userRole表查出角色,user表查出账号和姓名。
三表组合查出列表。
问题:分页功能
分页功能框架中有基础的单表查询分页功能,
但是我的需求的三表查询结果。
所以如果做分页,必须做成单表查询。
所以用到了数据库查询语句中的“in”。
将中间表user表作为基础,首先查询出userRole表中指定角色的userID.然后查user表中的ID in userID的user.
然后查orgnazition表中查出指定的orgnaziton组织,然后查user表中的orgID in orgnaziton的ID的user.
由此查出符合条件的user。
在user的MODEL中加入
角色名称
private String roleName="";
@Transient
public String getRoleName(){
return roleName;
}
public void setRoleName(String roleName){
this.roleName=roleName;
}
单位名称
private String orgName="";
@Transient
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
查询出结果以后赋给List<User>,将List<User>返回给前台。
List<User> userAll = (List<User>)userService.queryByHql(hql, Tools.getMap(), page);
然后做分页
Page page= new Page();
page.setCurrentPage(currentPage);
page.setSize(size);
返回给前台。
问题:删除功能
在user表中的id查到userRole表中的userid等于删除传的id,roleid等于要删除的角色id,查到记录将其从userRole表中删除。
三、明日工作计划
1、开新需求做管理员账号。
四、心得和建议
1、之前一直只会连表查询。没有用过in查询。今天又找到一种新的解决问题的思路。在工作中遇到的问题是学技能最快见效的标准,所以还是要不怕问题的去多做,多思考,多尝试。
2、数据库的操作很重要,还是要多做,多查。
3、看了orgnazition表,发现一个很有用的招数。以前做查询父节点下的子孙节点时候,都是用pig循环去查。看了orgnazition表发现表中多一个path字段,path字段用“爷/父/孙/......”形式记录了该数据的上级上上级等等。然后在查询某个节点的子孙节点的时候用sql语句的 like "某节点的path/%"