自己动手打造ORM(四) —需求

    有了元数据之后,就可以实现ORM的功能了。不过在实现之前,还要考虑一下ORM的要实现的功能是什么?

    ORM的最终功能不外乎增删改查,其中前三者是容易实现的,而查询却非常麻烦。因为SQL的查询非常灵活,想要用面向对象的方式表示不太可能。

    在Hibernate中,用HQL来实现查询,个人认为这是一个很不好的做法。HQL并不比SQL简单多少,而且最终还是会转化为SQL语句,那么不直接用SQL而要再去用一个“面向对象”的查询语言似乎是有点自欺欺人。HQL的使用者是谁比较合适?如果是数据层开发人员,用HQL是多此一举,而让业务层或者UI层开发人员使用HQL也不是个好的做法。

     我个人的看法,对于一些简单的、常用的查询,提供一个简单、灵活的查询机制。而对于复杂的查询,在数据层封装成一个方法比较好,虽然不灵活,但业务层和UI层不需要为查询操心。

     我把增删改查分成了2块,定义了2个接口:IObjectViewDAO和IObjectDAO。IObjectViewDAO提供常用的查询,IObjectDAO包含了增删改的功能,并且继承了IObjectViewDAO。因为任何实体都可以是一个View,也就是说查询是实体必需的功能,这是我的考虑,其实两者相互独立也可以的。

 

 

 

在IObjectViewDAO里使用了Condition作为查询条件,Condition是SQL查询条件的OO的表现形式。在常用的查询条件中,大部分是比较数据列的值。而查询条件的集合实际上是一个多叉树(有些ORM比如LINQ是当作二叉树,实际上是一样的,多叉树和二叉树可以相互转换),子节点之间的关系可以是Or或者And。在这里我定义了SimpleCondition和ConditionSet,虽然只是最简单的查询条件,不过基本上能满足大多数查询的要求。对于复杂的查询,可以直接写SQL。如果想要有其他通用的查询需求,可以通过自定义Condition,当然在ORM的实现中要自己实现把Condition解析为SQL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值