Spring Boot学习笔记(六)结合MyBatis实现较为复杂的RESTful API

前两篇已经构建了RESTful API标准工程实例,也整合了MyBatis实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库CRUD的标准服务。

首先看下要实现的效果吧,完成下面截图部分的API,除了CRUD之外,分页查询也是使用的比较多的。

image1

这次是采用代码编写的方式,没有使用通用mapper和分页组件,打算先熟悉下整个流程,后面实际开发功能的话还是使用的好,提高开发效率。

下面是编码的详细步骤:

编写TempMapper

我们优先实现数据库访问,之前一直采用的是注解的方式,所以这次就注解到底了。

但是遇到了第一个问题,sql如何拼接,之前简单的例子不会涉及,但这次有分页,有更新(可能更新某个字段)。

网上看了下,一种方式是使用方法动态去拼接,尝试了一下,发现这代码可读性太差了,还不如直接用xml的方式了,后来才知道有,动态语言注解,其实就是通过该注解去指向你生成动态Sql的方法,相关代码如下:

我们定义一个类,用于提供所需要的Sql字符串,这里写了两个方法,分别生成分页查询的sql语句和更新sql语句:

可以看到,这里用了两种方式,查询的sql我通过字符串拼接的方式直接写sql,而更新的sql我使用MyBatis提供了SQL类,大家可以参考下,后者看起来更优雅点。

然后我们可以编写了,具体代码如下:

这里可以看到,我们分别通过和注解,指向对应sql的类和方法,实现动态sql。

到这里,最复杂的数据访问基本就算编写完了。

轻插:MyBatis的一些注解说明

除了常规的CRUD的注解之外(,,,)和使用动态语言注解之外,有必要再说明下传参方式。

使用@Parm

基本上有三种,在上面的demo都有使用到方法,中定义的对应sql中。

使用Map

当参数过多且不确定时,通过对象来作为传递参数的容器,如上面方法,但是在代码可读性上比较差点,我只有到具体sql中才能找到具体有哪些参数。

使用对象

使用普通的java对象来作为传参方式,如上面的方法,当参数确定时使用对象的方式比较好。

编写Service层

我们继续编写Service层。

首先定义接口,确认给要输出的方法,代码如下,简单的CRUD和一个分页的查询方法:

然后编写对应实现,代码如下:

这部分没有什么好说的,由于没有很复杂的逻辑,直接调用的mapper。

编写Controller

暴露对外访问路由,同时整合Swagger,整体代码如下:

主要实现了五个接口,简单的CRUD和一个分页。

到这里,代码基本编写完成,如无意外的话,编译后即可得到上面说的截图效果。

轻插:Swagger常用注解说明

上面代码中使用了一些Swagger基本的注解:

@Api:用在请求的类上,表示对类的说明

@ApiOperation:用在请求的方法上,说明方法的用途、作用

@ApiParam:用在请求的方法上,表示参数说明

主要用了这三个,主要描述下整个服务组的一些说明,主要描述单个服务的说明,这两个感觉还是有点必要的。

至于其他的,感觉视情况而定吧,如果要把一个服务全部描述清楚,这代码看上去真的有点恐怖。

下面是一些Swagger其他一些注解,供大家了解参考,因为没有使用到,没有深入去研究,详细的可以参考官网

@ApiModel: 用于类表示对类进行说明,用于参数用实体类接收

@ApiModelProperty:用于方法,字段

表示对model属性的说明或者数据操作更改

@ApiIgnore:用于类,方法,方法参数

表示这个方法或者类被忽略

@ApiImplicitParam: 用于方法

表示单独的请求参数

@ApiImplicitParams:用于方法,包含多个 @ApiImplicitParam

总结

本篇主要结合Spring Boot学习笔记(四)构建RESTful API标准工程实例和Spring Boot学习笔记(五)整合MyBatis实现数据库访问,填充了CURD服务的基本实现。

开发应用时,主流程实现应该没有问题了,但还有很多不足,比如日志,一些传参验证,异常捕获等。后期也会慢慢学习,分享出来。

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

扫码关注云+社区

领取腾讯云代金券