• 项目实践总结 修改个人资料时避免不必要的修改


      可以修改个人资料中的昵称、性别和年龄,但是用户可能只修改其中一部分。

      改进方案:

      1 减少传输的数据量

      如果没有修改昵称,那么向后台发送空字符串(有效昵称长度大于0)。之所以不是null,是因为传输null时自动转json的jar包会把它转成空字符串。如果没有修改性别,那么向后台发送0(1表示男,2表示女,3表示保密)。如果没有修改年龄,那么向后台发送0(有效年龄为1-120)。也就是说,用户只修改部分个人资料时,可以减少前端向后端传输的数据量。

      自动转json的jar包见下图:

      

      

      2 不执行update语句

      查询个人资料后,如果用户修改个人资料的部分与当前个人资料相同,则不需要修改即不执行update语句。

      修改个人资料的Java代码如下:

     1 // 修改个人资料
     2 @Override
     3 public ResponseResult modifyPersonalData(String nickname, int sex, int age, int userId) {
     4     ResponseResult responseResult = new ResponseResult("修改失败");
     5     
     6     // true表示该查询用于修改个人资料
     7     User user = userMapper.selectPersonalData(userId, true);
     8     boolean needModify = false;
     9     if (nickname != "" && !nickname.equals(user.getNickname())) {
    10         needModify = true;
    11     } else {
    12         nickname = null;
    13     }
    14     
    15     if (sex != 0) {
    16         if (sex != user.getSex()) {
    17             needModify = true;
    18         } else {
    19             sex = 0;
    20         }
    21     }
    22     if (age != 0) {
    23         if (age != user.getAge()) {
    24             needModify = true;
    25         } else {
    26             age = 0;
    27         }
    28     }
    29     
    30     if (!needModify || userMapper.updatePersonalData(nickname, sex, age, userId) == 1) {
    31         responseResult.setStateAndMsg("修改成功");
    32     }
    33 
    34     return responseResult;
    35 }

      2 缩短SQL语句

      如果用户只修改部分个人资料,那么数据库执行的SQL语句可以缩短。

      MyBatis中xml文件关键代码:

     1 <!-- 修改个人资料 -->
     2 <update id="updatePersonalData">
     3     update user
     4        <set>
     5          <if test="nickname != ''">nickname = #{nickname},</if>
     6          <if test="sex != 0">sex = #{sex},</if>
     7          <if test="age != 0">age = #{age}</if>
     8        </set>
     9     where user_id = #{userId}
    10     limit 1
    11 </update>

       使用条件语句之后有可能会在生成的赋值语句的后面留下逗号,而set元素会动态前置SET关键字,消除无关的逗号。等价的自定义trim元素如下:

    <trim prefix="SET" suffixOverrides=",">
      ...
    </trim>

     

      参考资料

      动态 SQL

  • 相关阅读:
    Python (一)Tkinter窗口组件:Label
    Python (八)Tkinter窗口组件:Scrollbar
    Python (四)Tkinter窗口组件:Radiobutton
    Python (五)Tkinter窗口组件:LabelFrame
    Python (三)Tkinter窗口组件:Checkbutton
    Scrapy安装及相关知识点概括
    Python (九)Tkinter窗口组件:Scale
    Python (六)Tkinter窗口组件:Entry
    电脑通过蓝牙适配器连接手机与蓝牙耳机之经验
    Noi2018 归途
  • 原文地址:https://www.cnblogs.com/WJQ2017/p/8358438.html
Copyright © 2020-2023  润新知