hibernate?ejb?以及最近了解到的ibatis?
    ejb历来以繁琐著称,或者称为重量级。
    hibernate,看看它的hello cat演示很简单,但实际使用中几乎没有那么简单的情况。一旦业务复杂的话,再考虑上性能等等要求,总觉得也过于重量级。最不爽的是一种情况是如果关系表(就是仅仅包含2个主业务表的数据关联,可能只有2,3个字段的那种)多一点,一对多,多对多,用起来总感觉象杀鸡用牛刀:明明就是几个关联简单处理一下即可,但却非要换成对象。还要lazy load。呵呵,抱怨一下。我用hibernate,操作上感觉比较舒服的是create和update的时候。最痛苦的是query,次不爽的是delete。
    ibatis,我只是看了一下所谓的demo,就跑了。配置文件复杂的来。。。且把sql写在配置中,个人总是很难接受这种方式,如果是team work的话,不够安全的说,总觉得貌似是个人都能改(最怕N个人在同一个xml中配自己的SQL,林子大了什么鸟都有,team人多了,什么问题都会出;这种多人搞一个文件就是问题的最佳孳生点)。

    罗索了这么多,下面说重点,开始总结。
    我觉得目前大部分都基于关系数据库的现状,增删改查四大功能中,【查】,【增】可充分考虑OO思想,【改】可以适用部分OO思想,【删】则几乎不用考虑OO。我所指的OO,是以对象的概念来操作的意思。

    【查】,我觉得可以做到调用者自己根据业务组织SQL语句,定义SQL结果数据存储POJO类,然后调用query方法,完成查询,并将结果集数据载入到POJO对象中。这个样子即满足了大部分的需求。分页暂不予考虑。
        public List doQuery(String sqlClause, Class pojoClass) throws XException;
            关于这个,我已经有一篇随笔,且自己已经代码实现并验证。所以不多说了。

    【增】,向指定的表插数据是比较容易让人联想到对象概念的操作。所以,应该比较适合使用对象。增操作时,指定表名,指定POJO对象实例,调用insert方法。
        public void doInsert(String tableName, Object pojoInstance) throws XException;
            所作的事情:
                1。从数据库载入表结构(一般来说表结构改动的可能性不大,一次扫描后可缓存)
                2。将POJO对象的get属性和表的字段,类型关联起来
                3。构造insert语句。最好再检查一下字段能否为null等等。
                4。执行insert语句。
            实际上,我觉得还有一种方式虽然对象概念不多,但应该也蛮灵活,好用的。
        public void doInsert(String tableName, Map values) throws XException;
            基本操作思想和上面的一致。不过不需要用反射获取属性信息了。直接从map中遍历即可。

    【改】,更新的字段多时,可能组织为一个POJO对象比较让人能接受;但如果每次只更新1,2个字段或者针对某个表更新业务比较多(这次是a,b字段,下次是c,d等字段)的话,貌似丢弃对象,直接MAP更方便丫。基本接口和insert类似。个人感觉这是一个比较中间化的操作。
 
    【删】,一般我们删除时都是根据主键或者某些字段的条件来的。简单根据主键来删时,貌似用MAP也比较能接受,因为通过指定俩参数,自己可以不用组织SQL,轻微爽的说。复杂点的删,业务要求组织一个暴恶心的SQL的情况也未尝不存在,这种情况下,我们最多提供一个直接执行SQL语句的接口即可。

以上纯属个人想法,不甚成熟,随笔记之,以做备忘。