05-Thymeleaf 和 MongoDB 实践
本文内容主要还是总结上面两篇内容的操作,并实现一个复杂查询的小案例,MongoDB数据库还使用前面安装好的。
首先生成项目:

可以看到上面有三个依赖的组件。
然后看一下项目结构:

核心目录如下:
1 pom.xml Maven 依赖配置
2 application.properties 配置文件,配置 mongo 连接属性配置
3 dao 数据访问层
4 controller 展示层实现
类似配了 MySQL 和 JDBC 驱动,肯定得去配置数据库。在 application.properties 配置中启动 MongoDB 配置。
数据库名为 admin,账号密码也为 admin。
spring.data.mongodb.host=localhost
spring.data.mongodb.database=admin
spring.data.mongodb.port=27017
spring.data.mongodb.username=admin
spring.data.mongodb.password=admin
MongoDB 数据访问层 CityRepository
City类:

修改 CityRepository 类,代码如下:

CityRepository 接口只要继承 ReactiveMongoRepository 类即可。
这里实现了通过城市名找出唯一的城市对象方法:
Mono<City> findByCityName(String cityName);
复杂查询语句实现也很简单,只要依照接口实现规范,即可实现对应 MySQL 的 where 查询语句。这里 findByxxx 的 xxx 可以映射任何字段,包括主键等。
接口的命名是遵循规范的,常用命名规则如下:

处理器类 Handler 和控制器类 Controller
修改下 Handler,代码如下:

新增对应的方法,直接返回 Mono 对象,不需要对 Mono 进行转换,因为 Mono 本身是个对象,可以被 View 层渲染。继续修改控制器类 Controller,代码如下:

新增 getByName 路径,指向了新的页面 city。使用 @RequestParam 接收 GET 请求入参,接收的参数为 cityName,城市名称。视图返回值 Mono<String> 或者 String 都行。
Tymeleaf 视图
然后编写两个视图 city 和 cityList,代码分别如下。
city.html:

cityList.html:

运行工程
一个 Spring Boot WebFlux 工程就开发完毕了,下面运行工程验证下。在 IDEA 中执行 Application 类启动,任意正常模式或者 Debug 模式,可以在控制台看到成功运行的输出:

打开 Postman 工具,开发必备,进行下面操作。
新增城市信息 POST http://127.0.0.1:8005/city:

打开浏览器,访问 http://localhost:8005/city/getByName?cityName=大连,可以看到如图的响应:

继续访问 http://localhost:8005/city/page/list,如图:

注意:如果没有值可以插入几条。
其它接口可以自行实验。
总结
这里初步实现了一个简单的整合,具体复杂的案例我们在后面的综合案例中实现,会很酷炫。下面整合 Redis,基于 Redis 可以实现常用的缓存、锁,下一篇我们将学习如何整合 Reids。
原文:https://gitbook.cn/gitchat/column/5acda6f6d7966c5ae1086f2b/topic/5acdaa31d7966c5ae1087074
代码:https://gitee.com/blueses/springboot-webflux