Spring-Boot(三)正经的Boot

微信公众号:程序员的猫

此公众号中内容为本人学习笔记 。问题或建议,请公众号留言;

正经的boot讲点正经的操作。这篇文章先讲两个,第一、全局异常处理;第二、JAP规范

【全局异常处理】

在项目中,如果controller不对异常进行处理,异常信息会直接返回给用户,十分不友好。我们想要的效果就是,根据不同的异常信息,做不同的操作(比如登陆异常,一般业务异常......)。这需要对每一个controller方法中都要进行处理,这就会产生太多的冗余代码。为了解决这个办法最容易想到的方法就是使用aop对controller进行拦截,在切面中进行处理。当然这种造轮子的工作spring肯定会帮我们做了。下面来看看怎么用这个轮子。

BaseException是项目中所有自定义异常的父类,定义了基本属性及方法,controllerException和ServiceException是两个子类(正式项目可以为登陆异常,业务异常等等),GlobalExceptionHander是全局异常处理器(核心)。

下面开始撸代码:

@ControllerAdvice可以被@RestControllerAdvice代替,因为我返回的都是json数据。这段代码中并没有什么特别晦涩的部分,基本看看就知道是什么意思。主要是理解几个注解。

这是一份测试全局异常的response

这就完事了。所以使用别人的轮子就是这么简单。这段代码的精髓都在看不到的部分。所以好好想想如何运用aop来实现这个过程吧。

【JPA规范】

JPA(Java Persistence API)是Sun 提出的Java 持久化规范。不知道你有没有注意@Entity、@Table这些注解都是JDK提供的。其实这就是JPA的一部分。官方解释是它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。看到这个解释很容易想到一些ORM框架,比如Hibernate、mybaties等等。但是JPA只是一个规范,并不做持久化的实现。意思就是,JPA都是些接口,ORM框架来负责实现。说个题外话,这让我想到了一个规律:大型公司卖的是标准,中型公司卖的是服务,小型公司卖的是产品。就像码农负责搬砖,产品负责设计,架构负责规划。

在spring的框架中也有一套JPAspirng data jpa,可以说是另一个标准。Spring Data JPA是在JPA规范的基础下提供了Repository层的实现,可以理解为 JPA 规范的再次封装抽象,但是使用那一款ORM需要你自己去决定。其最大的功能就是按照约定好的方法命名规则写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

下面就来看看Spring Boot中的具体实现。(spring默认是通过Hibernate来实现ORM操作的)

1、配置yml文件

2、编写repository(jpa中repository即是dao)层接口

在接口中只有一个方法findByUsername,并没有实现类。通过单元测试我们顺利的查询出来了数据。findByUsername其实就是spring data jpa的一个命名标准。会被解析成一条sql语句

这些方法都是以findBy开头,以下是一些常用的方法命名规则

有了这些规则(上表并不完整)基本上可以解决企业运用中95%的数据库操作,为了防止出现出现十分复杂的情况,所以允许自己编写原生态sql。

这就是在springBoot中使用JPA了,用着也十分简单。

说了这么多,其实以上这些东西并不是在SpringBoot中首次出现,甚至无xml启动也不是SpringBoot独有,spring4中就已经实现纯注解启动。所以还是回归于《Spring-Boot(一)》所说的。SpringBoot是一个快速开发框架,在spring的基础上进行封装,简化了配置,可实现无xml配置,同时内置应用服务器,最终以应用程序执行。

以下是我项目GitHub地址

https://github.com/huangqsh/springBoot.git

如有问题,感谢指正

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813G1HOB700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券