0
点赞
收藏
分享

微信扫一扫

Day34项目saas-export项目-部门管理-更新***


学习目标

  • (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 id="update" parameterType="dept">
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 id="update" parameterType="dept">
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>


举报

相关推荐

0 条评论