4.4 导入CMS 数据库
导入cms数据库:
使用Studio3T软件导入cms数据库
1、创建xc_cms数据库
2、导入cms数据库
右键数据库,点击导入数据库
打开窗口,选择第一个json。
下一步,选择要导入的数据文件(json文件)
下一步操作即可完成。
导入成功:
5 页面查询接口定义
5.1 定义模型
5.1.1 需求分析
在梳理完用户需求后就要去定义前后端的接口,接口定义后前端和后端就可以依据接口去开发功能了。
本次定义页面查询接口,本接口供前端请求查询页面列表,支持分页及自定义条件查询方式。
具体需求如下:
1、分页查询CmsPage集合下的数据
2、根据站点Id、模板Id、页面别名查询页面信息
3,接口基于HttpGet请求,响应Json数据
5.1.2 模型类介绍
接口的定义离不开数据模型,根据前边对需求的分析,整个页面管理模块的数据模型如下:
页面信息如下:
首先使用lombok 会方便很多,使开发比较方便,
现在说下Lombok 怎么配置生效
Lombok是一个实用的java工具,使用它可以消除java代码的臃肿,Lombok提供一系列的注解,使用这些注解可以不用定义getter/setter、equals、构造方法等,它会在编译时在字节码文件自动生成这些通用的方法,简化开发人员的工作。
项目官方地址:https://www.projectlombok.org/
比如上节创建的UserTest模型,@Data注解可以自动生成getter/setter方法,@ToString生成tostring方法。
使用方法:
1、在项目中添加Lombok的依赖
作用:项目在编译时根据Lombok注解生成通用方法。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2、在IDEA开发工具中添加Lombok插件
作用:使用IDEA开发时根据Lombok注解生成通用方法,不报错。
常用方法:
@Data、@ToString、@Document注解表示什么意思?
@Data、@ToString:是Lombok提供的注解,下边会介绍。
@Document:是Spring Data mongodb提供的注解,最终CMS的开发会使用Mongodb数据库。
5.2 定义接口
5.2.1 定义请求及相应类型,返回结果类
1、定义请求模型QueryPageRequest,此模型作为查询条件类型
为后期扩展需求,请求类型统一继承RequestData类型。
@Data
public class QueryPageRequest {
//接收页面查询的查询条件
//站点id
//站点id
@ApiModelProperty("站点id")
private String siteId;
//页面ID
private String pageId;
//页面名称
private String pageName;
//别名
private String pageAliase;
//模版id
private String templateId;
//....
}
2,响应结果类型,分页查询统一使用QueryResponseResult
@Data
@ToString
public class QueryResponseResult extends ResponseResult {
QueryResult queryResult;
public QueryResponseResult(ResultCode resultCode,QueryResult queryResult){
super(resultCode);
this.queryResult = queryResult;
}
}
5.2.2 定义接口
在Api接口工程专门定义接口,在Api工程单独定义接口的原因如下:
1、接口集中管理
2、Api工程的接口将作为各微服务远程调用使用。
页面查询接口定义如下:
public interface CmsPageControllerApi {
public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest) ;
}
这个接口是Controller 层实现的接口,类似于CmsPageController implements CmsPageControllerApi
6.页面查询服务端开发
6.1 创建CMS服务工程
6.1.1 创建cms工程结构
创建maven 工程,cms工程的名称为xc-service-manage-cms,父工程为xc-framework-parent
pom.xml 如下:
由于cms 工程要连接mongodb所以需要在cms服务端工程添加如下依赖:
项目使用spring data mongodb 操作mongodb 数据库
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐data‐mongodb</artifactId>
</dependency>
2,创建基本的包结构:
com.xuecheng.manage.cms.config:配置类目录,数据库配置,MQ配置等
com.xuecheng.manage.cms.dao:dao接口目录
com.xuecheng.manage.service:service 类目录
com.xuecheng.manage_cms.web.controller:controller 类目录
3,配置文件
在classpath 下配置application.yml
server:
port:31001
spring:
application:
name:xc‐service‐manage‐cms
data:
mongodb:
uri:mongodb://root:123@localhost:27017
database:xc_cms
日志配置文件:另外从课程资料下“cms工程配置文件”中拷贝logback-spring.xml,此文件为工程的日志配置文件。
4,springBoot启动类
SpringBoot 应用需要创建一个应用启动类,启动过程中会扫描Bean并注入spring 容器
注意:此类创建在本工程com.xuecheng.manage_cms包下:(注意在manage_cms 根目录下)
注意启动类中的注解一定要写
@SpringBootApplication
@EntityScan("com.xuecheng.framework.domain.cms")//扫描实体类
@ComponentScan(basePackages={"com.xuecheng.api"})//扫描接口
@ComponentScan(basePackages={"com.xuecheng.manage_cms"})//扫描本项目下的所有类
public class ManageCmsApplication {
public static void main(String[] args){
SpringApplication.run(ManageCmsApplication.class,args);
}
}
6.1.2 测试Controller
使用 springMVC 完成接口实现开发,这里暂时使用测试数据,稍后会让controller调用service来查询数据。
解释:接口上用{page},在参数上一定要用@PathVariable(""),而不是用@RequestParam(""),
因为@PathVariable("")
通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“)
6.2 Dao
6.2.1 分页查询 测试
6.2.1.1 定义Dao 接口
本项目使用Spring Data Mongodb 完成Mongodb数据库的查询,Spring Data Mongodb提供一套快捷操作 mongodb 的方法。
创建Dao.继承MongoRepository,并指定实体类型和主键类型
public interface CmsPageRepository extends MongoRepository<CmsPage,String>
}
解释:CmsPageRepository 这个接口类名字是自己随便起的,MongoRepository 类是我们上面注入的maven Mongodb repository包下面的类。类有两个形参,第一个为Dao层查询的对象,第二个为主键类型。
6.2.1.2 编写测试类
在test 包下创建于main 包下相同的路径
测试类要添加 @SpringBootTest 和 @RunWith(SpringRunner.class) 的注解,启动测试类会从main下找springBoot 启动类,加载spring 容器。
代码如下:
6.2.1.3分页查询测试 不写了,太简单
6.2.2 基础方法测试
在Dao层接口继承了MongoRepository,在MongoRepository 中定义了很多现成的方法,如save,delete 等,通过下面的代码来测试一下
就是MongoRepository 类下已经有的方法,
不仅仅只有这些 MongoRepository 还继承了好多类,下面有很多接口。
6.2.3.4 自定义Dao 方法
同Spring Data JPA 一样Spring Data mongodb 也提供自定义的方法,按照findByXXX,findByXXXAndYYY,countByXXXAndYYY,等规则定义方法,实现查询操作。
public interface CmsPageRepository extends MongoRepository<CmsPage,String> {
//根据页面名称查询
CmsPage findByPageName(String pageName);
}
类似于这种,不用写sql ,便可直接调用,查询数据
//根据页面名称查询
@Test
public void testfindByPageName(){
CmsPage cmsPage = cmsPageRepository.findByPageName("preview_297e7c7c62b888f00162b8a965510001.html");
System.out.println(cmsPage);
}
}
在test 包下写的测试类
6.6 接口开发规范
6.6.1 Api 请求及响应规范
1,get 请求时,采用key/value 格式请求,Spring MVC 可采用基本类型的变量接收,也可采用对象接收。
2、Post请求时,可以提交form表单数据(application/x-www-form-urlencoded)和Json数据(Content-Type=application/json),文件等多部件类型(multipart/form-data)三种数据格式,SpringMVC接收Json数据使用@RequestBody注解解析请求的json数据。
3,响应结果统一信息为:是否成功,操作代码,提示信息及自定义数据。
4,响应结果统一格式为json。
6.6.2 Api 定义约束
Api 定义使用Spring MVC 来完成,由于此接口后期将作为微服务远程调用使用。在定义接口时,有如下限制:
1,@PathVariable 统一指定参数名称,如:@PathVariable("id") 这个用于请求url 有占位符,和参数一致时使用
2,@RequestParma("")统一指定参数名称,
7, 页面查询接口测试
本章介绍两个工具:Swagger 和Postman.
7.1 Swagger
7.1.1.1 swagger 介绍
自行查询
7.1.1.2 Swagger 常用注解
在spring boot 集成swagger 后,添加swagger 注解即可生成swagger 接口,常用注解如下:
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError:发生错误返回的信息
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数
@ApiImplicitParam的属性如下:
@Api(value="cms页面管理接口",description = "cms页面管理接口,提供页面的增、删、改、查")
public interface CmsPageControllerApi {
//页面查询
@ApiOperation("分页查询页面列表")
@ApiImplicitParams({
@ApiImplicitParam(name="page",value = "页码",required=true,paramType="path",dataType="int"),
@ApiImplicitParam(name="size",value = "每页记录数",required=true,paramType="path",dataType="int")
})
public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
}
多敲敲
7.1.4 Swagger 接口测试
Swagger 接口生成工作原理:
1、系统启动,扫描到api工程中的Swagger2Configuration类
2、在此类中指定了包路径com.xuecheng,找到在此包下及子包下标记有@RestController注解的controller类
3、根据controller类中的Swagger注解生成接口文档。
启动cms服务工程,查看接口文档,请求:http://localhost:31001/swagger-ui.html
swagger 传参测试接口: