Springboot基本结构——注册 业务层

在这一层我们需要规划一些东西,其一就是异常:

例如用户在注册时可能出现用户名重名等异常。总之,任何用户操作时出现的异常都要考虑进来,我们可以自己考虑写异常处理方法。

异常可能发生在业务层,也可能发生在控制层。对于在业务层产生的异常,我们先可以定义一个基类,一个处理异常的基类,然后让其他具体的异常处理类去继承这个基类就行。

动手开干!既然写业务层代码就要有业务层的包,写一个service包就行了,具体如下:

service层是业务层,下面又分了两个包,一个是异常的包,另一个是implementation的包。在这里面我们要定义异常处理的基类,也要定义一个接口,方便他人实现。

在ServiceException类是这么写的:

多搞几个构造方法就是了。根据具体的情况来,例如有人只需要异常的具体信息,有人又需要其他什么信息啥的。

然后我们搞几个具体可能出现的异常,都来继承这个ServiceException类就可以了:

例如InsertException:

 1 public InsertException() {
 2         super();
 3     }
 4 
 5     public InsertException(String message) {
 6         super(message);
 7     }
 8 
 9     public InsertException(String message, Throwable cause) {
10         super(message, cause);
11     }
12 
13     public InsertException(Throwable cause) {
14         super(cause);
15     }
16 
17     protected InsertException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
18         super(message, cause, enableSuppression, writableStackTrace);
19     }

还有另外一个用户名重复的:

 1 public UsernameDuplicatedException() {
 2         super();
 3     }
 4 
 5     public UsernameDuplicatedException(String message) {
 6         super(message);
 7     }
 8 
 9     public UsernameDuplicatedException(String message, Throwable cause) {
10         super(message, cause);
11     }
12 
13     public UsernameDuplicatedException(Throwable cause) {
14         super(cause);
15     }
16 
17     protected UsernameDuplicatedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
18         super(message, cause, enableSuppression, writableStackTrace);
19     }

 

 

接下来设计接口:

注意接口是直接定义在service包下的,不属于implementation包!

在这个接口里面定义一个用户注册的方法,业务层嘛,肯定要有业务啊。

这里定义了一个register方法,在业务层不需要返回值。

但如何确定其参数列表?这depends on我们底层需要什么样的数据,所谓底层,直接去mapper层看就好了:

所以我们选择user对象作为参数列表就行了。

接下来在implementation包下创建一个类实现刚才写的这个接口:

首先直接生成register方法,IDEA有这个功能,就不必多说了。

然后需要干嘛?我们要实现注册功能,肯定要调用底层,也就是mapper层的方法吧?因为你注册肯定是用户注册啊!注册本质上就对应着数据库的增删改查,而增删改查的功能我们就已经写在了mapper层里面了,所以我们自然要在这个类里面创建一个mapper层的user对象:

@Autowired就是自动装配的注解,不必多说。

第一我们要编写我们的register方法。参数列表有啥呢?自然是要传进来一个User对象。

第一步是什么呢?我们要先判断用户注册的这个用户名有没有被占用,即这个用户名是否被注册过。

那自然就是:

诶,这个传递进来的参数是什么呢?我们现在是不是暂时一无所有?username哪来的?那肯定是调用了什么方法来的。

也就是user的getUsername方法:

接下来,我们就先做一下异常处理,看看这个result是不是空。这个方法返回的是一个User对象,所以肯定可以这么用。

这么操作完,还没完,还有一个异常需要考虑。

基本上上面的代码写完以后就可以执行insert方法了,这个insert也会产生异常,也就是插入不成功。这时候我们也要处理:

这个insert方法有返回值,返回一个1就代表插入成功,反之不成功,所以我们可以通过返回值判断插入是否成功。

接下来做数据的补全操作:

对于邮箱号这样的数据,完全可以用户注册完并登录上去以后再自行填写,而且这样的数据也不是必要的,所以这里可以暂时不管。

但是创建时间、修改时间、密码这样的数据就不一样了,它们必须在此时就被处理好。

密码部分是采用了加密措施,这个有没有其实没太大关系。

最后还有一点,就是这个要交给Springboot来管理,所以要在前面添加@Service注解来描述:

这个注解的作用是将当前类的对象交给Springboot管理,并且自动创建对象&对象的维护 

posted @ 2022-09-04 21:06  EvanTheBoy  阅读(61)  评论(0编辑  收藏  举报