1.Controler层-服务:业务逻辑实现
public User addUser(User user) {
String passwordHash = passwordToHash(user.getPassword());
user.setPassword(passwordHash);
userMapper.add(user);
return findByUserId(user.getId());
}
public User updatePassword(User user) {
userMapper.updatePassword(user);
return user;
}
public List<User> allUser() {
List<User> userList = userMapper.findAll();
return userList;
}
public int deleteUser(User user) {
int result = userMapper.deleteUser(user);
return result;
}
public String passwordToHash(String password) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(password.getBytes());
byte[] src = digest.digest();
StringBuilder stringBuilder = new StringBuilder();
for (byte aSrc : src) {
String s = Integer.toHexString(aSrc & 0xFF);
if (s.length() < 2) {
stringBuilder.append('0');
}
stringBuilder.append(s);
}
return stringBuilder.toString();
} catch (NoSuchAlgorithmException ignore) {
}
return null;
}
public User findByUserId(int id) {
User user = new User();
user.setId(id);
return userMapper.findOne(user);
}
public User findByUserName(String name) {
User param = new User();
param.setName(name);
return userMapper.findOne(param);
}
public boolean comparePassword(User user, User userInDataBase) {
return passwordToHash(user.getPassword())
.equals(userInDataBase.getPassword());
}
2.表现层-接口:对外API接口
@RequestMapping("/api/addUser")
@PostMapping("")
public Object add(@RequestBody User user) {
JSONObject jsonObject = new JSONObject();
if (userService.findByUserName(user.getName()) != null) {
jsonObject.put("error","用户名重复");
return jsonObject;
}else {
userService.addUser(user);
String token = userService.getToken(user);
jsonObject.put("token", token);
jsonObject.put("result",0);
return jsonObject;
}
}
@RequestMapping("/api/authenticationUser")
@PostMapping("")
public Object login(@RequestBody User user) {
User userInDataBase = userService.findByUserName(user.getName());
JSONObject jsonObject = new JSONObject();
if (userInDataBase == null) {
jsonObject.put("message", "用户不存在");
} else if (!userService.comparePassword(user, userInDataBase)) {
jsonObject.put("message", "密码不正确");
} else {
String token = userService.getToken(userInDataBase);
jsonObject.put("token", token);
jsonObject.put("result",0);
}
return jsonObject;
}
@RequestMapping("/api/updateUser")
@PostMapping("")
public Object updateUser(@RequestBody User user) {
User userInDataBase = userService.findByUserName(user.getName());
JSONObject jsonObject = new JSONObject();
if (userInDataBase == null) {
jsonObject.put("message", "用户不存在");
} else if (!userService.comparePassword(user, userInDataBase)) {
jsonObject.put("message", "密码不正确");
} else if (user.getPassword().equals(user.getNewPassword())) {
jsonObject.put("message", "新旧密码不允许相同");
}else {
String passwordHash = userService.passwordToHash(user.getNewPassword());
user.setPassword(passwordHash);
user.setId(userInDataBase.getId());
userService.updatePassword(user);
User updateUserInDataBase = userService.findByUserName(userInDataBase.getName());
String token = userService.getToken(updateUserInDataBase);
jsonObject.put("token", token);
jsonObject.put("result",0);
}
return jsonObject;
}
@RequestMapping("/api/allUser")
@GetMapping("")
public Object allUser() {
List<User> userInDataBase = userService.allUser();
JSONObject jsonObject = new JSONObject();
jsonObject.put("user", userInDataBase);
jsonObject.put("result",0);
return jsonObject;
}
@RequestMapping("/api/deleteUser")
@PostMapping("")
public Object deleteUser(@RequestBody User user) {
JSONObject jsonObject = new JSONObject();
User userInDataBase = userService.findByUserName(user.getName());
user.setId(userInDataBase.getId());
int result = userService.deleteUser(user);
if (result == 1){
jsonObject.put("message", "删除成功");
jsonObject.put("result",0);
}else {
jsonObject.put("message", "删除异常");
jsonObject.put("result",result);
}
return jsonObject;
}
@GetMapping("{id}")
public Object findById(@PathVariable int id) {
return userService.findByUserId(id);
}
3.Model层-实体类:映射数据库中字段
public class User {
private Integer id;
private String name;
private String password;
private String newPassword;
// 下面是 getter 和 setter 方法。。。
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {return name; }
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNewPassword() {
return newPassword;
}
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
}
4.Model层-数据库:mybatis数据层
//mapper层:操作数据库
public interface UserMapper {
//用户注册
int add(User user);
//查找用户是否已存在
User findOne(User user);
//更新用户密码
void updatePassword(User user);
//查询所有用户信息
List<User> findAll();
//删除用户
int deleteUser(User user);
}
<insert id="add" useGeneratedKeys="true" keyProperty="id">
insert into user(name, password) values (#{name},#{password})
</insert>
<select id="findOne" resultType="User">
select * from user
<where>
<!-- 重复说一下,id 不能是 int,int 默认是 0,不可能是 null, 而 Integer 可以是 null-->
<if test="id!=null">
id=#{id}
</if>
<if test="name!=null">
name=#{name}
</if>
</where>
</select>
<update id="updatePassword" parameterType="com.hpm.blog.model.User">
UPDATE user
<trim prefix="set" suffixOverrides=",">
<if test="password!=null">password=#{password},</if>
</trim>
WHERE id=#{id}
</update>
<select id="findAll" resultType="User">
select * from user
</select>
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
5.接口调用测试
注册
登录
改密
删除