热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringData如何集成MongoDB访问

SpringSource吭哧哼哧,从2011年2月开始到2011年2月终于把spring-data-mongo-1.0.1给Release出来了。从1.0.0.M1到1.0.0.M3的版本叫做SpringDataDocument。1.0.0.M4开始更名为SpringDataMongoDB1.0.0M4,不过官网并没有

Spring Source吭哧哼哧,从2011年2月开始到2011年2月终于把spring-data-mongo-1.0.1给Release出来了。从1.0.0.M1到1.0.0.M3的版本叫做Spring Data Document。1.0.0.M4开始更名为Spring Data MongoDB 1.0.0 M4,不过官网并没有特别说明,乍一看有点莫名其妙,尤其是MongoTemplate从org.springframework.data.document.mongodb移动到org.springframework.data.mongodb.core,官网的HelloWorldExample却还是用org.springframework.data.document.mongodb做例子,实在造成不少误导。

  

  Spring Data Mongo需要依赖Spring Framework,因此,首先需要下载Spring Framework的jar包,新建一个Web工程,将Spring Framework的jar包引入。本文引用了如下组件:

   

其中,除了Spring的几个组件包以外,还引用了MongoDB的Driver:mongo-2.7.3.jar;DWR3.0的组件dwr.jar;spring-data-mongdb-1.0.1.RELEASE.jar以及Spring Data的公共组件spring-data-commons-core-1.2.1.RELEASE.jar。需要说明的是,本文所使用的Spring Data Mongo的组件版本,需要采用Spring Framework 3.0.7及以上版本,否则程序运行会报错。

 

引入上述组件后,需要修改Spring的配置文件ApplicationContext.xml文件,引入Spring Data Mongo的命名空间,并定义MongoDB的服务器地址和端口号,初始化MongoTemplate类,代码如下

 1 
 2 
 3   4         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5         xmlns:cOntext="http://www.springframework.org/schema/context"
 6         xmlns:mOngo="http://www.springframework.org/schema/data/mongo"
 7         xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
 8         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 9             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
10             http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
11             http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">
12             
13     
14 
15     
16 
17     
18     
19         
20             
21                 classpath:server.properties
22             

23         
24     
25     
26     
27     
28         
29         
30     
31     
32     
33     
34        
35        
36        
37     
38     
39     
40         
41     

42     
43     
44 

 下面开始一个简单的样例。首先,定义一个HelloKitty bean

 1 /**
 2  * 
 3  */
 4 package com.ics.bean;
 5 
 6 import org.directwebremoting.annotations.DataTransferObject;
 7 
 8 @DataTransferObject
 9 public class HelloKitty
10 {
11     private String id;
12     
13     private String name;
14     
15     @Override
16     public String toString()
17     {
18         return "HelloKitty[" + "id=" + id + ", name=" + name + "]";
19     }
20 
21     public String getId()
22     {
23         return id;
24     }
25 
26     public void setId(String id)
27     {
28         this.id = id;
29     }
30 
31     public String getName()
32     {
33         return name;
34     }
35 
36     public void setName(String name)
37     {
38         this.name = name;
39     }
40 }

定义数据访问类,定义两个方法,一个用于在集合中插入一条记录,另一个根据name属性查询一条记录

 1 /**
 2  * 
 3  */
 4 package com.ics.dao;
 5 
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.data.mongodb.core.MongoTemplate;
 8 import org.springframework.data.mongodb.core.query.Criteria;
 9 import org.springframework.data.mongodb.core.query.Query;
10 
11 import com.ics.bean.HelloKitty;
12 
13 
14 public class HelloKittyDAO
15 {
16     /**
17      * 定义集合名称
18      */
19     private static String HELLOKITTY = "HelloKitty";
20     
21     /**
22      * 操作MongoDB的对象
23      */
24     @Autowired
25     private MongoTemplate mongoTemplate;
26     
27     
28     public void createHelloKitty(HelloKitty hello)
29     {
30         mongoTemplate.insert(hello, HELLOKITTY);
31     }
32     
33     public HelloKitty getHelloKittyByName(String name)
34     {
35         return mongoTemplate.findOne(new Query(Criteria.where("name").is(name)), HelloKitty.class, HELLOKITTY);
36     }
37 }

简单的Service方法

 1 /**
 2  * 
 3  */
 4 package com.ics.service;
 5 
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 
 8 import com.ics.bean.HelloKitty;
 9 import com.ics.dao.HelloKittyDAO;
10 
11 public class HelloKittyService
12 {
13     @Autowired
14     private HelloKittyDAO helloKittyDAO;
15     
16     public String createHelloKitty(HelloKitty hello)
17     {
18         helloKittyDAO.createHelloKitty(hello);
19         
20         HelloKitty ret = helloKittyDAO.getHelloKittyByName(hello.getName());
21         
22         return ret == null ? "" : ret.getId();
23     }
24 }

通过DWR发布出去

 1 /**
 2  * 
 3  */
 4 package com.ics.web.dwr;
 5 
 6 import org.directwebremoting.annotations.RemoteMethod;
 7 import org.directwebremoting.annotations.RemoteProxy;
 8 import org.springframework.beans.factory.annotation.Autowired;
 9 
10 import com.ics.bean.HelloKitty;
11 import com.ics.service.HelloKittyService;
12 
13 @RemoteProxy(name = "HelloKittyManage")
14 public class HelloKittyManage
15 {
16  @Autowired
17  private HelloKittyService helloKittyService;
18  
19  @RemoteMethod
20  public String sayHello(HelloKitty hello)
21  {
22   return "hello " + helloKittyService.createHelloKitty(hello);
23  }
24 }

 最后,在index.html访问这个DWR方法

 1 
 2     
 3         
 4         
 5         
 6         
 7         
14     
15     
16         

 Spring 3.X with DWR


17         Retrieve test data

18     
19 

启动MongoDB服务器,运行样例程序。

在页面点击“Retrieve test data”,将会弹出“Hello 4f9fe5112d0182c5bc0a6c39”字样,其中“4f9fe5112d0182c5bc0a6c39”就是刚刚插入MongoDB中自动生成的ID。So easy,:)


推荐阅读
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 在尝试使用 Android 发送 SOAP 请求时遇到错误,服务器返回 '无法处理请求' 的信息,并指出某个值不能为 null。本文探讨了可能的原因及解决方案。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 微信小程序开发指南:创建动态电影选座界面
    本文详细介绍如何在微信小程序中实现一个动态且可视化的电影选座组件,提高用户体验。通过合理的布局和交互设计,使用户能够轻松选择心仪的座位。 ... [详细]
author-avatar
whucad
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有