【转】使用Spring Data来操作MongoDB(单实例)
MongoDB 是一个可扩展的、高性能的、开源的NoSQL数据库,跟传统的数据库不一样,MongoDB并不是将数据存储在表中,他将数据结构化为一个类似于JSON的文档中。这篇文章就是展示如何使用Java基于MongoDB和Spring Data创建一个CRUD应用。
Spring Data for MongoDB
Spring Data for MongoDB提供了一个类似于基于Sping编程模型的NoSQL数据存储。Spring Data for MongoDB提供了很多特性,它使很多MongoDB的Java开发者解放了很多。MongoTemplate helper类支持通用的Mongo操作。它整合了文档和POJO之间的对象映射。通常,他会转换数据库访问异常到Spring中的异常结构。使用起来非常的方便。
你可以点击这里下载。
五步使用Spring Data创建一个应用。
使用@Document注解指明一个领域对象将被持久化到MongoDB中。@Id注解identifies。
package com.orangeslate.naturestore.domain; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document public class Tree { @Id private String id; private String name; private String category; private int age; public Tree(String id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + ", category=" + category + "]"; } }
创建一个简单的接口。创建一个简单的接口,这个接口带有CRUD方法。这里我还带有createCollection方法和dropCollection方法。
package com.orangeslate.naturestore.repository; import java.util.List; import com.mongodb.WriteResult; public interface Repository<T> { public List<T> getAllObjects(); public void saveObject(T object); public T getObject(String id); public WriteResult updateObject(String id, String name); public void deleteObject(String id); public void createCollection(); public void dropCollection(); }
创建一个指定的领域对象CRUD的实现。
package com.orangeslate.naturestore.repository; import java.util.List; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import com.mongodb.WriteResult; import com.orangeslate.naturestore.domain.Tree; public class NatureRepositoryImpl implements Repository<Tree> { MongoTemplate mongoTemplate; public void setMongoTemplate(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } /** * Get all trees. */ public List<Tree> getAllObjects() { return mongoTemplate.findAll(Tree.class); } /** * Saves a {<span class="referer">@link</span> Tree}. */ public void saveObject(Tree tree) { mongoTemplate.insert(tree); } /** * Gets a {<span class="referer">@link</span> Tree} for a particular id. */ public Tree getObject(String id) { return mongoTemplate.findOne(new Query(Criteria.where("id").is(id)), Tree.class); } /** * Updates a {<span class="referer">@link</span> Tree} name for a particular id. */ public WriteResult updateObject(String id, String name) { return mongoTemplate.updateFirst( new Query(Criteria.where("id").is(id)), Update.update("name", name), Tree.class); } /** * Delete a {<span class="referer">@link</span> Tree} for a particular id. */ public void deleteObject(String id) { mongoTemplate .remove(new Query(Criteria.where("id").is(id)), Tree.class); } /** * Create a {<span class="referer">@link</span> Tree} collection if the collection does not already * exists */ public void createCollection() { if (!mongoTemplate.collectionExists(Tree.class)) { mongoTemplate.createCollection(Tree.class); } } /** * Drops the {<span class="referer">@link</span> Tree} collection if the collection does already exists */ public void dropCollection() { if (mongoTemplate.collectionExists(Tree.class)) { mongoTemplate.dropCollection(Tree.class); } } }