03 动力云客项目之登录功能后端实现

1 准备工作

1.1 创建项目

使用Spring initializr初始化项目
03 动力云客项目之登录功能后端实现_第1张图片老师讲的是3.2.0, 但小版本之间问题应该不大.

1.2 项目结构

根据阿里巴巴Java开发手册确定项目结构
03 动力云客项目之登录功能后端实现_第2张图片
03 动力云客项目之登录功能后端实现_第3张图片

1.3 分层领域模型

【参考】分层领域模型规约:

• DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
• DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
• BO(Business Object):业务对象,可以由 Service 层输出的封装业务逻辑的对象。
• Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。
• VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。

我们只使用其中的三个,但在大型项目, DTO几乎是必须的:
1、DO(等价于我们的model)
2、Query (controller --> service -->manager --> dao 上一层往下一层传参数)
3、VO(等价于我们的result中的R对象)

即从dao一直到controller返回DAO, controller到前端返回R

1.4 创建R处理结果集

03 动力云客项目之登录功能后端实现_第4张图片

package com.sunsplanter.result;

import lombok.*;

@Getter
@RequiredArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
public enum CodeEnum {

    OK(200, "成功"),

    FAIL(500, "失败"),

    TOKEN_IS_EMPTY(901, "请求Token参数为空"),

    TOKEN_IS_ERROR(902, "请求Token有误"),

    TOKEN_IS_EXPIRED(903, "请求Token已过期"),

    TOKEN_IS_NONE_MATCH(904, "请求Token不匹配"),

    USER_LOGOUT(200, "退出成功"),

    DATA_ACCESS_EXCEPTION(500,"数据库操作失败"),

    ACCESS_DENIED(500, "权限不足")

    ;

    //结果码
    private int code;

    //结果信息
    @NonNull
    private String msg;

}
package com.sunsplanter.result;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一封装web层向前端页面返回的结果
 *
 */
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class R {

    //表示返回的结果码,比如200成功,500失败
    private int code;

    //表示返回的结果信息,比如 用户登录状态失效了,请求参数格式有误.......
    private String msg;

    //表示返回的结果数据,数据可能是一个对象,也可以是一个List集合.....
    private Object data;

    public static R OK() {
        return R.builder()
                .code(CodeEnum.OK.getCode())
                .msg(CodeEnum.OK.getMsg())
                .build();
    }

    public static R OK(int code, String msg) {
        return R.builder()
                .code(code)
                .msg(msg)
                .build();
    }

    public static R OK(Object data) {
        return R.builder()
                .code(CodeEnum.OK.getCode())
                .msg(CodeEnum.OK.getMsg())
                .data(data)
                .build();
    }

    public static R OK(CodeEnum codeEnum) {
        return R.builder()
                .code(CodeEnum.OK.getCode())
                .msg(codeEnum.getMsg())
                .build();
    }

    public static R FAIL() {
        return R.builder()
                .code(CodeEnum.FAIL.getCode())
                .msg(CodeEnum.FAIL.getMsg())
                .build();
    }

    public static R FAIL(String msg) {
        return R.builder()
                .code(CodeEnum.FAIL.getCode())
                .msg(msg)
                .build();
    }

    public static R FAIL(CodeEnum codeEnum) {
        return R.builder()
                .code(codeEnum.getCode())
                .msg(codeEnum.getMsg())
                .build();
    }
}

2 后端代码

2.1 登录代码实现

你可能感兴趣的:(动力云客项目,java)