前天完成ORM中有个小问题,我忽略了,那就是多对一,按我的立即多对一就是一对多,但在多对多的情况下就不是这样了,因为当你做链接时会发现中间的数据表会无法真正融入整个对象集合,原因就是其中有多对一的关系,而我前天自己在实施时的配置也有点问题,居然导致了错误的方法变成了正确的结果,原因在于那天数据的id正好都是1 2 3 4 5 6所以错误的表连接居然恰好变成了正确的结果,发现这个问题之后我迅速的增加了一种外联模式,终于解决了这个巨大的bug。
现在看来ORM的好处不仅是使用方便,更多的是你会对数据表的设计和范式有一个非常深刻的认识,因为在ORM下是不允许错误的数据库范式设计的,我个人体验下来,在ORM下使用,必须达到第二范式标准,如果想完全使用必须达到第三范式,更高的范式现在来看毫无必要,但在以rails为代表的orm中会出现范式越高效率越高的情况,原因就在于他对表的操作很好的把握了delay这个概念,但传统的sql希望是最简单的方法一次取得数据,所以很多老程序员对于范式均会以越低越好著称,因为在他们的理解数据表越冗余,则sql越好些,则查询效率越高,但带来的负面就是数据的不统一和系统扩展维护的复杂度,因此在这个层面上ORM是有意义的,而且绝对应该得到推荐的。
至于效率,昨天在javaeye上看到一个讨论php orm的文章,大多数人都痛骂了php下的orm实现,其实我现在的方案效率也不高,但我觉得在后台上使用尚能接受,而且在代码上确实非常干净这一点正是我想要的东西,现在对于写程序来说,数据库操作变成了配置这是一种享受,这两天应该是心情很愉悦的两天虽然,其实我设计的表由于是标准三范式查询语句极为复杂,但现在却轻松许多,感谢orm这种概念,相信在机器性能大幅提高之后依靠硬件和使用未来的对象数据库之后,orm一定能得到更多的应用。
分享到:
相关推荐
[CDATA[ 文本内容 ]]>`,其中"文本内容"部分不能包含字符串"]]>",以防止提前结束CDATA段。同时,CDATA段不能嵌套,也就是说,一个CDATA段内部不能再有另一个CDATA段。 要将Java对象转换成XML并包含CDATA,我们可以...
微信小程序支付JSAPI交易类型 已通过测试 返回例子如下: <xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <result_code><![CDATA[SUCCESS]]></result_code>
[CDATA[ ]]> 用于包含 Mybatis 的标签(如 `<if>`、`<where>`、`<choose>` 等),否则这些标签将不会被解析。 实例如下:<select id="allUserInfo" parameterType="java.util.HashMap" resultMap="userInfo1"> <!...
<preconditions><![CDATA[1.使用udp_bi用户在PLSQL正常登陆UAT数据库<br> (UAT数据库IP: 10.0.13.178)<br> 2.数据库脚本已下载至本地环境]]></preconditions><importance><![CDATA[2]]></importance><steps> <step>
[CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></...
[CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml...
ATTLIST 电话 类别 CDATA "移动电话"> ]> <联系人列表> <说明>&content;</说明> <联系人> <姓名>刘保文</姓名> <ID>201003101115</ID> <公司>腾飞汇通有限公司</公司> <电话 类别="移动电话">18993380967</...
[CDATA["&fromusername&"]]></ToUserName>" &_ "<FromUserName><![CDATA["&tousername&"]]></FromUserName>" &_ "<CreateTime>"&now&"</CreateTime>" &_ "<MsgType>news</MsgType>" &_ "<ArticleCount>3</...
自己将数据导入到xml中的,希望有需要的朋友可以自己下载,格式为<!DOCTYPE PCAroot[ <!ELEMENT PCAroot (Province*)> <!ELEMENT Province (City*)> <!ELEMENT City (Area*)> <!ELEMENT Area (#PCDATA)> <!...
ATTLIST square width CDATA "0"> 这个声明指定了 square 元素是一个空元素,带有一个 width 属性,属性类型是 CDATA,默认值是 0。 在 XML 文档中,可以使用以下语法来使用这个 DTD: <square width="100" /> ...
<title>无废话XML</title> <author>张三</author> </book> ``` #### 3. 属性 - 元素可以带有属性,提供额外的信息。例如: ```xml <book id="001"> <title>无废话XML</title> <author>张三</author> </...
2. **属性(Attributes)**:提供关于元素的附加信息,如`<img src="computer.gif" />`中的`src`属性。 3. **实体(Entities)**:用于表示特殊字符或引用外部资源,如`<`代表小于号 `<`。 4. **PCDATA(Parsed ...
[CDATA[FAIL]]></return> <return><![CDATA[商户号mch_id与appid不匹配]]></return> </xml> 原因是我拿到的商户号不是这个公众号的。一定要检查是不是这个公众号的商户号。 免责声明:本站所有文章和...
2. '<':当遇到 '<' 时,状态变化到 '<',以判断是否是CDATA部分的起始。 3. '<!':继续往后读,检查是否是CDATA的开始。 4. '<![':继续,检查是否是CDATA的开始。 5. '<![C':继续,检查是否是CDATA的开始。 6. '...
[CDATA[http://t{$serverpart}.tianditu.cn/DataServer?T=cia_w&X={$x}&Y={$y}&L={$z}]]></url> <serverParts>0 1 2 3 5 6 7</serverParts> <backgroundColor>#00000000</backgroundColor> </customMapSource> </...
[CDATA[gh_33bb5907f91e]]></ToUserName> <FromUserName><![CDATA[ojLh3jkYtiszyEY-_sM_8yrNxSc4]]></FromUserName> <CreateTime>1363231643</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><...
[CDATA[留言内容]]></content> </message> </messages> </gbook> ``` 4. **DTD定义**: - 用于定义XML文档的结构和约束条件。 - 例如,`<gbook>` 元素包含了 `<info>` 和 `<messages>` 两个子元素。 ```xml...
</body> </note> ``` 对应的`note.dtd`文件内容与内部声明相同。 使用DTD的好处主要包括: 1. **自包含性**:每个XML文件都可以携带其格式描述,方便理解和处理。 2. **标准化**:为不同的人提供了一种共同理解数据...
在文件中,我们可以看到DTD定义了Contacts文档的结构,包含了对<Contacts>、<Person>、<Name>、<Address>、<Country>、<Province>、<City>、<Phone>、<Email>等元素的定义,以及对<Contacts>和<Person>元素如何嵌套...