该系列为imooc Java数据库开发与实战应用中MyBatis课程笔记,跟随课程加入自己见解,同时也为项目中碰到一些问题做了解答
本章节是mybatis中使用update配置及set动态语句操作,实现对用户的资料进行修改

映射配置:update片段
动态SQL配置:set配置
先梳理下之前开发的项目,在用户详情页可以查看用户的详细信息,所以对用户的资料进行修改的功能就放到用户详情页中

大纲

  • 一、在用户详情页实现用户数据修改的前端功能
  • 二、在mapper映射文件中增加update标签
  • 三、在UsersDAO中增加调用mapper映射文件的配置
  • 四、新建用于修改用户数据的Servlet

一、在用户详情页实现用户数据修改的前端功能

在detail.jsp中添加提交按钮,并设置表单的提交地址
使用隐藏域向处理用户数据修改的Servlet提供用户id

<%--Created by IntelliJ IDEA.User: 35208Date: 2021/4/7Time: 0:58To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head><title>慕课网用户管理中心</title><link rel="stylesheet" href="lib/bootstrap-3.3.7-dist/css/bootstrap.min.css"><script src="lib/2.2.4/jquery-1.12.4.min.js"></script><script src="lib/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container"><div class="row"><div class="page-header"><h1>慕课网管理后台<small>用户数据管理中心</small></h1></div></div><div class="row"><div class="jumbotron"><h1>MyBstis基础入门课程</h1><p>通过一个项目来完成基础部分学习</p><p><a class="btn btn-primary btn-lg" href="#" role="button">查看更多,请上慕课网</a></p></div></div><c:set var="user" value="${user}"></c:set><div class="row"><div class="col-md-8 col-md-offset-2"><form class="form-horizontal" action="${pageContext.request.contextPath}/updateusers"><input type="hidden" name="id" value="${user.id}"><%--使用隐藏域向UsersUpdateServlet提供用户id--%><div class="form-group"><label class="col-sm-2 control-label">用户账号</label><div class="col-sm-10">
<%--                        <p class="form-control-static">${user.username}</p>--%><p class="form-control-static">${user.name}</p></div></div><div class="form-group"><label class="col-sm-2 control-label">登录密码</label><div class="col-sm-10"><p class="form-control-static">******</p></div></div><div class="form-group"><label for="nickname" class="col-sm-2 control-label">昵称</label><div class="col-sm-10"><input type="text" class="form-control" id="nickname" value="${user.nickname}" name="nickname" placeholder="请输入昵称"></div></div><div class="form-group"><label for="age" class="col-sm-2 control-label">年龄</label><div class="col-sm-10"><input type="text" class="form-control" id="age" value="${user.age}" name="age" placeholder="请输入年龄"></div></div><div class="form-group"><label for="gender" class="col-sm-2 control-label">性别</label><div class="col-sm-10"><input type="text" class="form-control" id="gender" value="${user.gender}" name="gender" placeholder="请输入性别"></div></div><div class="form-group"><label for="phone" class="col-sm-2 control-label">联系方式</label><div class="col-sm-10"><input type="text" class="form-control" id="phone" value="${user.phone}" name="phone" placeholder="请输入联系方式"></div></div><div class="form-group"><label for="email" class="col-sm-2 control-label">邮箱</label><div class="col-sm-10"><input type="text" class="form-control" id="email" value="${user.email}" name="email" placeholder="请输入邮箱"></div></div><div class="form-group"><label class="col-sm-2 control-label">账号创建时间</label><div class="col-sm-10"><p class="form-control-static"><fmt:formatDate value="${user.createTime}" pattern="yyyy-MM-dd"></fmt:formatDate></p></div></div><div class="form-group"><label class="col-sm-2 control-label">最后修改时间</label><div class="col-sm-10"><p class="form-control-static"><fmt:formatDate value="${user.updateTime}" pattern="yyyy-MM-dd"></fmt:formatDate></p></div></div><div class="form-group"><label class="col-sm-2 control-label">最后登录时间</label><div class="col-sm-10"><p class="form-control-static"><fmt:formatDate value="${user.lastLogTime}" pattern="yyyy-MM-dd"></fmt:formatDate></p></div></div><div class="form-group"><label class="col-sm-2 control-label">用户状态</label><div class="col-sm-10"><c:if test="${user.userStatus == 0}"><td>正常</td></c:if><c:if test="${user.userStatus == 1}"><td>锁定</td></c:if><c:if test="${user.userStatus == 2}"><td>删除</td></c:if></div></div><div class="form-group"><label for="remark" class="col-sm-2 control-label">备注</label><div class="col-sm-10"><input type="text" class="form-control" id="remark" value="${user.remark}" name="remark" placeholder="请输入备注"></div></div><div class="form-group"><input type="submit" value="提交数据更新" class="btn btn-primary"></div></form></div></div>
</div>
</body>
</html>

