锋迷商城-用户管理

发布时间 2023-08-22 17:17:20作者: 林林2127

1. 实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "User对象",description = "用户信息")
public class User {
    @ApiModelProperty(value = "用户Id",dataType = "int")
    private Integer userId;
    @ApiModelProperty(value = "用户名",dataType = "String")
    private String username;
    @ApiModelProperty(value = "密码",dataType = "String")
    private String password;
    @ApiModelProperty(value = "用户昵称",dataType = "String")
    private String nickname;
    @ApiModelProperty(value = "用户真实姓名",dataType = "String")
    private String realname;
    @ApiModelProperty(value = "用户头像",dataType = "String")
    private String userImg;
    @ApiModelProperty(value = "手机号",dataType = "String")
    private String userMobile;
    @ApiModelProperty(value = "邮箱",dataType = "String")
    private String userEmail;
    @ApiModelProperty(value = "用户性别",dataType = "String")
    private String userSex;
    @ApiModelProperty(value = "用户生日",dataType = "Date")
    private Date userBirth;
    @ApiModelProperty(value = "注册时间",dataType = "Date")
    private Date userRegtime;
    @ApiModelProperty(value = "更新时间",dataType = "Date")
    private Date userModtime;

}

2. 统一返回类

public class ResultVO<T> {

    /**
     * 响应状态码,成功:200;失败:500
     */
    private Integer code;

    /**
     * 响应消息
     */
    private String msg;

    /**
     * 附加数据
     */
    private T data;
    /**
     * 失败:状态码500,自定义错误消息
     *
     * @param msg
     * @return
     */
    public static ResultVO error(String msg) {
        return new ResultVO<>(500, msg);
    }

    /**
     * 失败:状态码500,自定义错误消息、附加数据
     *
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultVO error(String msg, T data) {
        return new ResultVO<>(500, msg, data);
    }

    /**
     * 失败:自定义状态码、错误消息
     *
     * @param msg
     * @return
     */
    public static ResultVO error(Integer code, String msg) {
        return new ResultVO<>(code, msg);
    }

    /**
     * 失败:自定义状态码、错误消息、附加数据
     *
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultVO error(Integer code, String msg, T data) {
        return new ResultVO<>(code, msg, data);
    }


    /**
     * 成功:状态码200,自定义成功消息
     *
     * @param msg
     * @return
     */
    public static ResultVO success(String msg) {
        return new ResultVO<>(200, msg);
    }

    /**
     * 成功:状态码200,自定义成功消息、附加数据
     *
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultVO success(String msg, T data) {
        return new ResultVO<>(200, msg, data);
    }

    /**
     * 成功:自定义状态码、成功消息
     *
     * @param msg
     * @return
     */
    public static ResultVO success(Integer code, String msg) {
        return new ResultVO<>(code, msg);
    }

    /**
     * 成功:自定义状态码、成功消息、附加数据
     *
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultVO success(Integer code, String msg, T data) {
        return new ResultVO<>(code, msg, data);
    }


    private ResultVO() {
    }

    private ResultVO(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    private ResultVO(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "ResultVO{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

3. DAO接口层

@Repository
public interface UserDao {
    //用户注册
    public int insertUser(User user);
    //根据用户名查询用户信息
    public User queryUserByName(String name);
}

4.Mapper.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.linlin.fmmall.dao.UserDao">

    <resultMap id="userMap" type="com.linlin.fmmall.entity.User">
        <id column="user_id" property="userId"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="nickname" property="nickname"/>
        <result column="realname" property="realname"/>
        <result column="user_img" property="userImg"/>
        <result column="user_mobile" property="userMobile"/>
        <result column="user_email" property="userEmail"/>
        <result column="user_sex" property="userSex"/>
        <result column="user_birth" property="userBirth"/>
        <result column="user_regtime" property="userRegtime"/>
        <result column="user_modtime" property="userModtime"/>
    </resultMap>

    <insert id="insertUser" useGeneratedKeys="true" keyProperty="userId">
        insert into users(username,password,user_regtime,user_modtime,user_img)
        values (#{username},#{password},#{userRegtime},#{userModtime},#{userImg})
    </insert>

    <select id="queryUserByName" resultMap="userMap">
        select
            user_id,
            username,
            password,
            nickname,
            realname,
            user_img,
            user_mobile,
            user_email,
            user_sex,
            user_birth,
            user_regtime,
            user_modtime
        from users
        where username = #{name}
    </select>

</mapper>

5.service层

public interface UserService {
    //用户注册
    public ResultVO userRegist(String username,String password);
    //用户登录
    public ResultVO checkLogin(String username,String password);
}

6.Service实现类

@Service
@Scope("singleton")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Transactional
    public ResultVO userRegist(String username, String password) {
        synchronized (this) {

            //查询用户是否已存在
            User user = userDao.queryUserByName(username);

            if (user == null) {
                user = new User();
                user.setUsername(username);
                user.setPassword(password);
                user.setUserImg("img/default.png");
                user.setUserRegtime(new Date());
                user.setUserModtime(new Date());
                int i = userDao.insertUser(user);
                if (i > 0) {
                    return ResultVO.success("注册成功!");
                } else {
                    return ResultVO.error("注册失败!");
                }
            } else {
                return ResultVO.error("该用户名已经被注册!");
            }
        }

    }

    @Override
    public ResultVO checkLogin(String username, String password) {
        User user = userDao.queryUserByName(username);
        if (user == null){
            return ResultVO.error("登录失败,用户名不存在!");
        }else{
            if (password.equals(user.getPassword())){
                user.setPassword(null);
                return ResultVO.success("登录成功!",user);
            }else{
                return ResultVO.error("登录失败,密码错误!");
            }
        }
    }
}

7.Api接口层

@RestController
@RequestMapping("/user")
@Api(value = "提供用户添加、修改、删除及查询等相关接⼝",tags = "01.用户管理")
public class UserApi {
    @Resource
    private UserService userService;

    @ApiOperation("用户登录接口")
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "String", name = "username", value = "登录用户账号", required = true),
            @ApiImplicitParam(dataType = "String", name = "password", value = "登录用户密码", required = true)
    })
    @GetMapping("/login")
    public ResultVO login(String username, String password){
        return userService.checkLogin(username,password);
    }

    @ApiOperation("用户注册接口")
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "String", name = "username", value = "用户注册账号", required = true),
            @ApiImplicitParam(dataType = "String", name = "password", value = "用户注册密码", required = true)
    })
    @PostMapping("/regist")
    public ResultVO regist(String username, String password){
        return userService.userRegist(username,password);
    }
}