第1关:修改用户信息
任务描述
本关任务:实现修改用户信息功能。
相关知识
为了完成本关任务,你需要掌握:
- 什么是修改用户信息;
- 实现修改用户信息。
什么是修改用户信息
即对某一用户的信息的修改,如下图:
即用户点击修改按钮时,该表单被提交至服务器。服务器将需要修改的信息于数据库中进行修改。
实现修改用户信息
- dao 层 sql 语句如下:
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}
- service 层:
//判断信息中是否有密码
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);
}
- 数据库如下:
字段名称 类型 备注 约束 user_id int(11) 权限id 主键,自增 userName varchar(20) 用户名 无 password varchar(40) 密码 无 userPhoneNumber bigint(11) 电话号码 无 email varchar(20) 邮箱 无 gender char(2) 性别 无 salt varchar(20) 加密盐值 无 login_count int(11) 登录次数 无 register_time datetime 注册时间 无
编程要求
在 UserDao.xml、UserDao.java 、UserService.java、UserServiceImpl.java 、UserController.java 里 Begin-End 处补充代码,实现修改用户信息功能。
测试说明
平台会对你编写的代码进行测试:查询数据库中的数据,判断数据是否修改成功。 预期输入:
{
"userName":"admin",
"password":"123123"
}
预期输出: 修改成功
开始你的任务吧,祝你成功!
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>
加油哦,同学们!