知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
pom.xml
<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>netkiller.cn</groupId> <artifactId>api.netkiller.cn</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>api.netkiller.cn</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source /> <target /> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
Application.java
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.authentication.UserCredentials; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import com.mongodb.Mongo; @Configuration @SpringBootApplication @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class }) @ComponentScan({ "web", "rest" }) @EnableMongoRepositories public class Application { @SuppressWarnings("deprecation") public @Bean MongoDbFactory mongoDbFactory() throws Exception { UserCredentials userCredentials = new UserCredentials("finance", "En7d0l0wssXQ8owzedjb82I0BMd4pFoZ"); return new SimpleMongoDbFactory(new Mongo("db.netkiller.cn"), "finance", userCredentials); } public @Bean MongoTemplate mongoTemplate() throws Exception { return new MongoTemplate(mongoDbFactory()); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
package web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import api.domain.City; import api.domain.Article; import api.ApplicationConfiguration; import api.repository.CityRepository; import api.repository.ArticleRepository; import api.service.TestService; @Controller public class IndexController { @Autowired private CityRepository repository; @Autowired private TestService testService; @Autowired private ApplicationConfiguration propertie; @RequestMapping("/repository") @ResponseBody public String repository() { repository.deleteAll(); // save a couple of city repository.save(new City("Shenzhen", "China")); repository.save(new City("Beijing", "China")); System.out.println("--------------------------------"); // fetch all city for (City city : repository.findAll()) { System.out.println(city); } // fetch an individual city System.out.println("--------------------------------"); System.out.println(repository.findByName("Shenzhen")); System.out.println("--------------------------------"); for (City city : repository.findByCountry("China")) { System.out.println(city); } String message = "Hello"; return message; } }
在上一節 MongoTemplate 中,繼續添加下面代碼。
package api; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @SpringBootApplication @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class }) @ComponentScan({ "api.web", "api.rest","api.service" }) @EnableMongoRepositories public class Application { public @Bean WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**"); } }; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Resource: src/main/resources/application.properties
spring.data.mongodb.uri=mongodb://finance:XQ8os82I0pFoZBMd4@mdb.netkiller.cn/finance spring.data.mongodb.repositories.enabled=true
CityRepository.java
package repository; import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.mongodb.repository.MongoRepository; import domain.City; public interface CityRepository extends MongoRepository<City, String> { public Page<City> findAll(Pageable pageable); public City findByNameAndCountry(String name, String country); public City findByName(String name); public List<City> findByCountry(String country); }
City.java
package domain; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "city") public class City { @Id private String id; public String name; public String country; public City(String name, String country){ this.setName(name); this.setCountry(country); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } @Override public String toString() { return "City [id=" + id + ", name=" + name + ", country=" + country + "]"; } }
在 IndexController 中調用 CityRepository
package web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import repository.CityRepository; import domain.City; import repository.CityRepository; @Controller public class IndexController { @Autowired private CityRepository repository; @RequestMapping("/index") @ResponseBody public ModelAndView index() { String message = "Hello"; return new ModelAndView("home/welcome", "variable", message); } @RequestMapping("/curd") @ResponseBody public String curd() { repository.deleteAll(); // save a couple of city repository.save(new City("Shenzhen", "China")); repository.save(new City("Beijing", "China")); System.out.println("--------------------------------"); // fetch all city for (City city : repository.findAll()) { System.out.println(city); } // fetch an individual city System.out.println("--------------------------------"); System.out.println(repository.findByName("Shenzhen")); System.out.println("--------------------------------"); for (City city : repository.findByCountry("China")) { System.out.println(city); } String message = "Hello"; return message; } }