一、应用SpringBoot完成基础项目搭建
2-3 Mybatis接入SpringBoot项目
2-4 Mybatis自动生成器使用方式
在使用Maven自动生成接口UserDOMapper和UserPasswordDoMapper后,需要在接口文件上加上@Mapper注解,让DemoMapper能够让别的类进行引用。
使用@Mapper注解的缺点:
·直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦。
改进方法:使用@MapperScan注解
此时发现,下面还是显示UserDOMapper未找到。我们还要需要在UserDOMapper上加上注解@Repository,然后就能够正常运行了,与单独加上@Mapper注解的效果一样。
对比:@Mapper注解单独使用就可以把它交给spring管理了,并且别的类可以直接引用。
@Repository也可以把它交给sprin管理,但是在获取该容器中的对象时,需要用@MapperScan扫描到此文件,或者该文件所在的package。
3-1 使用SpringMVC方式开发用户信息
- 首先在userservice的实例中UserServiceImpl中:
1) 通过userDOMapper获得userDO对象(by 传入的id)
2) 通过userPasswordDOMapper获得userPasswordDO对象(by userDO拿到id)
3) 通过userDO和usePasswordDO得到userModel(重点方法BeanUtils.copyProperties) - 在UserController中传入参数id给userService.getUserById()方法即可得到userModel,但此时的userModel(里面包含了全部用户信息,包括注册方式和加密后的密码等)并不能直接供UI使用,因此需要在controller下面创建一个viewobject包,创建一个UserVO对象,里面的用户信息是能够传递给UI的部分。
- 在UserController中得到userModel后将其转化成UserVO对象,然后供UI使用。(重点方法BeanUtils.copyProperties)。
3-2 定义通用的返回对象–返回正确信息
在上一节中,如果信息在传递过程中都正确,则返回没有问题,但是如果整个传递过程中出现一点问题,前端就只能显示错误信息 500。
创建respons包,创建CommonReturnType类,定义两个属性 status和data
//若status=success,则data内部返回前端需要的json数据
//若status=fail,则data内使用通用的错误码格式
//定义一个通用的创建方法
//如果不带status,则对应的status就是success,然后通过下面的同名函数返回type
public static CommonReturnType creat(Object result)
然后修改UserController中的代码,不要直接返回UserVO,通过CommonReturnType.creat()方法返回status和data(status就是success,data就是UserVO)。注意:这里是返回的正确信息,下面再讲错误信息的处理
3-3 定义通用的返回对象–返回错误信息
首先创建一个名叫error的包,在里面创建一个接口CommonError
- 在接口里面添加三个方法:
1) public int getErrCode(); //用于获取错误码
2) public String getErrMsg(); //用于获取错误信息
3) public CommonError setErrMsg(String errMsg); //用于设置自定义错误信息 - 然后创建一个枚举类EmBusinessError实现上面的接口,
定义一个通用错误类型00001,PARAMETER_VALIDATION_ERROR(00001,“参数不合法”),和一个1000开头的用户信息错误,USER_NOT_EXIST(10001,“用户不存在”),
在枚举类中添加两个属性 int errCode;和String errMsg;添加一个全参构造器并重写三个方法。 - 最后创建一个异常类BusinessError实现上述接口,
在异常类中添加一个属性CommonError,添加两个构造器,一个接收EmBusinessError的参数构造业务异常,一个接收自定义errMsg的参数构造业务异常,最后重写三个方法。
3-4 定义通用的返回对象–异常处理01
在UserController中定义exceptionhandler解决未被controller层吸收的exception
@ExceptionHandler(Exception.class)//指明收到的是跟类异常就会进入该处理环节
@ResponseStatus(HttpStatus.OK)//业务逻辑处理上的问题,而不是服务的不能处理的错误(500),返回错误码200
@ResponseBody//不加该注解,只能寻找本地页面下的一些文件,加上该注解后将返回值以特定的格式(json格式)返回到response的body区域
public Object handlerException(HttpServletRequest request, Exception ex){
······
return commonReturnType;
}
3-5 定义通用的返回对象–异常处理02
上面返回的信息非常多,下面把错误信息封装到map中让其只返回errCode和errMsg。
首先把ex强转成BusinessException类,然后用把它的errCode和errMsg放到Map中,最后用CommonReturnType类中的creat方法生成公共错误类型并返回。
优化: