【mongo】Java pojo方式存取mongo中的document

1. Pojo实体定义

Person.java

import org.bson.types.ObjectId;

/**
 * @author jiangjian
 */
public class Person {
    private ObjectId id;
    private String name;
    private int age;
    private Address address;

    public Person() {
    }

    public Person(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public ObjectId getId() {
        return id;
    }

    public void setId(ObjectId id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

Address.java

/**
 * @author jiangjian
 */
public class Address {
    private String street;
    private String city;
    private String zip;

    public Address() {
    }

    public Address(String street, String city, String zip) {
        this.street = street;
        this.city = city;
        this.zip = zip;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(final String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(final String city) {
        this.city = city;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(final String zip) {
        this.zip = zip;
    }

    @Override
    public String toString() {
        return "Address{" +
                "street='" + street + '\'' +
                ", city='" + city + '\'' +
                ", zip='" + zip + '\'' +
                '}';
    }
}

2. 测试


import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;

import java.util.Arrays;

import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Updates.set;
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;

/**
 * @author jiangjian
 */
public class POJOOperationDemo {
    public static void main(String[] args) {
        //设置编码解码器
        CodecRegistry pojoCodecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
                fromProviders(PojoCodecProvider.builder().automatic(true).build()));

        //设置MongoClient配置
        MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder().codecRegistry(pojoCodecRegistry)
                .applyToClusterSettings(builder ->
                        builder.hosts(Arrays.asList(new ServerAddress("192.168.79.20", 27017))))
                .build());

        //设置数据库
        MongoDatabase testDatabase = mongoClient.getDatabase("test");

        //设置collection名称
        MongoCollection<Person> personColl = testDatabase.getCollection("people", Person.class);

        //清空
        personColl.drop();

        //保存一个新的记录
        Person ada = new Person("jiangjian", 20, new Address("St James Square", "London", "W1"));
        personColl.insertOne(ada);

        //查询
        Person foundedPerson = personColl.find(and(eq("name", "jiangjian"), eq("age", 20))).first();
        System.out.println(foundedPerson);

        //更新
        System.out.println(personColl.updateOne(eq("name", "jiangjian"), set("age", 21)));

        //查询结果
        System.out.println(personColl.find(eq("name", "jiangjian")).first());

        personColl.deleteOne(eq("name", "jiangjian"));

        System.out.println("删除后,剩余数量为: " + personColl.countDocuments());

        mongoClient.close();

    }
}

执行效果:

[INFO][2018-09-12 18:49:32.340] Cluster created with settings {hosts=[192.168.79.20:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
    [INFO][2018-09-12 18:49:32.394] Cluster description not yet available. Waiting for 30000 ms before timing out 
    [INFO][2018-09-12 18:49:32.419] Opened connection [connectionId{localValue:1, serverValue:57}] to 192.168.79.20:27017 
    [INFO][2018-09-12 18:49:32.423] Monitor thread successfully connected to server with description ServerDescription{address=192.168.79.20:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 2]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=2578696} 
    [INFO][2018-09-12 18:49:32.434] Opened connection [connectionId{localValue:2, serverValue:58}] to 192.168.79.20:27017 
    Person{id=5b98ef3ddafd8d42e1b31877, name='jiangjian', age=20, address=Address{street='St James Square', city='London', zip='W1'}}
AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null}
Person{id=5b98ef3ddafd8d42e1b31877, name='jiangjian', age=21, address=Address{street='St James Square', city='London', zip='W1'}}
删除后,剩余数量为: 0
[INFO][2018-09-12 18:49:32.525] Closed connection [connectionId{localValue:2, serverValue:58}] to 192.168.79.20:27017 because the pool has been closed. 
### 使用Spring Boot连接MongoDB数据库 #### 配置`application.yml` 为了建立与MongoDB的连接,在项目的`application.yml`文件中指定必要的配置参数。这些参数定义了主机地址、端口号以及目标数据库名称。 ```yaml spring: data: mongodb: host: localhost port: 27017 database: test ``` 此段代码展示了如何设置本地运行的MongoDB实例连接[^1]。 对于更复杂的场景,比如带有认证信息的情况,则可以采用如下方式: ```yaml spring: data: mongodb: uri: mongodb://username:password@localhost:27017/mydatabase database: mydatabase ``` 这里通过URI的形式提供了用户名和密码用于身份验证,并指定了要访问的具体数据库[^4]。 #### 添加依赖项 为了让项目具备操作MongoDB的能力,需向构建工具(如Maven或Gradle)中的`pom.xml`或`build.gradle`添加相应的依赖条目。以下是基于Maven的一个例子: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> ``` 该依赖会自动导入所有必需的支持包以便于后续开发工作[^3]。 #### 创建实体类 接下来定义一个简单的Java POJO作为文档映射模型。假设有一个名为`User`的数据表/集合结构,那么对应的实体类可能看起来像这样: ```java import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "users") public class User { @Id private String id; private String name; private int age; // Getters and Setters... } ``` 上述代码片段创建了一个代表用户记录的对象,并标注它属于`users`这个集合内。 #### 实现CRUD功能 最后一步就是编写业务逻辑层的服务接口和服务实现类来完成基本的操作。下面给出的是利用`MongoTemplate`执行查询的例子: ```java @Autowired private MongoTemplate mongoTemplate; public List<User> findAllUsers() { return mongoTemplate.findAll(User.class); } public void saveOrUpdateUser(User user) { mongoTemplate.save(user); } // 更多方法省略... ``` 这段程序说明了怎样借助框架提供的API来进行数据存取动作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值