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就代表插入成功,反之不成功,所以我们可以通过返回值判断插入是否成功。