标签:直接 依赖 conf import word long compress open 托管
MongoDB是 open-source NoSQL 文档数据库,它使用 JSON-like schema 而不是传统的 table-based 关系数据。 Spring Boot 提供了一些使用 MongoDB 的便利,包括spring-boot-starter-data-mongodb和spring-boot-starter-data-mongodb-reactive“Starters”。
要访问 Mongo 数据库,可以 inject auto-configured org.springframework.data.mongodb.MongoDbFactory。默认情况下,实例尝试在mongodb://localhost/test处连接到 MongoDB 服务器。以下 example 显示如何连接到 MongoDB 数据库:
import org.springframework.data.mongodb.MongoDbFactory; import com.mongodb.DB; @Component public class MyBean { private final MongoDbFactory mongo; @Autowired public MyBean(MongoDbFactory mongo) { this.mongo = mongo; } // ... public void example() { DB db = mongo.getDb(); // ... } }
您可以设置spring.data.mongodb.uri property 来更改 URL 并配置其他设置,例如副本集,如以下 example 所示:
spring.data.mongodb.uri=mongodb://user:[emailprotected]:12345,mongo2.example.com:23456/test
或者,当您使用 Mongo 2.x 时__,您可以指定host/port。例如,您可以在application.properties中声明以下设置:
spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017
如果你已经定义了自己的MongoClient,它将被用于 auto-configure 一个合适的MongoDbFactory。支持com.mongodb.MongoClient和com.mongodb.client.MongoClient。
如果使用 Mongo 3.0 Java 驱动程序,则不支持
spring.data.mongodb.host和spring.data.mongodb.port。在这种情况下,应使用spring.data.mongodb.uri来提供所有 configuration。
如果未指定
spring.data.mongodb.port,则使用默认值27017。您可以从前面显示的 example 中删除此 line。
如果你不使用 Spring Data Mongo,你可以 inject
com.mongodb.MongoClientbeans 而不是MongoDbFactory。如果要完全控制建立 MongoDB 连接,还可以声明自己的MongoDbFactory或MongoClientbean。
如果您使用 reactive 驱动程序,则 SSL 需要 Netty。如果 Netty 可用,则 auto-configuration 会自动配置此工厂,并且尚未自定义要使用的工厂。
Spring Data MongoDB提供了MongoTemplate class,其设计与 Spring 的JdbcTemplate非常相似。与JdbcTemplate,Spring Boot auto-configures _ bean 一样,您可以 inject 模板,如下所示:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class MyBean { private final MongoTemplate mongoTemplate; @Autowired public MyBean(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } // ... }
Spring Data 包括 MongoDB 的 repository 支持。与前面讨论的 JPA repositories 一样,基本原则是基于方法名称自动构造查询。
实际上,Spring Data JPA 和 Spring Data MongoDB 共享相同的 common 基础结构。您可以从之前获取 JPA example,假设City现在是 Mongo 数据 class 而不是 JPA @Entity,它的工作方式相同,如下面的示例所示:
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndStateAllIgnoringCase(String name, String state); }
[root@topcheer ~]# docker exec -it mongo mongo admin MongoDB shell version v4.2.1 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("7ff60ffe-767d-4982-bd97-6a872157cc05") } MongoDB server version: 4.2.1 > db.createUser({ user:‘admin‘,pwd:‘123456‘,roles:[ { role:‘userAdminAnyDatabase‘, db: ‘admin‘}]}); Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } > db.auth(‘admin‘, ‘123456‘) 1 > use test; switched to db test > db.createUser({ user: ‘test‘, pwd:‘123456‘, roles: [ {role:"dbOwner",db:"test"}]}); Successfully added user: { "user" : "test", "roles" : [ { "role" : "dbOwner", "db" : "test" } ] } > exit bye
配置
spring: application: name: spring-boot-mongodb data: mongodb: uri: mongodb://test:123456@192.168.180.113:27017/test
构建项目
我们使用IDEA创建一个新的SpringBoot项目,在pom.xml配置文件内添加我们本章所需要的依赖,如下所示:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
根据mongodb的依赖我们可以看到Spring家族式的设计,把所有操作数据的依赖都进行归类到spring-boot-starter-data-xxx下,我们比较常用到的如:spring-boot-starter-data-jpa、spring-boot-starter-data-redis等。
MongoRepository
spring-boot-starter-data-mongodb确实采用了跟spring-boot-starter-data-jpa同样的方式来完成接口代理类的生成,并且提供了一些常用的单个对象操作的公共方法,MongoRepository接口作用与JPARepository一致,继承了该接口的业务数据接口就可以提供一个被Spring IOC托管的代理实现类,这样我们在注入业务数据接口时就会完成代理实现类的注入。
废话不多说了,下面我们直接来创建一个名为UserRepository 的数据接口,该接口继承MongoRepository<T,PK>,如下所示:
public interface UserRepository extends MongoRepository<UserInfo,Long> { }
MongoRepository <T,PK>同样也是采用了两个泛型参数,T:实体类类型。PK:T实体类内的主键类型,如:Long。
public class UserInfo { @Id private Long id; private String username; private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public UserInfo(Long id, String username, String password) { this.id = id; this.username = username; this.password = password; } }
测试
@RestController public class UserController { @Autowired private UserRepository userRepository; //http://localhost:8080/save @GetMapping("save") public String save(){ UserInfo userInfo = new UserInfo(System.currentTimeMillis(),"用户"+System.currentTimeMillis(),"123"); userRepository.save(userInfo); return "success"; } //http://localhost:8080/getUserList @GetMapping("getUserList") public List<UserInfo> getUserList(){ List<UserInfo> userInfoList = userRepository.findAll(); return userInfoList; } //http://localhost:8080/delete?id=1525503798382 @GetMapping("delete") public String delete(Long id){ userRepository.deleteById(id); return "success"; } //http://localhost:8080/update?id=1525503912550&username=111&password=222 @GetMapping("update") public String update(Long id,String username,String password){ UserInfo userInfo = new UserInfo(id,username,password); userRepository.save(userInfo); return "success"; } }


标签:直接 依赖 conf import word long compress open 托管
原文地址:https://www.cnblogs.com/dalianpai/p/11925496.html