Spring中Mongodb的java实体类映射

spring-data-mongodb中的实体映射是通过MongoMappingConverter这个类实现的。它可以通过注释把java类转换为mongodb的文档。

它有以下几种注释:
@Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。

@Document - 把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。

@DBRef - 声明类似于关系数据库的关联关系。ps:暂不支持级联的保存功能,当你在本实例中修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存,如下面例子的Person和Account。

@Indexed - 声明该字段需要索引,建索引可以大大的提高查询效率。

@CompoundIndex - 复合索引的声明,建复合索引可以有效地提高多字段的查询效率。

@GeoSpatialIndexed - 声明该字段为地理信息的索引。

@Transient - 映射忽略的字段,该字段不会保存到mongodb。

@PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据。

以下引用一个官方文档的例子:


Person类

@Document(collection="person")  
@CompoundIndexes({  
    @CompoundIndex(name = "age_idx", def = "{'lastName': 1, 'age': -1}")  
})  
public class Person<T extends Address> {  
  
  @Id  
  private String id;  
  @Indexed(unique = true)  
  private Integer ssn;  
  private String firstName;  
  @Indexed  
  private String lastName;  
  private Integer age;  
  @Transient  
  private Integer accountTotal;  
  @DBRef  
  private List<Account> accounts;  
  private T address;  
  
    
  public Person(Integer ssn) {  
    this.ssn = ssn;  
  }  
    
  @PersistenceConstructor  
  public Person(Integer ssn, String firstName, String lastName, Integer age, T address) {  
    this.ssn = ssn;  
    this.firstName = firstName;  
    this.lastName = lastName;  
    this.age = age;  
    this.address = address;  
  }  


Account类


@Document  
public class Account {  
  
  @Id  
  private ObjectId id;  
  private Float total;  
  
} 

spring data 4 mongoDB自动创建复合索引
spring data 4 mongodb 在domain上添加annation,自动创建复合索引时需要使用CompoundIndexes。

例如:
 
@CompoundIndex(name = "shop_index", def = "{platform : 1, shopId : 1}") 
程序也不会有编译错误或者执行错误,但是spring data不会建立任何索引, 
下面这样写才会启动时自动建立复合索引。 
 
@CompoundIndexes({ 
     @CompoundIndex(name = "shop_index", def = "{platform : 1, shopId : 1}") 
}) 
 

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 可以在application.properties文件添加以下配置: spring.data.mongodb.field-naming-strategy=org.springframework.data.mapping.model.CamelCaseAbbreviatingFieldNamingStrategy 这样就可以开启驼峰映射了。 ### 回答2: Spring Boot与MongoDB的驼峰映射可以通过以下步骤来实现。 首先,在Spring Boot的配置文件(application.properties或application.yml)添加以下属性: ``` spring.data.mongodb.field-naming-strategy=org.springframework.data.mapping.model.PropertyNameFieldNamingStrategy ``` 然后,创建一个自定义的映射配置类(如MongoConfig),用于设置MongoDB的驼峰映射。在该类,使用`@Configuration`注解标记该类为配置类,并使用`@EnableMongoAuditing`注解开启MongoDB的审计功能。 ```java @Configuration @EnableMongoAuditing public class MongoConfig { // 配置其他MongoDB相关的设置 } ``` 最后,在主应用程序类上使用`@Import`注解导入自定义的映射配置类。 ```java @SpringBootApplication @Import(MongoConfig.class) public class Application { // 主应用程序的入口方法 } ``` 通过以上步骤,Spring Boot与MongoDB就能够实现驼峰映射。在使用MongoDB时,实体类的属性命名采用驼峰命名规范,而字段名会自动转换为下划线分隔的命名规范。例如,一个名为"firstName"的属性会映射为"first_name"的字段名。 需要注意的是,如果你在实体类的属性上使用了注解(如`@JsonProperty`)来指定字段名称,那么MongoDB会使用注解指定的名称,而不是自动转换的名称。 ### 回答3: 在使用Spring Boot与MongoDB时,可以通过配置实现驼峰映射。 1. 首先,在Spring Boot的配置文件(如application.properties)添加以下配置项: ``` spring.data.mongodb.field-naming-strategy=org.springframework.data.mapping.model.CamelCaseAbbreviatingFieldNamingStrategy ``` 2. 这样配置之后,Spring Boot会使用`CamelCaseAbbreviatingFieldNamingStrategy`作为字段命名策略。这个策略将会把MongoDB字段名转换成驼峰格式。例如,MongoDB的`first_name`会被转换为Java对象的`firstName`。 3. 然后,在对应的Java对象(实体类,使用驼峰命名的属性名与MongoDB字段进行映射。例如: ```java @Document(collection = "users") public class User { @Id private String id; @Field("first_name") private String firstName; // 其他属性和方法 } ``` 在这个例子,`firstName`属性映射MongoDB的`first_name`字段。 4. 最后,当使用MongoDB的操作(如查询、更新)时,Spring Boot会自动使用驼峰映射来匹配对应的字段。 总之,通过在Spring Boot的配置文件配置字段命名策略,并在Java对象使用驼峰命名的属性来与MongoDB字段进行映射,可以实现Spring Boot和MongoDB之间的驼峰映射。这样可以方便地在Java代码直接使用驼峰命名的属性来进行操作,提高了开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值