??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲毛片在线看,国产福利一区二区精品秒拍,国产日韩精品一区二区三区在线http://www.aygfsteel.com/matuobasyouca/category/51647.html敏捷、分布式、ALMq程自动化、企业应用架?/description>zh-cnWed, 09 May 2012 05:58:35 GMTWed, 09 May 2012 05:58:35 GMT60MongoDB, Java 与对象关pL?/title><link>http://www.aygfsteel.com/matuobasyouca/archive/2012/05/09/377698.html</link><dc:creator>一酌散千忧</dc:creator><author>一酌散千忧</author><pubDate>Wed, 09 May 2012 05:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/matuobasyouca/archive/2012/05/09/377698.html</guid><wfw:comment>http://www.aygfsteel.com/matuobasyouca/comments/377698.html</wfw:comment><comments>http://www.aygfsteel.com/matuobasyouca/archive/2012/05/09/377698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/matuobasyouca/comments/commentRss/377698.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/matuobasyouca/services/trackbacks/377698.html</trackback:ping><description><![CDATA[<div> <h2><span style="font-size:14.5pt;font-family:Arial;color:black;letter-spacing:-.75pt">MongoDB</span><span><span style="font-size:14.5pt;color:black;letter-spacing:-.75pt">介绍</span></span><span></span></h2> <p><span>当今<span>NoSQL领域中有很多有力的竞争者通过多种方式来处理v量数据问题。其中重要的解决Ҏ(gu)之一是MongoDB。MongoDB是面向文档的q构化存储Ҏ(gu)Q用JSON格式来展现、查询和修改数据?/span></span></p> <p><span><span>MongoDB文档相当完备Q扩展规模与安装一L单。它提供冗余、切片、烦引以及map/reduce{概忉|持。MongoDB的开源社区非常大且非常活跃。MongoDB在很多大型品中被实际运用,如:Disney, Craigslist, Foursquare, Github 和SourceForge。MongoDB是一个开源项目,?/span></span><a ><span><span style="color:#0B59B2">10gen.com</span></span></a><span>建立q维护,该公司由<span>DoubleClick的前L行h员创立。同Ӟ10gen也提供了极好的商业支持与参与?/span></span></p> <h2><span><span><span style="font-size:14.5pt; font-family:Arial;color:black;letter-spacing:-.75pt">MongoDB </span></span></span><span><span style="font-size:14.5pt;color:black;letter-spacing:-.75pt">?/span></span><span><span><span style="font-size:14.5pt;font-family:Arial;color:black;letter-spacing: -.75pt"> NoSQL: </span></span></span><span><span><span style="font-size:14.5pt;color:black; letter-spacing:-.75pt">~陷与优?/span></span></span><span></span></h2> <p><span><span>MongoDB作ؓ一个可用NoSQLҎ(gu)h很多优势。我刚开始接触NoSQL数据库了解了一pdZJava的方案,q且׃大量的时间来弄懂什么是列家族,Hadoop与HBase的关p,ZooKeeper到底是什么。当我终于全部清楚之后,发现Cassandra与HBase实是对于NoSQL领域非常可靠、可信赖的解x案。但与其他的解决Ҏ(gu)相比QMongoDB让我在能够开始写代码之前Q不用理解那么多的概c?/span></span></p> <p><span>与其他Y件相|<span>MongoDB也存在缺陗经q一D|间用MongoDBQ我列Dl历qƈ需要注意的一些事情,我成?#8220;Gotchas”Q?/span></span></p> <ul type="disc"><li style=" text-align:left;"><span><span style="font-family:宋体;">不要按照关系型数据库来思考。这很明显,MongoDB</span></span><span><span style="font-family:宋体;">使得构徏和执行复杂查询变得非常容易。当实际使用的时候,你会主要x于效率问题(像我一P?/span></span></li><li style=" text-align:left;"><span><span>MongoDB</span></span><span><span style="font-family:宋体;">的烦引是二进制的树。如果你不是很熟(zhn)B-tree</span></span><span><span style="font-family:宋体;">Q可能需要了解一下。这些都涉及到构建符合提供查询条仉求的建立索引的方式?/span></span></li><li style=" text-align:left;"><span><span style="font-family:宋体;">心的设计烦引结构。这涉及C面提到的B-tree</span></span><span><span style="font-family:宋体;">。刚开始我的烦引包含文档中的很多字D,以防我会使用C们。不要犯同样的错误。我有一个很集合的索引Q大U?</span></span><span><span style="font-family:宋体;">千万记录Q增长到过17GB</span></span><span><span style="font-family:宋体;">的空_比集合本w还大。你应该不会惌索引一个包含成百上千个实体的列表字Dc?/span></span></li><li style=" text-align:left;"><span><span>MongoDB</span></span><span><span style="font-family:宋体;">采用了非常有意思的方式来实现NoSQL</span></span><span><span style="font-family:宋体;">Q采用BSON</span></span><span><span style="font-family:宋体;">作ؓ存储QJSON</span></span><span><span style="font-family:宋体;">作ؓ展示QJavaScript</span></span><span><span style="font-family:宋体;">用于理和Map/Reduce</span></span><span><span style="font-family:宋体;">。因此也引v了一些小问题比如</span></span><a ><span><span><span style="font-family: 宋体;color:#0B59B2">q个</span></span></span></a><span> </span><span><span style="font-family:宋体;">Q破坏了Number</span></span><span><span style="font-family:宋体;">和Long</span></span><span><span style="font-family:宋体;">的相{操作)Q在MongoDB</span></span><span><span style="font-family:宋体;">逐渐行之后Q可能会不断的展C出来?/span></span></li></ul> <p><span> </span></p> <h2><span><span><span style="font-size:14.5pt; font-family:Arial;color:black;letter-spacing:-.75pt">MongoDB, </span></span></span><span><span style="font-size:14.5pt;color:black;letter-spacing:-.75pt">命o行与驱动</span></span><span></span></h2> <p><span><span>MongoDB基本是用JavaScript客户端命令行E序来进行复杂Q务管理的Q如数据整合和简单信息处理,~程都是完全使用JavaScript语言来的。本文中Q我们会展示命o行的使用CZ。现在有大量的MongoDB客户端品提供,q且由MongoDBC֌来支持驱动。通常每种~程语言都有驱动Qƈ且所有流行的语言都有包括Q一些不那么行的也包含在内。这文章展CZ使用MongoDB的Java驱动Qƈ使用一个ORM库(MJORMQ与之进行比较?/span></span></p> <h2><span><span><span style="font-size:14.5pt;color:black; letter-spacing:-.75pt">介绍</span></span></span><span><span><span style="font-size:14.5pt; font-family:Arial;color:black;letter-spacing:-.75pt"> MJORM: MongoDB</span></span></span><span><span style="font-size:14.5pt;color:black;letter-spacing:-.75pt">?/span></span><span><span><span style="font-size:14.5pt;font-family:Arial;color:black;letter-spacing: -.75pt">ORM</span></span></span><span><span><span style="font-size:14.5pt;color:black; letter-spacing:-.75pt">Ҏ(gu)</span></span></span><span></span></h2> <p><span>在解决的众多有意思的问题中,最q?span>NoSQL数据存储在开发者中主要的问题趋势就是对象关pL。对象关pL就是将传统中保存在关系型数据库中的持久化数据映ؓ在应用程序中使用的对象。这使得~程语言使用h更加畅和自然?/span></span></p> <p><span><span>MongoDB面向文档的架构得它非常适合对象关系映射Q因为文档本w就是以对象形式存储的。可惜没有太多的MongoDB的Java对象关系映射库,但是q是有一些,?/span></span><a ><span><span><span style="color:#0B59B2">morphia-(A type-safe Java library for MongoDB)</span></span></span></a><span>Q?span> </span></span><a ><span><span style="color:#0B59B2">spring-data</span></span></a><span><span>(SpringData目的MongoDB实现)</span></span><span></span></p> <p><span>q些<span>ORM库大量用了注解Q因Z些原因对我不适合Q其中最重要的就是这些被注解的对象在多个目中的兼容性问题。这让我开始了mongo-Java-orm 或?"MJORM" (发音 me-yorm)目Q一个MongoDB的Java对象关系映射目。MJORM是在MIT许可之下Qƈ且在发布在了</span></span><a ><span><span><span style="color:#0B59B2">google code project</span></span></span></a><span>。项目采?span>maven构徏Qƈ且maven构g仓库托管于google code版本控制服务器。MJORM的最新可用发布版本ؓ0.15Q已l由一些项目用与生环境中?/span></span></p> <h2><span><span><span style="font-size:14.5pt;color:black; letter-spacing:-.75pt">开始?/span></span></span><span><span><span style="font-size:14.5pt; font-family:Arial;color:black;letter-spacing:-.75pt">ORM</span></span></span></h2> <h3><span><span><span style="font-size:11.5pt;line-height:173%;font-family:宋体;letter-spacing: -.75pt">加入</span></span></span><span><span><span style="font-size:11.5pt; line-height:173%;font-family:Arial;letter-spacing:-.75pt">MJORM </span></span></span><span><span><span style="font-size:11.5pt;line-height:173%;font-family:宋体;letter-spacing: -.75pt">?/span></span></span><span></span></h3> <p><span><span>Maven的用者首先应当在pom.xml中加入MJORM的maven仓库Q得MJORM构g可用?/span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"><repository></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <id>mjorm-webdav-maven-repo</id></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <name>mjorm maven repository</name></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <url>http://mongo-Java-orm.googlecode.com/svn/maven/repo/</url></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <layout>default</layout></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"></repository></span></span></span></pre></div> <p><span>然后加入依赖<span>:</span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"><dependency></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <groupId>com.googlecode</groupId></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <artifactId>mongo-Java-orm</artifactId></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <version>0.15</version></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"></dependency></span></span></span></pre></div> <p><span>q样可以在应用中引?span>MJORM代码。假如没有用mavenQ则你需要手动下载MJORM的pom.xml中列丄所有依赖?/span></span></p> <h3><span><span><span style="font-size:11.5pt;line-height:173%;font-family:宋体;letter-spacing: -.75pt">建立</span></span></span><span><span><span style="font-size:11.5pt; line-height:173%;font-family:Arial;letter-spacing:-.75pt"> POJOs</span></span></span></h3> <p><span>依赖已经导入Q可以开始编码了。我们从<span>POJO开?</span></span><span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">class Author {</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         private String firstName;</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         private String lastName;</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         // ... setters and getters ...</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">}</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">class Book {</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         private String id;</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         private String isbn;</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         private String title;</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         private String description;</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         private Author author;</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         // ... setters and getters ...</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">}</span></span></span></pre></div> <p><span>我们在这个对象模型中的描q是Q作者有<span>ID、姓和名Q书有ID、ISNB、标题、描q和作者?/span></span></p> <p><span>你可能注意到书的<span>id属性是一个字W串Q这是ؓ了适应MongoDB的对象IDcd。MongoDB的ID是一?2字节的二q制值显CZؓ一个十六进制的字符丌ӀMongoDB要求集合中的每个文档都必L一个唯一idQ但不要求一定要是ObjectId。目前MJORM只支持ObjectIdQƈ且显CZؓ字符丌Ӏ?/span></span></p> <p><span>你也可能注意C<span>Author没有id字段。这是因为Book是它的父文档Q因此不需要有id。记住,MongoDB只要求集合中的文档在根别的id?/span></span></p> <h3><span><span><span style="font-size:11.5pt;line-height:173%;font-family:宋体;letter-spacing: -.75pt">创徏</span></span></span><span><span><span style="font-size:11.5pt; line-height:173%;font-family:Arial;letter-spacing:-.75pt">XML</span></span></span><span><span><span style="font-size:11.5pt;line-height:173%;font-family:宋体;letter-spacing: -.75pt">映射文g</span></span></span><span></span></h3> <p><span>下一个步骤就是徏?span>XML映射文gQMJORM能够MongoDB文档转换为对象。我们ؓ每个文档创徏一个对象作为示范,无论所有的映射攑֜一个XML文g中还是分开都是可以的?/span></span></p> <p><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Author.mjorm.xml</span></code>:</span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"><?xml version="1.0"?></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"><descriptors></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <object class="Author"></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 <property name="firstName" /></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 <property name="lastName" /></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         </object></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"></descriptors></span></span></span></pre></div> <p><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Book.mjorm.xml</span></code>:</span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"><?xml version="1.0"?></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"><descriptors></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         <object class="Book"></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 <property name="id" id="true" auto="true" /></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 <property name="isbn" /></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 <property name="title" /></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 <property name="description" /></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 <property name="author" /></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         </object></span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222"></descriptors></span></span></span></pre></div> <p><span> </span></p> <p><span>q些映射文g能够很好的自解释?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">descriptors</span></code> 元素是根元素Q必d含在每个映射文g中。在它下面是</span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">object</span></code>元素定义了文档与之对应的cR?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Object</span></code></span><span><code><span style="font-size:9.0pt;Courier New";Courier New";Courier New"">包含?/span></code></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">property</span></code> 元素主要用于描述<span>POJO中的属性以及这些属性如何与MongoDB中的文档惛_应?/span></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">property</span></code> 元素臛_必须包含一?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">name</span></code> 属性,q个元素是POJO和MongoDB的文档中的属性名U?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">column</span></code> 属性则是可选的Q用于特定一个在MongoDB文档中的可选属性名U?/span></p> <p><span><code><span style="font-size:9.0pt;font-family:"Courier New"">property</span></code> 元素当中?span>id属性应该是对象的唯一识别。一个对象只能有一?/span></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">property</span></code> 元素包含<span>id属性?/span></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">auto</span></code> 的设|会使得MJORM在持久化时ؓ该属性自动生成一个倹{?/span></p> <p><span>可以?span>google code的MJORM目主页中查看XML映射文g的更多细节描q?/span></span></p> <h3><span><span><span style="font-size:11.5pt;line-height:173%;font-family:宋体;letter-spacing: -.75pt">整合</span></span></span><span><span><span style="font-size:11.5pt; line-height:173%;font-family:Arial;letter-spacing:-.75pt">POJO</span></span></span><span><span><span style="font-size:11.5pt;line-height:173%;font-family:宋体;letter-spacing: -.75pt">?/span></span></span><span><span><span style="font-size:11.5pt; line-height:173%;font-family:Arial;letter-spacing:-.75pt">XML</span></span></span></h3> <p><span>我们创徏了数据模型以及映文Ӟ使得<span>MJORM可以从MongoDB序列号以及反序列号POJO。我们可以进行一些有意思的事情了,首先打开MongoDB的链接:</span></span><span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">Mongo mongo = new Mongo(</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         new MongoURI("mongodb://localhost/mjormIsFun")); // 10gen driver</span></span></span></pre></div> <p><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Mongo</span></code> 对象是由10gen~写的Java驱动提供的。示例中q接了一个本地的MongoDB实例中的mjormIsFun数据库。接下来我们创徏MJORM </span><span><span><code><span style="font-size:9.0pt; font-family:"Courier New"">ObjectMapper </span></code>。目?/span></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">ObjectMapper </span></code>在MJORM中的唯一实现是</span><span><span><code><span style="font-size:9.0pt; font-family:"Courier New"">XmlDescriptorObjectMapper</span></code>Q用XMLl构描述信息。可能之后会增加Ҏ(gu)解或其他l构定义的支持?/span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">XmlDescriptorObjectMapper objectMapper = new XmlDescriptorObjectMapper();</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">mapper.addXmlObjectDescriptor(new File("Book.mjorm.xml"));</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">mapper.addXmlObjectDescriptor(new File("Author.mjorm.xml"));</span></span></span></pre></div> <p><span>建立好了</span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">XmlDescriptorObjectMapper</span></code> q且加入了映文件。接下来建立由MJORM提供?/span><span><span><code><span style="font-size:9.0pt; font-family:"Courier New"">MongoDao</span></code> 对象的实例?/span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">DB db = mongo.getDB("mjormIsFun"); // 10gen driver</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">MongoDao dao = new MongoDaoImpl(db, objectMapper);</span></span></span></pre></div> <p><span>首先我们要获?span>10gen驱动提供的DB对象实例。然后用DB?/span></span><span><span><code><span style="font-size:9.0pt; font-family:"Courier New"">ObjectMapper</span></code> 建立</span></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">MongoDao</span></code> 。我们准备开始持久化数据Q徏立一?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Book</span></code> 然后保存到MongoDB中?/span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">Book book = new Book();</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setIsbn("1594743061");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setTitle("MongoDB is fun");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setDescription("...");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book = dao.createObject("books", book);</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">System.out.println(book.getId()); // 4f96309f762dd76ece5a9595</span></span></span></pre></div> <p><span>首先建立</span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Book</span></code> 对象q且填|然后调用</span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">MongoDao</span></code> ?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New""> createObject</span></code> Ҏ(gu)Q将</span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Book</span></code> 对象传入"</span><span><span><code><span style="font-size:9.0pt; font-family:"Courier New"">books</span></code>" 的集合中。MJORM会按照之前的xml映射文g?/span></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">Book</span></code> 转换?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">DBObject</span></code> (q是10gen的Java驱动使用的基本类?Qƈ保存一个新的文档进"</span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">books</span></code>" 集合。MJORMq回Book对象Ӟid属性会被填充。请注意QMongoDB默认是不需要在使用前徏立数据库或集合的Q系l会在需要时自动创徏Q这可能会造成某些困扰。在MongoDB的命令行中查看Book对象大概如下Q?/span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">> db.books.find({_id:ObjectId("4f96309f762dd76ece5a9595")}).pretty()</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">{</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "_id":          ObjectId("4f96309f762dd76ece5a9595"),</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "isbn":         "1594743061",</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "title":        "MongoDB is fun",</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "description": "..."</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">}</span></span></span></pre></div> <p><span> </span></p> <p><span>我们来看看假如不?span>MJORM而直接?0gen的Java驱动Q如何?/span></span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">createObject</span></code> Ҏ(gu)Q?/span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">Book book = new Book();</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setIsbn("1594743061");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setTitle("MongoDB is fun");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setDescription("...");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">DBObject bookObj = BasicDBObjectBuilder.start()</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .add("isbn",              book.getIsbn())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .add("title",             book.getTitle())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .add("description",       book.getDescription())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .get();</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">// 'db' is our DB object from earlier</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">DBCollection col = db.getCollection("books");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">col.insert(bookObj);</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">ObjectId id = ObjectId.class.cast(bookObj.get("_id"));</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">System.out.println(id.toStringMongod()); // 4f96309f762dd76ece5a9595</span></span></span></pre></div> <p><span> </span></p> <p><span>下面q行对象的查?span>:</span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">Book book = dao.readObject("books", "4f96309f762dd76ece5a9595", Book.class);</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">System.out.println(book.getTitle()); // "MongoDB is fun"</span></span></span></pre></div> <p><span><code><span style="font-size:9.0pt;font-family:"Courier New"">readObject</span></code> Ҏ(gu)Ҏ(gu)l定文档的id从指定的集合中读取文档,转换为对象(再次使用映射文gQƈq回?/span></p> <p><span>敏锐的读者会注意?span>Bookq没有指定AuthorQ仍然保存了。这归咎于MongoDB的结构不敏感的特性。我们不能要求集合中的文档包含所有属性(id属性是必须的)Q所有在MongoDB中没有Author的Book是可以的。我们现在ؓBookd一个Authorq且更新一下:</span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">Author author = new Author();</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">author.setFirstName("Brian");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">author.setLastName("Dilley");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setAuthor(author);</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">dao.updateObject("books", "4f96309f762dd76ece5a9595", book);</span></span></span></pre></div> <p><span>现在<span>Book包含了AuthorQƈ且在MongoDB中持久化了。现在在命o行查看了BookQ?/span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">> db.books.find({_id:ObjectId("4f96309f762dd76ece5a9595")}).pretty()</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">{</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "_id":          ObjectId("4f96309f762dd76ece5a9595"),</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "isbn":         "1594743061",</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "title":        "MongoDB is fun",</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "description": "..."</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         "author": {</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">             "firstName": "Brian",</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">             "lastName": "Dilley"</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         }</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">}</span></span></span></pre></div> <p><span>可以看到持久化的<span>Book中已l包含了author。不使用MJORM来操作一遍:</span></span></p> <div style="border:solid #EFEFEF 1.5pt;padding: 0cm 0cm 4.0pt 0cm;background:#FAFAFA"><pre style="line-height:11.25pt; background:#FAFAFA;border:none;padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">Author author = new Author();</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">author.setFirstName("Brian");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">author.setLastName("Dilley");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">book.setAuthor(author);</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">DBObject bookObj = BasicDBObjectBuilder.start()</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .add("isbn",              book.getIsbn())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .add("title",             book.getTitle())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .add("description",       book.getDescription())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .push("author")</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 .add("firstName",         author.getFirstName())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 .add("lastName", author.getLastName())</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">                 .pop()</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">         .get();</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">DBCollection col = db.getCollection("books");</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span><span><span style="font-size:9.0pt; font-family:"Courier New";color:#222222">col.update(new BasicDBObject("_id", bookObj.get("_id")), bookObj);</span></span></span></pre><pre style="line-height:11.25pt;background:#FAFAFA;border:none; padding:0cm;"><span> </span></pre></div> <p><span> </span></p> <p><span>对于</span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">MongoDao</span></code> Ҏ(gu)的深入讨论已l超Z本文的范围。对于将MJORM有兴用于实际项目中的用户强烈徏议了解一下MJORM目提供的相x档,或?/span><span><code><span style="font-size:9.0pt;font-family:"Courier New"">MongoDao</span></code> 接口提供的相关用法?/span></p> <h2><span><span><span style="font-size:14.5pt;color:black; letter-spacing:-.75pt">ȝ</span></span></span><span></span></h2> <p><span>希望q篇文章?span>MongoDB和MJORM的亮Ҏ(gu)所展示。MongDB是一个优U的呃NoSQL数据存储Q有着大量优秀的特性,会是NoSQL市场中长期竞争者。若你会在一个Java目中用MongoDBQ希望你也能够考虑使用MJORM作ؓ你的ORM框架。十分欢q大家提交特性需求、错误异常报告、文档和源码修正?/span></span></p> <p style="line-height:12.0pt;background:white"><span> </span></p> <h2><span><span style="font-size:14.5pt;color:black;letter-spacing:-.75pt">作?/span></span><span><span><span style="font-size:14.5pt;font-family:Arial;color:black;letter-spacing: -.75pt"> Bio</span></span></span></h2> <p style="line-height:12.0pt;background:white"><span><span><strong><span style="font-size:10.0pt; font-family:Tahoma;color:black">Brian Dilley</span></strong></span></span><span><span> </span></span><span><span><span style="font-size:10.0pt;color:black">是一个经验丰富的高工程师以及项目领|?/span></span></span><span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">Java/Java EE /Spring Framework/Linux</span></span></span><span><span style="font-size:10.0pt;color:black">内部l构理解和管理有着过</span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">13</span></span><span><span style="font-size:10.0pt;color:black">q的l验?/span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">Brian</span></span><span><span style="font-size:10.0pt;color:black">对于创业公司有很多经验,推向市场Q构?/span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">/</span></span><span><span style="font-size:10.0pt;color:black">l护产品{。他?/span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">Iaas</span></span><span><span style="font-size:10.0pt;color:black">?/span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">cloud</span></span><span><span style="font-size:10.0pt;color:black">?/span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">PHP</span></span><span><span style="font-size:10.0pt;color:black">?/span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">Linux</span></span><span><span style="font-size:10.0pt;color:black">的专Ӟ熟?zhn)产品的采购、安装及配置定义Q以及公司的软硬件架构包括负载均衡、数据库、微博等。可?/span></span><span><span style="font-size:10.0pt;font-family:Tahoma;color:black">follow Brian</span></span><span><span style="font-size:10.0pt;color:black">?/span></span><span><span> </span></span><a ><span><span><span style="font-size:10.0pt; font-family:Tahoma;color:#0B59B2">Twitter</span></span></span></a><span> </span><span><span style="font-size:10.0pt;color:black">?/span></span><span></span></p> </div><img src ="http://www.aygfsteel.com/matuobasyouca/aggbug/377698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/matuobasyouca/" target="_blank">一酌散千忧</a> 2012-05-09 13:46 <a href="http://www.aygfsteel.com/matuobasyouca/archive/2012/05/09/377698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ij</a>| <a href="http://" target="_blank">ҵ</a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͼľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ְ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӣ</a>| <a href="http://" target="_blank">ī</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">֣</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ҷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">Ұ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ԭ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>