1 Spring data MongoDB

Spring Data MongoDB提供了三种方式在Spring应用中使用MongoDB:

  • 通过注解实现对象-文档映射;
  • 使用MongoTemplate实现基于模板的数据库访问;
  • 自动化的运行时Repository生成功能。

1 Spring Data MongoDB提供了XML配置的方案

2 为模型添加注解,实现MongoDB持久化(对象-文档映射)

2.1 用于对象-文档映射的Spring Data MongoDB注解

2.2 Spring Data MongoDB注解将Java类型映射为文档

我们可以看到,Order类添加了@Document注解,这样它就能够借助MongoTemplate或自动生成的Repository进行持久化。其id属性上使用了@Id注解,用来指定它作为文档的 ID。除此之外,customer属性上使用了@Field注解,这样的话,当文档持久化的时候customer属性将会映射为名为client的域。

注意,其他的属性并没有添加注解。除非将属性设置为瞬时态(transient)的,否则Java对象中所有的域都会持久化为文档中的域。并且如果我们不使用@Field注解进行设置的话,那么文档域中的名字将会与对应的Java属性相同。

3 使用MongoTemplate访问MongoDB(基于模板的数据库访问

我们已经在配置类中配置了MongoTemplate bean。接下来,需要做的就是将其注入到使用它的地方:

注意,在这里我们将MongoTemplate注入到一个类型为MongoOperations的属性中。MongoOperations是MongoTemplate所实现的接口,不使用具体实现是一个好的做法,尤其是在注入的时候。MongoOperations暴露了多个使用MongoDB文档数据库的方法。

void save(Object objectToSave, String collectionName);

WriteResult remove(Object object);

WriteResult updateFirst(Query query, Update update, String collectionName);

(1)根据id查询

<T> T findById(Object id, Class<T> entityClass);

(2)构造Query对象并将其传递给find()方法

<T> List<T> find(Query query, Class<T> entityClass);

使用Query类中的静态方法query()构造Query对象

public class Query {	
      
     public static Query query(CriteriaDefinition criteriaDefinition) {
            return new Query(criteriaDefinition);
     }
}

query方法传递一个Criteria对象,Criteria实现了CriteriaDefinition

public class Criteria implements CriteriaDefinition {
   
}

Criteria中的方法

通常来讲,我们会将MongoOperations注入到自己设计的Repository类中,并使用它的操作来实现Repository方法。但是,如果你不愿意编写Repository的话,那么Spring Data MongoDB能够自动在运行时生成Repository实现。

4 编写MongoDB Repository

任何扩展Repository的接口将会在运行时自动生成实现。

尽管OrderRepository本身并没有定义任何方法,但是它会继承多个方法,包括对Order 文档进行CRUD操作的方法。

4.1 MongoRepository自带的方法

4.2 添加自定义的查询方法

Spring Data JPA支持方法命名约定,它能够帮助Spring Data为遵循约定的方法自动生成实现。实际上,相同的约定也适用于Spring Data MongoDB。这意味着我们可以为OrderRepository添加自定义的方法:

这里我们有四个新的方法,每一个都是查找满足特定条件的Order对象。其中第一个用来获   取customer属性等于传入值的Order列表;第二个方法获取customer属性like传入值的Order列表;接下来方法会返回customer和type属性等于传入值的Order对象;最后一个方法与前一个类似,只不过customer在对比的时候使用的是like而不是equals。其中,find这个查询动词并不是固定的。如果喜欢的话,我们还可以使用get作为查询动词:

4.3 指定查询

@Query注解可以为Repository方法指定自定义的查询。@Query能够像在JPA中那样用在MongoDB上。唯一的区别在于针对MongoDB时,@Query会接受一个JSON查询,而不是JPA查询。例如,假设我们想要查询给定类型的订单,并且要求customer的名称为“ChuckWagon”。OrderRepository中如下的方法声明能够完成所需的任务:

@Query中给定的JSON将会与所有的Order文档进行匹配,并返回匹配的文档。需要注意的是,type属性映射成了“?0”,这表明type属性应该与查询方法的第零个参数相等。如果有多个参数的话,它们可以通过“?1”、“?2”等方式进行引用。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值