设为首页 收藏本站
查看: 826|回复: 0

[经验分享] MongoDB Spring集成Mongo

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-10 14:22:27 | 显示全部楼层 |阅读模式
  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中一个集成mongodb的项目,首先在maven中添加对它的依赖





<!-- mongodb spring -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
  

Spring Data创建一个应用
  1、使用@Document注解指明一个领域对象将被持久化到MongoDB中。@Id注解identifies
  

package com.spring.momgo;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* @author LiangGe
* @Document - 把一个java类声明为mongodb的文档
*/
@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 &quot;Person [id=&quot; + id + &quot;, name=&quot; + name + &quot;, age=&quot; + age
+ &quot;, category=&quot; + category + &quot;]&quot;;
}
}
  
  



2、创建一个简单的接口。创建一个简单的接口,这个接口带有CRUD方法。这里我还带有createCollection方法和dropCollection方法  

package com.spring.momgo;
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();
}

3、创建一个指定的领域对象CRUD的实现  
  

package com.spring.momgo;
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;
public class TreeManRepositoryImpl implements Repository<TreeMan>{
MongoTemplate mongoTemplate;
public void setMongoTemplate(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
@Override
public List<TreeMan> getAllObjects() {
// TODO Auto-generated method stub
return mongoTemplate.findAll(TreeMan.class);
}
@Override
public void saveObject(TreeMan treeMan) {
// TODO Auto-generated method stub
mongoTemplate.insert(treeMan);
}
@Override
public TreeMan getObject(String id) {
// TODO Auto-generated method stub
return mongoTemplate.findOne(new Query(Criteria.where(&quot;id&quot;).is(id)),
TreeMan.class);
}
@Override
public WriteResult updateObject(String id, String name) {
// TODO Auto-generated method stub
return mongoTemplate.updateFirst(
new Query(Criteria.where(&quot;id&quot;).is(id)),
Update.update(&quot;name&quot;, name), TreeMan.class);
}
@Override
public void deleteObject(String id) {
// TODO Auto-generated method stub
mongoTemplate
.remove(new Query(Criteria.where(&quot;id&quot;).is(id)), TreeMan.class);
}
@Override
public void createCollection() {
// TODO Auto-generated method stub
if (!mongoTemplate.collectionExists(TreeMan.class)) {
mongoTemplate.createCollection(TreeMan.class);
}
}
@Override
public void dropCollection() {
// TODO Auto-generated method stub
if (mongoTemplate.collectionExists(TreeMan.class)) {
mongoTemplate.dropCollection(TreeMan.class);
}
}
}


4、创建Spring context。将所有spring beans和mongodb对象都声明在Spring context文件中,这里创建的是spring-mongo.xml文件。注意到我们并没有创建一个叫做&quot;springmongo&quot;的数据库。在第一次存储数据的时候MongoDB将会为我们创建这个数据库  
  

<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>
<beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot; xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
xmlns:beans=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
xmlns:mongo=&quot;http://www.springframework.org/schema/data/mongo&quot;
xsi:schemaLocation=&quot;
http://www.springframework.org/schema/aop   
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd   
http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   
http://www.springframework.org/schema/context   
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd &quot;>
<!-- Activate annotation configured components -->
<context:annotation-config />
<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
<bean id=&quot;mongo&quot; class=&quot;org.springframework.data.mongodb.core.MongoFactoryBean&quot;>
<property name=&quot;host&quot; value=&quot;localhost&quot; />
<property name=&quot;port&quot; value=&quot;27017&quot; />
</bean>
<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
<bean id=&quot;mongoTemplate&quot; class=&quot;org.springframework.data.mongodb.core.MongoTemplate&quot;>
<constructor-arg name=&quot;mongo&quot; ref=&quot;mongo&quot; />
<constructor-arg name=&quot;databaseName&quot; value=&quot;SpringMongo&quot; />
</bean>
<bean id=&quot;treeRepositoryImpl&quot; class=&quot;com.spring.momgo.TreeRepositoryImpl&quot;>
<property name=&quot;mongoTemplate&quot; ref=&quot;mongoTemplate&quot; />
</bean>
<bean id=&quot;treeManRepositoryImpl&quot; class=&quot;com.spring.momgo.TreeManRepositoryImpl&quot;>
<property name=&quot;mongoTemplate&quot; ref=&quot;mongoTemplate&quot; />
</bean>
<!-- Scan components for annotations within the configured package -->
<context:component-scan base-package=&quot;com.spring.momgo&quot;>
<context:exclude-filter type=&quot;annotation&quot;
expression=&quot;org.springframework.context.annotation.Configuration&quot; />
</context:component-scan>
</beans>

5、创建一个测试类。这里创建了一个测试类,并通过ClassPathXmlApplicationContext来初始化  
  

package com.spring.momgo;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MongoTest {
public static void main(String[] args) {
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
&quot;spring-mongo.xml&quot;);
// getBean(),NatureRepositoryImpl instance
Repository repository = context.getBean(TreeRepositoryImpl.class);
// cleanup collection before insertion
repository.dropCollection();
// create collection
repository.createCollection();
// save apple tree doc
repository.saveObject(new Tree(&quot;1&quot;, &quot;Apple Tree&quot;, 5));
System.out.println(&quot;1. &quot; + repository.getAllObjects());
repository.saveObject(new Tree(&quot;2&quot;, &quot;Orange Tree&quot;, 3));
System.out.println(&quot;2. &quot; + repository.getAllObjects());
System.out.println(&quot;Tree with id 1&quot; + repository.getObject(&quot;1&quot;));
repository.updateObject(&quot;1&quot;, &quot;Peach Tree&quot;);
System.out.println(&quot;3. &quot; + repository.getAllObjects());
repository.deleteObject(&quot;2&quot;);
System.out.println(&quot;4. &quot; + repository.getAllObjects());
}
}




  

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-137610-1-1.html 上篇帖子: (转)mongodb 解决 couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.j 下篇帖子: ubuntu mongodb报错:mongo
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表