MongoDB对应Java实体类编写方法

本文介绍了MongoDB中一个电影文档的具体结构,包括_id、title、like、dislike等字段,并详细展示了如何使用POJO(Plain Old Java Object)来映射这个文档结构,通过具体的Java代码示例解释了实体类Movie和Comment的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.文档结构

movie

{
        "_id" : ObjectId("*******2bd93db4516d6040ed"),
        "title" : "羞羞的铁拳",
        "like" : 101,
        "dislike" : 20,
        "author" : [
                "mike",
                "jam"
        ],
        "comment" : [
                {
                        "name" : "mike",
                        "text" : "good movie"
                }
        ]
}

2.POJO

上面的文档包含一个数组和内嵌文档。内嵌文档需要编写新的实体类,可以不用包含ID字段。

Movie.java

//这里对应的数据库集合名为movie,如果不填,默认为小写movie
@Document(collection="movie")
public class Movie {

    @Id
    private String id;

    private String title;
    private Integer like;
    private Integer dislike;
    private String[] author;
    private List<Comment> comment;

    .....

    getter and setter
}

Comment.java

//内嵌文档不用写集合名,加上@Document就行了
@Document
public class Comment {



    private String name;
    private String text;

    ......

    getter and setter


}
MongoDB 中的数据是以 BSON 格式存储的,因此在使用 Java 语言操作 MongoDB 时需要将 BSON 对象转换为 Java 对象。为了方便地进行数据操作,可以使用一些开源的库来自动生成 Java 实体。以下是使用 **bson4jackson** 库来自动生成 Java 实体的方法: 1. 引入依赖 在 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>bson</artifactId> <version>${bson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-smile</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>de.undercouch</groupId> <artifactId>bson4jackson</artifactId> <version>${bson4jackson-version}</version> </dependency> ``` 其中 `${jackson-version}`、`${bson-version}`、`${bson4jackson-version}` 是对应库的版本号。 2. 编写代码 ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import de.undercouch.bson4jackson.BsonFactory; import org.bson.BSON; import org.bson.BsonBinaryReader; import org.bson.BsonDocument; import org.bson.BsonReader; import org.bson.codecs.BsonDocumentCodec; import org.bson.codecs.DecoderContext; import java.io.ByteArrayInputStream; import java.io.IOException; public class BsonToJavaEntityConverter { public static <T> T convert(byte[] bsonBytes, Class<T> clazz) throws IOException { BsonDocument bsonDocument = BSON.decode(bsonBytes); BsonReader bsonReader = new BsonBinaryReader(new ByteArrayInputStream(bsonBytes)); ObjectMapper objectMapper = new ObjectMapper(new BsonFactory()); SimpleModule module = new SimpleModule(); module.addDeserializer(ObjectId.class, new ObjectIdDeserializer()); objectMapper.registerModule(module); BsonDocumentCodec codec = new BsonDocumentCodec(); DecoderContext decoderContext = DecoderContext.builder().build(); bsonDocument = codec.decode(bsonReader, decoderContext); return objectMapper.readValue(bsonDocument.toJson(), clazz); } } ``` 3. 测试 假设有以下 MongoDB 中的文档: ```json { "_id": ObjectId("615f1c2c4a11123d0a60f8e7"), "name": "Tom", "age": 18 } ``` 可以使用以下代码将其转换为 Java 实体: ```java byte[] bsonBytes = collection.find().first().toJson().getBytes(); User user = BsonToJavaEntityConverter.convert(bsonBytes, User.class); ``` 其中 `collection` 是 MongoDB 中的集合对象,`User` 是 Java 实体类名。转换后的 Java 实体对象即为: ```java public class User { private ObjectId _id; private String name; private int age; // getter 和 setter 方法 } ``` 需要注意的是,如果 MongoDB 中的字段名与 Java 实体类中的字段名不一致,需要使用 `@JsonProperty` 注解指定字段名,例如: ```java public class User { @JsonProperty("_id") private ObjectId id; private String name; private int age; // getter 和 setter 方法 } ``` 另外,如果 MongoDB 中的文档中包含其他嵌套文档或数组类型的字段,可以在 Java 实体类中定义相应的嵌套实体类或集合类型的字段,然后在 `BsonToJavaEntityConverter` 类中注册相应的反序列化器即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值