saas-export项目——update部门方法

学习目标

(1)修改部门
(2)删除部门
(3)if标签 与choose标签
(4)RBAC权限模型
(5) 用户增删改查

一、部门修改后台

(1)TestDeptService

@Test
public void test05(){

    String deptId="4028827c4fb633bd014fb64467470000";
    Dept dept = iDeptService.findById(deptId);
    //1 模拟页面的修改
    dept.setDeptName("ym");

    dept.setCompanyName("吉首大学");
    dept.setCompanyId("1");

    Dept parent = new Dept();//下拉菜单
    parent.setDeptId("100");
    dept.setParent(parent);

    dept.setState(0);//停用

    //2 保存到数据库
    iDeptService.updateDept(dept);

    l.info("test05  dept="+dept);
}

(2)IDeptService

//保存编辑页面的部门数据
void updateDept(Dept dept);

(3)DeptServiceImpl

@Override
    public void updateDept(Dept dept) {
        //与保存的区别 》1:前者insert 后者是update  》2:前者需要产生id,后者有id
        iDeptDao.update(dept);
    }

(4)IDeptDao

 void update(Dept dept);

(5)DeptDaoImpl.xml

<update id="update" parameterType="dept">
 update  pe_dept set

        dept_name     =  #{deptName    }  ,
        parent_id     =  #{parent.deptId}  ,
        state         =  #{state       }  ,
        company_id    =  #{companyId   }  ,
        company_name  =  #{companyName }

 where dept_id= #{deptId}
</update>

在所有的更新中,只有id值 不能进行修改
dept_id不能写死
当前 Dept实体类中,没有parentId,只有 Dept parent

二、部门修改前台

(1)dept-update.jsp

${path}/system/dept/update.do

(2)DeptController

 //action="${path}/system/dept/update.do"
    @RequestMapping(path="/update",method ={ RequestMethod.GET, RequestMethod.POST})
    public String update(Dept dept,String parentId){

        l.info("update dept="+dept);
        l.info("update parentId="+parentId);

        //当前写死companyId与companyName以后再修改
        dept.setCompanyName("吉首大学");
        dept.setCompanyId("1");

        Dept parent = new Dept();//下拉菜单
        parent.setDeptId(parentId);
        dept.setParent(parent);

        l.info("update dept="+dept);
        //2 保存到数据库
        iDeptService.updateDept(dept);

        return "redirect:/system/dept/toList.do";//修改完成之后跳到列表页面
    }

三、部门修改测试

bug1:自己选自己作上级部门

 <select class="form-control" name="parentId">
 <option value="">成为顶级部门</option>
<c:forEach items="${list}" var="item">
 <%-- dept表示正在编辑的部门数据,不能选自己作为上级部门--%>
    <c:if test="${dept.deptId != item.deptId}">
<option ${dept.parent.deptId == item.deptId ?'selected':''}  value="${item.deptId}">${item.deptName}</option>
</c:if>
</c:forEach>
 </select>

通过if标签来判断

bug2:选择自己作为顶级部门报错

》 当选择顶级部门时,提交的parent_id为空字符串

部门修改-设置顶级部门

(1)一个部门可以没有上级部门,此时该部门为顶极部门
(2)如何表示顶极部门?

parent_id = NULL

mybatis动态标签-if标签

(1)if标签是什么?
Mybatis提供的动态sql的标签支持
(2)if标签有什么用?
可以根据值编写条件,如果条件成立,拼接sql否则不拼接
(3)if标签如何使用?
》》 1 if标签的test属性必填,一般只用true或false作为结果。
》》 2 判断条件property != null或 property == null,适用于任何类型的字段,用于判断属性值是否为空。
》》 4 当有多个判断条件时,使用and或or
解决方法1

update pe_dept set

        dept_name     =  #{deptName    }  ,
        <if test="parent.deptId  == null or parent.deptId == '' ">
            parent_id   = NULL  ,
        </if>
        <if test="parent.deptId !=null and parent.deptId != '' ">
            parent_id     = ${parent.deptId}  ,
        </if>
        state         =  #{state       }  ,
        company_id    =  #{companyId   }  ,
        company_name  =  #{companyName }

 where dept_id= #{deptId}
</update>

解决方法2
mybatis动态标签-choose标签
(1)没有else标签,怎么办?
可以使用choose标签,类似switch

update pe_dept set

    dept_name     =  #{deptName    }  ,
    <choose>
        <when test="parent.deptId  == null or parent.deptId == ''">
              parent_id   = NULL  ,
        </when>
        <otherwise>
            parent_id    = #{parent.deptId}  ,
        </otherwise>
    </choose>

    state         =  #{state       }  ,
    company_id    =  #{companyId   }  ,
    company_name  =  #{companyName }

    where dept_id= #{deptId}
</update>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页