慕课网地址:https://www.imooc.com/learn/1079
参考资料:https://www.cnblogs.com/victorbu/tag/Spring%20Boot/default.html?page=2
项目具体搭建,可以具体看慕课网地址或者最上面的参考资料。
用户模块搭建
视频3-1
在这里,主要讲了重新写一些实体类。因为与数据库打交道的是2个实体类。我们需要封装成一个类(UserModel)。但因为封装后会返回一些不该返回的信息,比如用户密码,所以重新再定义了一个VO类,用于controller层进行传递。其实这两个类是差不多
的,只是信息减少了。另外,由于使用了mybatis-generator工具自动生成代码,只能根据主键查询,所以需要增加新的方法。
在 UserPasswordDOMapper 中添加方法:UserPasswordDO selectByUserId(Integer userId);
同时在UserPasswordDOMapper.xml添加下列句子:
<select id="selectByUserId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_password
where user_id = #{userId,jdbcType=INTEGER}
</select>
UserModel类如下:【我用了Lombok插件。】
@Getter
@Setter
public class UserModel {
private Integer id;
private String name;
private Byte gender;
private Integer age;
private String telphone;
private String registerMode;
private String thirdPartyId;
private String encrptPassword;
}
UserVO类
@Getter
@Setter
public class UserVO {
private Integer id;
private String name;
private Byte gender;
private Integer age;
private String telphone;
}
视频3-2
在这一节的视频,主要讲解了定义一个通用的返回对象。这是前后端分离的做法吧。
CommonReturnType 类如下:
@Getter
@Setter
public class CommonReturnType {
//表明返回处理是success还是fail
private String status;
//若成功。返回需要的数据
//若错误 返回通用错误码格式
private Object data;
//通用创建方法
public static CommonReturnType create(Object result){
return CommonReturnType.create(result,"success");
}
public static CommonReturnType create(Object result,String status){
CommonReturnType type = new CommonReturnType();
type.setStatus(status);
type.setData(result);
return type;
}
}
视频3-3
在这一讲,主要讲了统一异常处理。返回统一的错误结果。因为当发生错误时,我们希望返回一个统一的界面,而不是用官方的界面。
在这里,我们先定义一个接口:CommonError
public interface CommonError {
public int getErrorCode();
public String getErrMsg();
public CommonError setErrMsg(String errMsg);
}
再定义一个枚举类EmBusinessError
在这里。定义了一些基本的错误,还有错误信息。
public enum EmBusinessError implements CommonError {
//通用错误类型00001
PARAMETER_VALIDATION_ERROR(00001,"参数不合法"),
//10000开头为用户信息相关错误定义
USER_NOT_EXIST(10001,"用户不存在")
;
private int errCode;
private String errMsg;
private EmBusinessError(int errorCode, String errMsg){
this.errCode = errorCode;
this.errMsg = errMsg;
}
@Override
public int getErrorCode() {
return this.errCode;
}
@Override
public String getErrMsg() {
return this.errMsg;
}
@Override
public CommonError setErrMsg(String errMsg) {
this.errMsg = errMsg;
return this;
}
}
然后定义异常
public class BusinessException extends Exception implements CommonError {
private CommonError commonError;
//直接接受EmBusinessError的传参 用于构造业务异常
public BusinessException(CommonError commonError) {
super();
this.commonError = commonError;
}
public BusinessException(CommonError commonError, String errMsg) {
super();
this.commonError = commonError;
this.commonError.setErrMsg(errMsg);
}
@Override
public int getErrorCode() {
return this.commonError.getErrorCode();
}
@Override
public String getErrMsg() {
return this.commonError.getErrMsg();
}
@Override
public CommonError setErrMsg(String errMsg) {
this.commonError.setErrMsg(errMsg);
return this;
}
}
总结
在这之前,我做项目一般只会定义一些实体类(直接与数据库匹配),并不会生成这么多的实体类,也不会考虑前端展示而删除一些数据。但是视频中有DO,VO,还有model,根据不同情况用不同的类。另外,我也很少用到统一异常处理,因此在这个视频还是学到挺多东西的。摘抄一下参考资料的东西。
- data object: 与数据库完全映射,不包含任何逻辑
- model: 业务交互逻辑模型
- view object: 前端展示数据