开发学生注册功能
注册准备
上次课,我们已经分析了注册的业务流程
下面在执行业务之前,需要将准备工作完成
第一步是将注册相关的资源或路径进行放行设置,不需要登录就能进行注册
SecurityConfig类添加放行路径
.antMatchers(// 指定路径
"/index_student.html",
"/css/*",
"/js/*",
"/img/**",
"/bower_components/**",
"/login.html",
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
"/register.html", // 放行注册页
"/register" // 放行注册控制器路径
)
第二步:
为了接收表单填写的数据,我们创建一个专用于接收注册表单信息的类
创建vo包
包中创建RegisterVO类
代码如下
@Data
public class RegisterVO implements Serializable {
private String inviteCode; // 邀请码
private String phone; // 手机号/用户名
private String nickname; // 昵称
private String password; // 密码
private String confirm; // 确认密码
}
第三步
我们在执行注册业务时有很多判断
例如判断邀请码是否正确,判断手机号是否已经被注册
如果判断不符合注册要求,要提示错误原因
而这种错误提示,在实际开发过程中,一般会以自定义异常的方式来控制\抛出异常
在发生业务中不能继续注册的情况时,使用异常的方式将注册失败的信号通知程序
我们要自己编写自定义异常的类,并为它创建一个专门的包
创建exception包
包中创建自定义异常类(业务异常)ServiceException类
代码可以直接赋值给大家的资料
public class ServiceException extends RuntimeException{
private int code = 500;
public ServiceException() {
}
public ServiceException(String message) {
super(message);
}
public ServiceException(String message, Throwable cause) {
super(message, cause);
}
public ServiceException(Throwable cause) {
super(cause);
}
public ServiceException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public ServiceException(int code) {
this.code = code;
}
public ServiceException(String message, int code) {
super(message);
this.code = code;
}
public ServiceException(String message, Throwable cause,
int code) {
super(message, cause);
this.code = code;
}
public ServiceException(Throwable cause, int code) {
super(cause);
this.code = code;
}
public ServiceException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace, int code) {
super(message, cause, enableSuppression, writableStackTrace);
this.code = code;
}
public int getCode() {
return code;
}
}
第四步:
使用QueryWrapper实现查询功能
MybatisPlus框架提供的一个查询方式
它能够在不编写sql语句的前提下,按照设置的条件进行查询
下面在测试类中进行演示
// 根据邀请码查询班级信息
// SELECT * FROM classroom
// WHERE invite_code='JSD2001-706246'
@Autowired
ClassroomMapper classroomMapper;
@Test
public void query(){
// 我们先实例化一个QueryWrapper对象
// 这个对象指定一个泛型,这个泛型就确定了查询的表和返回值类型
QueryWrapper<Classroom> query=new QueryWrapper<>();
// QueryWrapper对象实际上就是一个查询条件对象
// 我们可以在这个对象中设置查询条件