二、在mapper映射文件中增加update标签

  1. 查看官方文档update标签使用动态sql语句的案例
<update id="updateAuthorIfNecessary">update Author<!--Author为表名-->       <set><if test="name != null">username=#{name},</if><!--test判断中的name为实体类中的属性名称,username为数据库字段名称--><!--当test中的name为空,就不把username=#{name}包含到update语句中--><if test="password != null">password=#{password},</if><if test="email != null">email=#{email},</if><if test="bio != null">bio=#{bio}</if></set>where id=#{id}
</update>
  1. 完善mapper
 <update id="updateUser">update users<!--users为表名--><set><if test="name != null">username=#{name},</if><!--test判断中的name为实体类中的属性名称,username为数据库字段名称--><!--当test中的name为空,就不把username=#{name}包含到update语句中--><if test="userpass != null">userpass=#{userpass},</if><if test="nickname != null">nickname=#{nickname},</if><if test="age != null">age=#{age},</if><if test="gender != null">gender=#{gender},</if><if test="phone != null">phone=#{phone},</if><if test="email != null">email=#{email},</if><if test="createTime != null">createTime=#{createTime},</if><if test="updateTime != null">updateTime=#{updateTime},</if><if test="lastLogTime != null">lastLogTime=#{lastLogTime},</if><if test="userStatus != null">userStatus=#{userStatus},</if><if test="remark != null">remark=#{remark},</if></set>where id=#{id}</update>

三、在UsersDAO中增加调用mapper映射文件的配置

    /*** 用于修改用户资料的方法* @return*/public Users updateUsers(Users user) {try {//返回值:是insert执行过程中影响的行数getSqlSession().update("updateUser",user);//将一个用户数据更新后添加到数据库,更新后,一定要提交数据sqlSession.commit();//进行数据提交,提交后我们才能在数据库查看到对应的数据} catch (Exception e) {e.printStackTrace();} finally {sqlSession.close();}return user;}

四、新建用于修改用户数据的Servlet

com.damu.servlet>新建UsersUpdateServlet

package com.damu.servlet;import com.damu.dao.UsersDAO;
import com.damu.entity.Users;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;@WebServlet("/updateusers")
public class UsersUpdateServlet extends HttpServlet {private UsersDAO usersDAO=new UsersDAO();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取用户要更新的数据(用户可更新数据为昵称、年龄、性别、联系方式、邮箱、备注)String id= req.getParameter("id");String nickname= req.getParameter("nickname");String age= req.getParameter("age");String gender= req.getParameter("gender");String email= req.getParameter("email");String phone= req.getParameter("phone");String remark= req.getParameter("remark");//创建用户对象,需要完善Users的构造方法Users user=new Users(Integer.parseInt(id),nickname,Integer.parseInt(age),gender,email,phone,new Date(),remark);//提交更新usersDAO.updateUsers(user);//查看更新后的用户数据resp.sendRedirect("/detail?id="+user.getId());}
}

可以看到添加数据操作成功

MyBatis第十一章:项目案例——update配置及set动态语句操作相关推荐

  1. [go学习笔记.第十一章.项目案例] 2.客户信息管理系统

    一.基本介绍 1.需求说明 项目需求分析 1.模拟实现基于文本界面的 < 客户信息管理软件 > 2.该软件实现对客户对象的插入.修改和删除(用切片实现),并能够打印客户明细表 2.界面设计 ...

  2. [go学习笔记.第十一章.项目案例] 1.家庭收支记账软件项目

    一.基本介绍 1.项目开发流程说明 2.项目需求说明 目标: 模拟实现一个基于文本界面的<<家庭记账软件>> 掌握初步的编程技巧和调试技巧 主要涉及以下知识点 : (1).局部 ...

  3. 【信息系统项目管理师】第九十十一章 项目成本质量资源管理

    第九十十一章 项目成本质量资源管理 第九章 项目成本管理 1.项目成本管理的过程有哪些 规划成本管理,成本估算,成本预算,成本控制. 成本管理计划是项目管理计划的组成部分,描述将如何规划,安排和控制项 ...

  4. 信息系统项目管理师---第十一章项目风险管理历年考题

    信息系统项目管理师-第十一章项目风险管理历年考题 1.2005 年 5 月第 47 题 :在项目风险管理的基本流程中,不包括下列中的(C ). A.风险分析 B.风险追踪 C.风险规避措施 D.风险管 ...

  5. 【信息系统项目管理师】第十一章 项目风险管理(考点汇总篇)

    [信息系统项目管理师]第十一章 项目风险管理(考点汇总篇) 考点分析与预测 风险管理一般上午考察三分,风险管理也比较重要,在案例分析中出现的问题也比较多,风险在下午案例分析中仅考过一次.靠案例的几率小 ...

  6. IT项目管理总结:第十一章 项目风险管理

    第十一章 项目风险管理 项目风险管理的重要性及过程 –风险相关性名词解释: A)风险(Risk):可能对项目目标产生负面或正面影响的不确定性 B)风险偏好(Risk Appetite):指实体为了获得 ...

  7. 第十一章项目沟通管理重点--转载

    <信息系统项目管理师教程>第十一章项目沟通管理重点 11.1项目沟通管理的重要性 1.编码.通信.传播媒介.噪声.解码.确认是接收到信号,但并不需要理解,而反馈信息指读懂信息,解码并回复. ...

  8. 高项_第十一章项目风险管理

    第十一章 项目风险管理 项目风险管理概述 (了解) 项目风险既包括对项目目标的威胁,也包括促进项目目标的机会. 风险的属性: ( 1 )风险的随机性:风险事件的发生及其后果都具有偶然性. ( 2 )风 ...

  9. [读书笔记]第十一章 项目风险管理(中)

    第十一章 项目风险管理(中) 1.什么是实施定性风险分析 通过评估单个项目的风险发生的概率和影响,对风险进行优先级排序.为后续分析和行动提供基础. 2.什么是实施定量风险分析 对已识别的单个风险和不确 ...

