这里有新鲜出炉的 MongoDB 手册,程序狗速度看过来!
MongoDB 分布式文件存储的数据库
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 web 应用提供可扩展的高性能数据存储解决方案.
这篇文章主要给大家介绍了关于利用 Spring Data MongoDB 持久化文档数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起看看吧.
前言
本文主要给大家介绍了关于利用 Spring Data MongoDB 持久化文档数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧.
介绍
NoSQL:not only SQL, 非关系型数据
MongoDB 是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据
Spring Data MongoDB
1.Spring Data MongoDB 提供了三种方式在 Spring 应用中使用 MongoDB
通过注解实现对象 - 文档映射
使用 MongoTemplate 实现基于模板的数据库访问
自动化的运行时 Repository 生成功能
2. 启用 MongoDB
import java.util.Collection;
import java.util.LinkedHashSet;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
* Spring Data MongoDB 注解将 Java 类型映射为文档
*/
@Document // 这是一个文档
public class Order {
@Id // 指定 id
private String id;
@Field("client") // 覆盖默认的域名
private String customer;
private String type;
private Collection<Item> items = new LinkedHashSet<>();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Collection<Item> getItems() {
return items;
}
public void setItems(Collection<Item> items) {
this.items = items;
}
}
通过 @EnableJpaRepositories 注解启用 Spring Data 的自动化 JPA Repository 生成功能
@EnableMongoRepositories 为 MongoDB 实现了相同的功能
第一种方式:
第二种方式
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import com.mongodb.MongoClient;
/**
*
* Spring Data MongoDB 的配置
*
*/
@Configuration
@EnableMongoRepositories(basePackages="com.adagio.db") // 启用 MongoDB 的 Repository 功能
public class MongoConfig {
/**
* MongoTemplate Bean
* @param mongoDbFactory
* @return
*/
@Bean
public MongoOperations mongoTemplate(){
return new MongoTemplate(mongoDbFactory());
}
/**
* MongoDbFactory bean
* @return
*/
public MongoDbFactory mongoDbFactory(){
return new SimpleMongoDbFactory(mongoClient(), "com.adagio.db");
}
/**
* MongoClient bean
* @return
*/
public MongoClient mongoClient(){
return new MongoClient("localhost");
}
}
3. 为模型添加注解,实现 MongoDB 持久化
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
/**
*
* Spring Data MongoDB 的配置
* 扩展 AbstractMongoConfiguration
*
*/
@Configuration
@EnableMongoRepositories(basePackages="com.adagio.db") // 启用 MongoDB 的 Repository 功能
public class MongoConfig2 extends AbstractMongoConfiguration {
@Override
protected String getDatabaseName() {
return "OrdersDB"; // 指定数据库名
}
@Autowired
private Environment env;
@Override
public Mongo mongo() throws Exception {
// return new MongoClient(); // 创建 Mongo 客户端
// 如果 MongoDB 服务器运行在其他的机器上
// return new MongoClient("mongoServer");
// 如果 MongoDB 服务器监听的端口不是默认端口 27017
// return new MongoClient("mongoServer", 37017);
// 如果 MongoDB 服务器在生产配置上,启用了认证功能
MongoCredential credential = MongoCredential.createCredential(
env.getProperty("mongo.username") , "OrdersDB",
env.getProperty("mongo.password").toCharArray());
return new MongoClient(
new ServerAddress("localhost", 37017),
Arrays.asList(credential));
}
}
用于对象 - 文档映射的 Spring Data MongoDB 注解
@Document 标示映射到 MongoDB 文档上的领域对象 类似 JPA @Entity 注解
@Id 标示某个域为 ID 域
@DbRef 标示某个域要引用的其它的文档,这个文档有可能位于另一个数据库中
@Field 为文档域指定自定义的元数据
@Version 标示某个属性用作版域
注意:没有添加注解的属性,也会持久化为文档中域,除非设置瞬时态 (transient)
注意:Order.items 属性,不是 关联关系,会完全嵌入到 Order 中
4. 使用 MongoTemplate 访问 MongoDB
配置类中配置的 MongoTemplate bean, 将其注入到使用的地方
@Autowired MongoOperations mongo;
MongoOperations 是 MongoTemplate 所实现的接口
void save(Object objectToSave, String collectionName);
save 第一个参数是新创建的对象,第二个参数是要保存的文档存储的名称
5. 编写 MongoDB Repository
使用 Spring Data MongoDB 来创建 Repository
通过 @EnableMongoRepositories 注解启用 Spring Data MongoDB 的 Repository 功能
通过扩展 MongoRepository 接口,能够继承多个 CRUD 操作
6. 查询方式:
自定义查询
指定查询
混合定义查询
混合自定义的功能
// 自定义查询
List<Order> findByCustomer(String customer);
List<Order> getByCustomer(String customer);
List<Order> readByCustomer(String customer);
int countByCustomer(String customer);
List<Order> findByCustomerLike(String customer);
List<Order> findByCustomerAndType(String customer, String type);
List<Order> getByType(String type);
// 指定查询
@Query("{customer:'Chuck Wagon'}")
List<Order> findChucksOrders();
1. 首先,定义中间接口
2. 编写混合实现
import java.util.List;
public interface OrderOperations {
List<Order> findOrderByType(String t);
}
总结
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
public class OrderOperationsimpl implements OrderOperations {
@Autowired
private MongoOperations mongo; // 注入 MongoOperations
@Override
public List<Order> findOrderByType(String t) {
String type = t.equals("NET") ? "WEB" : t;
// 创建查询
Criteria where = Criteria.where("type").is(type);
Query query = Query.query(where);
// 执行查询
return mongo.find(query, Order.class);
}
}
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对 PHPERZ 的支持.
来源: http://www.phperz.com/article/18/0201/355145.html