版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、mongodb的orm框架morphia技术pojo类注解详解1、entity如果你想通过morphia把你的对象保存到mongo屮,你首先要做的是使用entity注解 你的类:import com.google.code.morphia.annotations.entity;entitypublic class hotel a、名称和构造方法你可以为你的mongodb dbconllection设置名称。必须有一个无参的默认构造方法。entity("hotelsh)public class hotel public hotel() 注意:你的默认构造方法不-定是public,也可以
2、是protected或private。b、在文档中的类名和怎样废弃使用类名在entity注解中提供了一个可选的参数用來标识是否在文档中保存类名。entity(value="hotels", noclassnamestored=true)public class hotel public hotel() 默认会在文档中保存类名。为什么要使用他哪?保存类名的主要目的是,当你在同一个链接中保存不同的实体对象, 但是你想作为他们的基类或超类來读収。如:entity(hanimals”)abstract class animal string name;entity(,animals
3、h) cat extends animal .entity(hanimals,1) dog extends animal . /and then performing the following querylist<anima卜 animals = ds.createquery(animal.class).aslist();正如你看到的,如果不在文档中保存类名,morphia将不能正确的识别创建那个类。 如果你在一个链接屮只保存唯一的实体类型并且你还关心你的数据库大小,在你的 entity注解上加上noclassnamestored=true参数将会是安全的。2、ld被entity注解的
4、类必须有一个唯一的ld值;这些值被保存在mongodb数据库的“id” 属性中,这是一个必须的位索引。像在hotel类中:entity public class hotel如上所示:被ld注解的id是objectld类型的,这样,你就不用担心id的生成问题了, mongo会自动为你生成一个唯一的新的objectld对象(就像mysql中的autojncrement类 型的id)。如果你想使用其他的类型作为id,那么在你保存数据时就必须手动为id赋值。3、1 ndexed此注解是为某个字段申请一个索引。当datastore.ensurelndexesf)方法被调用时 这些 索引就会被申请更多如下
5、:把创ndexed注解在你想让mongodb创建索引的属性上。entitypublic class product ldprivate objectld id;lndexed(value=lndexdirection.asc, name=,upch, unique=true, dropdups=true) private string upcsymbol;参数说明如下:value:表名这个索引的方向;indexdirection.asc(升序),lndexdirection.desc(降序),lndexdirection.both(两者);默认为升序。name:被创建的索引的名称; mongo
6、db默认创建的索引名的格式为 (keyl_l/-l_key2_l)ounique:创建一个唯一索引,当创建唯一索引后,当在此字段插入相同的值时将会报错。 true:为唯一索引;false:不是唯一索引;默认为:false«dropdups:此参数表明,当为某个字段创建唯一索引吋,删除其他相同值的记录。只保 留笫一条记录。true:删除重复;false:不删除重复(当有重复值时唯一索引创建失败);默认 为 false。向mongodb申请创建索引datastore.ensurelndexes()s要被调用。这个方法应该在你已 经使用morphia注册了你的实体类后被调用。他将会异步创建
7、你的所有索引。这个动作也 许会在你每次启动你的应用时都被执行。注意:当在一个存在的系统上,创建已经存在的索引时,将不会花费任何事件(也不会 做任何事情)。morphia m =.datastore ds =.m.map(product.class);ds.ensurelndexes(); 为被lndexed注解的所有字段创建索引。你可以在 /displav/docs/lndexes 了解更多关于 mongodb 索 引的信息。4、embedded你可以创建一个类被嵌套在实体类屮,在这种情况下我们可以使用embedded注解。 例如,在hotel类中 可
8、能会有一个addressoaddress是hotel不可分割的一部分,没有id,并且不会被存储在分开的collection中。 在这种情况下我们可以使用(©embedded注解address. entity public class hotel ldprivate objectld id;(©embeddedprivate address address; embeddedpublic class address 正如你所看到的,被(©embedded注解的类没有ld。这是因为他们经常被嵌套在其他 类中。事实上,被(©embedded注解的类也不允许有l
9、d。5、transient 和卩0卩巳11丫一般情况下,保存原始和基本类型的属性到mongo中,你不必为他们添加任何注解: private int mylnt;private date mydate;private list<string> mystrings;private string stringarray; 默认情况卜,morphia将会试着映射所有支持的基本和原始类型到mongo,包括这些类 型的数组。mongodb仅仅有以下数据类型:lnteger(32位有符号值)long(64有符号值)double(64 位 ieee745 浮点值)string (字符串)这里有些有
10、价值的转换:floatbytedoubleintshortcharintstring并且,依赖于你的模型中存在的类型和数据库将会试着自动为你转换。我的意思是,因 为在mongodb数据库屮只存在三种数字类型(32/64有符号,64位fp)这将相当容易转换。 下面的列表为当前什么样的基本和原始类型可以被保存:enum(在mongo中作为string保存)java.util.date(在mongo中保存为从新纪元utc的毫秒数)java.util.localef作为字符串保存)com.m on godb.dbrefcom.m on godb.objectld正如我我们上面的例子所示,morphia
11、还支持java.util.list, java.util.set和java.util.map容 器,和任何支持的原始类型的数组。如果你想把一个属性排除映射到mongo中,你可以使用(©transient注解:import com.google.code.morphia.annotations.transient;tra nsientprivate int mytransientlnt; 默认情况下,morphia把属性名作为mongo中的字段名。这个可以通过卩0卩011丫注解 进行修改,指定一个名称。import com.google.code.morphia.annotations
12、.property; property(,myjnteger")private int mylnt; 在 mongodb 中为 my_integer6、referencemongo在同一个数据库引用一个文档(对彖)到另一个。考虑以下类:public class blogentry private string title;private date publishdate;private string body;private author author;/ getters and setters public class author private string user name
13、;private string fullname;private string emailaddress;/ getters and setters这里的一个问题就是:我们如果注解blogentry中的author属性?当然,我们可以是用 (©embedded注解,但是这样就没什么意义了,因为在每个blogentry实例中都保存一个author 对象。我们反而想在多个blog实例屮引用一个单独的author文档(对象)在mongo屮。在这种情况下我们使用reference注解import com.google.code.morphia.annotations.entity;impor
14、t com.google.code.morphia.annotations.embedded;import com.google.code.morphia.annotations.id;import com.google.code.morphia.annotations.referenee;import com.google.code.morphia.annotations.property; entitypublic class blogentry ldprivate objectld id;private string title;private date publishdate;priv
15、ate string body; ref ere neeprivate author author;/ getters and setters entitypublic class author ldprivate objectld id;private string user name;private string fullname;private string emailaddress;/ getters and setters当使用引用时有很重要的一点我们必须提及:被引用的对像在被引用之前必须己经保存 到了 mongodb数据库中。这个真的的意思是。就像上面的例子,在你创建一个blogentry对象之前,一个author 已经被保存到了数据库中。默认情况下,morphia使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学语文一年级上册《ie üe er》说课稿
- 企业物流管理学习通超星期末考试答案章节答案2024年
- 计算机辅助设计(一)学习通超星期末考试答案章节答案2024年
- 分离可回收材料用机器市场需求与消费特点分析
- 工业用真空蒸馏塔市场需求与消费特点分析
- 历史遗址木栈道修复方案
- XX县实施新企业社交媒体营销方案
- 电子产品配送与现场调试方案
- 克朗棋产业运行及前景预测报告
- 太阳能集热器市场发展预测和趋势分析
- 2023腿式机器人性能及试验方法
- 乳胶漆墙面施工方案范本
- 浙江省嘉兴市2023年八年级上学期期中数学试卷(附答案)
- Scratch在小学数学中的应用-以《长方形的周长》为例
- 化工企业停工方案范本
- 网络传播法规(自考14339)复习必备题库(含答案)
- 民法典合同编解读之合伙合同
- 高中英语学习情况问卷调查表及调查报告
- 求雨后姐弟小故事
- GRR计算公式表格
- 梅毒诊断标准
评论
0/150
提交评论