最新文章

  1. 官方教育网代理地址MSN
  2. linux查看进程相关命令
  3. CAS Server(三):配置MySQL数据库验证用户名密码
  4. Linux永久挂载新的硬盘
  5. 百度API_获取当前详细地址
  6. .NET加水印/验证码的NuGet包
  7. 10g数据库入门与实践 oracle_修改oracle数据文件大小 报错:ORA-03297
  8. 关于excel密码 工作表密码 工作簿密码 工程密码
  9. php 微信扫码给红包,关于现金红包的详细介绍
  10. Lotus Notes 中导航的键盘快捷方式
  11. (转)switch与ifelse的效率问题 .
  12. linux如何入侵电脑,如何入侵Linux系统 -电脑资料
  13. java numberformat 方法_java.text.NumberFormat使用方法
  14. [论文笔记]Outfit Compatibility Prediction and Diagnosis with Multi-Layered Comparison Network
  15. wordpress主题_20个美丽的Flat WordPress主题,为您的网站增光添彩
  16. 爬取拉钩Java招聘数据
  17. 【PyTorch系例】torch.Tensor详解和常用操作
  18. 硬盘引导服务器,Windows 7实战之为本机引导部署虚拟硬盘
  19. SQL基础系列(四)——多表查询
  20. 分享五年码农生涯历程经验及2018总结 | 掘金年度征文

热门文章

  1. ps切图与版心页面布局注意问题
  2. 最受 IT 公司欢迎的 30 款开源软件,你用过几个?
  3. linux var mqm权限,Linux MQ中间件/var/mqm文件系统结构与错误日志分析
  4. 使用sqoop迁移mysql数据到hive
  5. 2020 届,互联网校招的薪资情况如何?
  6. html5class命名规范,开发过程中应该遵守哪些编码规范和class命名规范?
  7. std::floor和std:ceil简述
  8. php正则表达式检查匹配数字英文中文及手机号
  9. git使用教程-一篇文章全搞定哦
  10. c语言程序设计 王芳主编,C语言程序设计