diff --git a/springboot-webflux-5-thymeleaf-mongodb/pom.xml b/springboot-webflux-5-thymeleaf-mongodb/pom.xml new file mode 100755 index 00000000..64c611d4 --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + springboot + springboot-webflux-5-thymeleaf-mongodb + 0.0.1-SNAPSHOT + springboot-webflux-5-thymeleaf-mongodb :: Spring Boot WebFlux 中 Thymeleaf 和 Mongodb 实践 + + + + org.springframework.boot + spring-boot-starter-parent + 2.0.1.RELEASE + + + + + + + org.springframework.boot + spring-boot-starter-webflux + + + + + org.springframework.boot + spring-boot-starter-data-mongodb-reactive + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + junit + junit + 4.12 + + + + diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/Application.java b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/Application.java new file mode 100644 index 00000000..467400e7 --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/Application.java @@ -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); + } +} diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java new file mode 100644 index 00000000..af3e209d --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java @@ -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 { + + Mono findByCityName(String cityName); + +} diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/domain/City.java b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/domain/City.java new file mode 100644 index 00000000..fa3b4107 --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/domain/City.java @@ -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; + } +} diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java new file mode 100644 index 00000000..53e62cbd --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java @@ -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 save(City city) { + return cityRepository.save(city); + } + + public Mono findCityById(Long id) { + + return cityRepository.findById(id); + } + + public Flux findAllCity() { + + return cityRepository.findAll(); + } + + public Mono modifyCity(City city) { + + return cityRepository.save(city); + } + + public Mono deleteCity(Long id) { + cityRepository.deleteById(id); + return Mono.create(cityMonoSink -> cityMonoSink.success(id)); + } + + public Mono getByCityName(String cityName) { + return cityRepository.findByCityName(cityName); + } +} diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java new file mode 100644 index 00000000..c7687848 --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java @@ -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 findCityById(@PathVariable("id") Long id) { + return cityHandler.findCityById(id); + } + + @GetMapping() + @ResponseBody + public Flux findAllCity() { + return cityHandler.findAllCity(); + } + + @PostMapping() + @ResponseBody + public Mono saveCity(@RequestBody City city) { + return cityHandler.save(city); + } + + @PutMapping() + @ResponseBody + public Mono modifyCity(@RequestBody City city) { + return cityHandler.modifyCity(city); + } + + @DeleteMapping(value = "/{id}") + @ResponseBody + public Mono 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 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 = cityHandler.getByCityName(cityName); + model.addAttribute("city", city); + return CITY_PATH_NAME; + } +} diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/application.properties b/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/application.properties new file mode 100644 index 00000000..270284ae --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/application.properties @@ -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 diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/city.html b/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/city.html new file mode 100644 index 00000000..18a3447e --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/city.html @@ -0,0 +1,28 @@ + + + + + 城市 + + + + +
+ + + + + 城市单个查询 + + + + + + + +
+ +
+ + + diff --git a/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/cityList.html b/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/cityList.html new file mode 100644 index 00000000..3245b7e8 --- /dev/null +++ b/springboot-webflux-5-thymeleaf-mongodb/src/main/resources/templates/cityList.html @@ -0,0 +1,38 @@ + + + + + 城市列表 + + + + +
+ + + + + 城市列表 + + + + + + + + + + + + + + + + + +
城市编号省份编号名称描述
+ +
+ + +