Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Spring Boot WebFlux 中 Thymeleaf 和 Mongodb 实践
- Loading branch information
liqiangqiang
committed
Apr 26, 2018
1 parent
7f68137
commit 1975b9b
Showing
9 changed files
with
329 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<groupId>springboot</groupId> | ||
<artifactId>springboot-webflux-5-thymeleaf-mongodb</artifactId> | ||
<version>0.0.1-SNAPSHOT</version> | ||
<name>springboot-webflux-5-thymeleaf-mongodb :: Spring Boot WebFlux 中 Thymeleaf 和 Mongodb 实践</name> | ||
|
||
<!-- Spring Boot 启动父依赖 --> | ||
<parent> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-parent</artifactId> | ||
<version>2.0.1.RELEASE</version> | ||
</parent> | ||
|
||
<dependencies> | ||
|
||
<!-- Spring Boot Web Flux 依赖 --> | ||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-webflux</artifactId> | ||
</dependency> | ||
|
||
<!-- Spring Boot 响应式 MongoDB 依赖 --> | ||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> | ||
</dependency> | ||
|
||
<!-- 模板引擎 Thymeleaf 依赖 --> | ||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-thymeleaf</artifactId> | ||
</dependency> | ||
|
||
<!-- Spring Boot Test 依赖 --> | ||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-test</artifactId> | ||
<scope>test</scope> | ||
</dependency> | ||
|
||
<!-- Junit --> | ||
<dependency> | ||
<groupId>junit</groupId> | ||
<artifactId>junit</artifactId> | ||
<version>4.12</version> | ||
</dependency> | ||
</dependencies> | ||
|
||
</project> |
19 changes: 19 additions & 0 deletions
19
springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/Application.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package org.spring.springboot; | ||
|
||
import org.springframework.boot.SpringApplication; | ||
import org.springframework.boot.autoconfigure.SpringBootApplication; | ||
|
||
/** | ||
* Spring Boot 应用启动类 | ||
* | ||
*/ | ||
// Spring Boot 应用的标识 | ||
@SpringBootApplication | ||
public class Application { | ||
|
||
public static void main(String[] args) { | ||
// 程序启动入口 | ||
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件 | ||
SpringApplication.run(Application.class,args); | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
...t-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package org.spring.springboot.dao; | ||
|
||
import org.spring.springboot.domain.City; | ||
import org.springframework.data.mongodb.repository.ReactiveMongoRepository; | ||
import org.springframework.stereotype.Repository; | ||
import reactor.core.publisher.Mono; | ||
|
||
@Repository | ||
public interface CityRepository extends ReactiveMongoRepository<City, Long> { | ||
|
||
Mono<City> findByCityName(String cityName); | ||
|
||
} |
60 changes: 60 additions & 0 deletions
60
springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/domain/City.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package org.spring.springboot.domain; | ||
|
||
/** | ||
* 城市实体类 | ||
* | ||
*/ | ||
public class City { | ||
|
||
/** | ||
* 城市编号 | ||
*/ | ||
private Long id; | ||
|
||
/** | ||
* 省份编号 | ||
*/ | ||
private Long provinceId; | ||
|
||
/** | ||
* 城市名称 | ||
*/ | ||
private String cityName; | ||
|
||
/** | ||
* 描述 | ||
*/ | ||
private String description; | ||
|
||
public Long getId() { | ||
return id; | ||
} | ||
|
||
public void setId(Long id) { | ||
this.id = id; | ||
} | ||
|
||
public Long getProvinceId() { | ||
return provinceId; | ||
} | ||
|
||
public void setProvinceId(Long provinceId) { | ||
this.provinceId = provinceId; | ||
} | ||
|
||
public String getCityName() { | ||
return cityName; | ||
} | ||
|
||
public void setCityName(String cityName) { | ||
this.cityName = cityName; | ||
} | ||
|
||
public String getDescription() { | ||
return description; | ||
} | ||
|
||
public void setDescription(String description) { | ||
this.description = description; | ||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
...-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package org.spring.springboot.handler; | ||
|
||
import org.spring.springboot.dao.CityRepository; | ||
import org.spring.springboot.domain.City; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Component; | ||
import reactor.core.publisher.Flux; | ||
import reactor.core.publisher.Mono; | ||
|
||
@Component | ||
public class CityHandler { | ||
|
||
private final CityRepository cityRepository; | ||
|
||
@Autowired | ||
public CityHandler(CityRepository cityRepository) { | ||
this.cityRepository = cityRepository; | ||
} | ||
|
||
public Mono<City> save(City city) { | ||
return cityRepository.save(city); | ||
} | ||
|
||
public Mono<City> findCityById(Long id) { | ||
|
||
return cityRepository.findById(id); | ||
} | ||
|
||
public Flux<City> findAllCity() { | ||
|
||
return cityRepository.findAll(); | ||
} | ||
|
||
public Mono<City> modifyCity(City city) { | ||
|
||
return cityRepository.save(city); | ||
} | ||
|
||
public Mono<Long> deleteCity(Long id) { | ||
cityRepository.deleteById(id); | ||
return Mono.create(cityMonoSink -> cityMonoSink.success(id)); | ||
} | ||
|
||
public Mono<City> getByCityName(String cityName) { | ||
return cityRepository.findByCityName(cityName); | ||
} | ||
} |
66 changes: 66 additions & 0 deletions
66
...mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
package org.spring.springboot.webflux.controller; | ||
|
||
import org.spring.springboot.domain.City; | ||
import org.spring.springboot.handler.CityHandler; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Controller; | ||
import org.springframework.ui.Model; | ||
import org.springframework.web.bind.annotation.*; | ||
import reactor.core.publisher.Flux; | ||
import reactor.core.publisher.Mono; | ||
|
||
@Controller | ||
@RequestMapping(value = "/city") | ||
public class CityWebFluxController { | ||
|
||
@Autowired | ||
private CityHandler cityHandler; | ||
|
||
@GetMapping(value = "/{id}") | ||
@ResponseBody | ||
public Mono<City> findCityById(@PathVariable("id") Long id) { | ||
return cityHandler.findCityById(id); | ||
} | ||
|
||
@GetMapping() | ||
@ResponseBody | ||
public Flux<City> findAllCity() { | ||
return cityHandler.findAllCity(); | ||
} | ||
|
||
@PostMapping() | ||
@ResponseBody | ||
public Mono<City> saveCity(@RequestBody City city) { | ||
return cityHandler.save(city); | ||
} | ||
|
||
@PutMapping() | ||
@ResponseBody | ||
public Mono<City> modifyCity(@RequestBody City city) { | ||
return cityHandler.modifyCity(city); | ||
} | ||
|
||
@DeleteMapping(value = "/{id}") | ||
@ResponseBody | ||
public Mono<Long> deleteCity(@PathVariable("id") Long id) { | ||
return cityHandler.deleteCity(id); | ||
} | ||
|
||
private static final String CITY_LIST_PATH_NAME = "cityList"; | ||
private static final String CITY_PATH_NAME = "city"; | ||
|
||
@GetMapping("/page/list") | ||
public String listPage(final Model model) { | ||
final Flux<City> cityFluxList = cityHandler.findAllCity(); | ||
model.addAttribute("cityList", cityFluxList); | ||
return CITY_LIST_PATH_NAME; | ||
} | ||
|
||
@GetMapping("/getByName") | ||
public String getByCityName(final Model model, | ||
@RequestParam("cityName") String cityName) { | ||
final Mono<City> city = cityHandler.getByCityName(cityName); | ||
model.addAttribute("city", city); | ||
return CITY_PATH_NAME; | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
springboot-webflux-5-thymeleaf-mongodb/src/main/resources/application.properties
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
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 |
28 changes: 28 additions & 0 deletions
28
springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/city.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<!DOCTYPE html> | ||
<html lang="zh-CN"> | ||
<head> | ||
<meta charset="UTF-8"/> | ||
<title>城市</title> | ||
</head> | ||
|
||
<body> | ||
|
||
<div> | ||
|
||
|
||
<table> | ||
<legend> | ||
<strong>城市单个查询</strong> | ||
</legend> | ||
<tbody> | ||
<td th:text="${city.id}"></td> | ||
<td th:text="${city.provinceId}"></td> | ||
<td th:text="${city.cityName}"></td> | ||
<td th:text="${city.description}"></td> | ||
</tbody> | ||
</table> | ||
|
||
</div> | ||
|
||
</body> | ||
</html> |
38 changes: 38 additions & 0 deletions
38
springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/cityList.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
<!DOCTYPE html> | ||
<html lang="zh-CN"> | ||
<head> | ||
<meta charset="UTF-8"/> | ||
<title>城市列表</title> | ||
</head> | ||
|
||
<body> | ||
|
||
<div> | ||
|
||
|
||
<table> | ||
<legend> | ||
<strong>城市列表</strong> | ||
</legend> | ||
<thead> | ||
<tr> | ||
<th>城市编号</th> | ||
<th>省份编号</th> | ||
<th>名称</th> | ||
<th>描述</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr th:each="city : ${cityList}"> | ||
<td th:text="${city.id}"></td> | ||
<td th:text="${city.provinceId}"></td> | ||
<td th:text="${city.cityName}"></td> | ||
<td th:text="${city.description}"></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
|
||
</div> | ||
|
||
</body> | ||
</html> |