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

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

  改进方案:

  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

转载于:https://www.cnblogs.com/WJQ2017/p/8358438.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值