用户信息的修改

第1关:修改用户信息

任务描述

本关任务:实现修改用户信息功能。

相关知识

为了完成本关任务,你需要掌握:

  1. 什么是修改用户信息;
  2. 实现修改用户信息。
什么是修改用户信息

即对某一用户的信息的修改,如下图:

修改用户信息

即用户点击修改按钮时,该表单被提交至服务器。服务器将需要修改的信息于数据库中进行修改。

实现修改用户信息
  1. dao 层 sql 语句如下:
     
      
    1. update users
    2. <set>
    3. <if test="password!=null">
    4. password=#{password}
    5. </if>
    6. <if test="userPhoneNumber!=null">
    7. ,userPhoneNumber=#{userPhoneNumber}
    8. </if>
    9. <if test="email!=null">
    10. ,email=#{email}
    11. </if>
    12. </set>
    13. where userName=#{userName}
    以用户名为条件修改用户信息,因为修改的信息不固定,所以可以进行非空判断。
  2. service 层:
     
      
    1. //判断信息中是否有密码
    2. if (user.getPassword()!=null&&!user.getPassword().equals("")){
    3. //需要修改密码,先去数据库查找该用户加密的盐值
    4. System.out.println("salt:"+user.getUserName());
    5. String salt=userDao.getSalt(user.getUserName());
    6. System.out.println("salt:"+salt);
    7. //使用 已经封装好的加密加盐方法 MD5Util.formPassToDBPass() 得到加密加盐的密文
    8. String dbPass=MD5Util.formPassToDBPass(user.getPassword(),salt);
    9. //修改的密码使用密文
    10. user.setPassword(dbPass);
    11. }
    如果需要修改密码,则需要查询盐值给修改的密码加密加盐。
  3. 数据库如下:
    字段名称类型备注约束
    user_idint(11)权限id主键,自增
    userNamevarchar(20)用户名
    passwordvarchar(40)密码
    userPhoneNumberbigint(11)电话号码
    emailvarchar(20)邮箱
    genderchar(2)性别
    saltvarchar(20)加密盐值
    login_countint(11)登录次数
    register_timedatetime注册时间

编程要求

在 UserDao.xml、UserDao.java 、UserService.java、UserServiceImpl.java 、UserController.java 里 Begin-End 处补充代码,实现修改用户信息功能。

测试说明

平台会对你编写的代码进行测试:查询数据库中的数据,判断数据是否修改成功。 预期输入:

 
  1. {
  2. "userName":"admin",
  3. "password":"123123"
  4. }

预期输出: 修改成功


开始你的任务吧,祝你成功!

UserDao.java

package com.www.dao;
import com.www.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
@Repository
public interface UserDao {
    /**
     * 根据用户名修改表中的用户数据,修改密码和电话号码
     */
    
    void updateUser(User user);
    /**
     * 根据用户名获取盐值
     * @param userName
     * @return
     */
    
    @Select("select salt from users where userName=#{userName}")
    String getSalt(String userName);
    
    /*
    根据用户名查询用户信息
     */
    @Select("select * from users where username=#{userName}")
    User findByUserName(String userName);
}

UserService.java

package com.www.service;

import com.www.entity.User;
import org.springframework.stereotype.Component;

/**
 * service
 */
@Component
public interface UserService {
    //定义 修改用户信息接口
    /******************************Begin******************************/
    void updateUser(User user);
    /******************************End******************************/
}

UserServiceImpl.java

package com.www.service.impl;

import com.www.dao.UserDao;
import com.www.entity.User;
import com.www.service.UserService;
import com.www.utils.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * serviceimpl
 */
@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    //调用 dao 层方法修改用户信息
    /******************************Begin******************************/
    @Override
    public void updateUser(User user) {
    //判断信息中是否有密码  
        if (user.getPassword()!=null&&!user.getPassword().equals("")){  
        //需要修改密码,先去数据库查找该用户加密的盐值  
        System.out.println("salt:"+user.getUserName());  
        String salt=userDao.getSalt(user.getUserName());  
        System.out.println("salt:"+salt);  
        //使用 已经封装好的加密加盐方法 MD5Util.formPassToDBPass() 得到加密加盐的密文  
        String dbPass=MD5Util.formPassToDBPass(user.getPassword(),salt);  
        //修改的密码使用密文  
        user.setPassword(dbPass);
        }
        //调用 dao 层的修改方法修改用户信息
        userDao.updateUser(user);
    }
    /******************************End******************************/
}

UserController.java

package com.www.controller;

    import com.www.entity.User;
    import com.www.service.UserService;
    import lombok.extern.slf4j.Slf4j;
    ;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;

    import java.util.HashMap;
    import java.util.Map;


    @Slf4j
    @RestController
    @RequestMapping(value = "/user")
    public class UserController {

        @Autowired
        UserService userService;
        @Autowired
        User user;


        /**
        * 修改用户
        * @param user
        * @return
        */
        @RequestMapping(value = "/updateUser")
        public void updateUser(@RequestBody User user){
            //调用 service 层方法修改用户信息
            /******************************Begin******************************/
            userService.updateUser(user);
            /******************************End******************************/
        }
    }

User.java

package com.www.entity;

import lombok.Data;
import org.springframework.stereotype.Component;

import java.io.Serializable;

/**
 * @author liuxianchun
 * @date 2021/1/17
 * 鐢ㄦ埛
 */
@Data
@Component
public class User implements Serializable {

    private int user_id;
    private String userName;
    private String password;
    private String userPhoneNumber;
    private String email;
    private String gender;

}

UserDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.www.dao.UserDao">
    <!--写好修改用户信息 sql 语句,修改的字段 password用户密码, userPhoneNumber用户电话 ,email邮箱地址 需要进行非空判断-->
  
    <update id="updateUser" parameterType="user">
        update users
        <set>
            <if test="password!=null">
                password=#{password}
            </if>
            <if test="userPhoneNumber!=null">
                ,userPhoneNumber=#{userPhoneNumber}
            </if>
            <if test="email!=null">
                ,email=#{email}
            </if>
        </set>
        where userName=#{userName}
    </update>
</mapper>

加油哦,同学们!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值