论坛首页 入门技术论坛

开创性的陈氏数据库动态查询设计

浏览 11802 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-02-03  
anky_end 写道
大致看了下,楼主自己也认为类似ibatis

我认为ibatis的优点在于:
1、命名替换,也就是说你不必关心参数的顺序,只要匹配好参数的key就行
2、更加动态化,比如select * from $tabname$,甚至可以整个sql语句。
3、规范化,作为一个已经被广泛认可的框架,文档齐全,上手容易。

我没看出楼主写的配置文件比ibaits的sql文件优雅到哪儿去,这个算是个人喜好问题。

另外ibaits基本也考虑到sql语句执行的方方面面,例如插入语句后返回主键,存储过程的调用,批量语句的优化等等,另外在和spring结合上也做的够好。

楼主的轮子不比ibaits高明,没有明显的优势啊。

如果仅仅就一条sql配置看起来比ibaits更优雅,是无法服众的

<sql id="dy_searchRiskWarn">
<value><![CDATA[
SELECT T.RISK_NO, T.SUBJECT,T.BIZ_DATE,T.BANK_NO,T.BANKDIST,T.ACTIVE_FLAG,
(SELECT D.DICT_VALUE FROM SYS_DICT_DETAIL D WHERE D.TYPE_CODE=:impDegreeConst AND D.DICT_KEY=T.IMP_DEGREE) IMP_DEGREE_VALUE,
(SELECT COUNT(M.POSTIL_NO) FROM SYS_MASTER_POSTIL M WHERE M.BIZ_TYPE=:functionType AND M.REFRENCE_NO=T.RISK_NO) POSTIL_COUNT,
(SELECT COUNT(T1.ATTITUDE_NO) FROM dbo.ISP_INSPECT_ATTITUDE T1 WHERE T1.TRANS_TYPE=:transTypeConst AND T1.TRANS_OBJ=T.RISK_NO) ATTITUDE_COUNT,
(SELECT P.BANK_ALIAS FROM  PL_BANK_INFO P WHERE P.BANK_NO =T.BANK_NO) AS BANK_NAME,
ISP.ATTITUDE_NO,ISP.SUBJECT AS INSPECT_ATTITUDE_SUBJECT
FROM dbo.DY_RISK_WARN T LEFT JOIN ISP_INSPECT_ATTITUDE ISP ON T.ATTITUDE_NO = ISP.ATTITUDE_NO
WHERE 1=1
#[AND T.BANKDIST IN (:bankdistString)]
#[AND T.BANK_NO IN (:bankNos)]
#[AND T.IMP_DEGREE=:impDegree]
#[AND T.BIZ_DATE >=:beginDate]
#[AND T.BIZ_DATE <=:endDate]
#[AND T.SUBJECT LIKE :subject]
#[AND T.ACTIVE_FLAG=:activeFlag]
#[AND :bizType IN (SELECT B.BIZ_TYPE FROM DY_RISKWARN_BIZ_TYPE B WHERE B.RISK_NO=T.RISK_NO)]
ORDER BY T.ACTIVE_FLAG DESC,T.BIZ_DATE DESC,T.IMP_DEGREE DESC,T.RISK_NO DESC
]]></value>
</sql>
谁说不能用命名替换了,里面写注释都可以,和spring的集成那都是小问题,我这个只提供
SqlToyResult queryParam = sqlToyContext.getSql(sqlOrNamedSql,
paramsNamed, paramsValue);
logger.debug("findByJdbcQuery=" + queryParam.getSql());
final Object[] params = queryParam.getParamsValue();
通过参数结合sql处理成最终结果,最终的查询你随便用什么,因为这个贴子是我最早的用法,现在的已经完全改变了
return this.findPageByJdbc("dy_searchBankFlare",
new String[] {
"bankdistString", "bankdist", "functionType", "bankString",
"beginDate", "endDate", "subject", "activeFlag", "bizType",
"impDegreeConst", "impDegree" }, new Object[] { inStr,
SqlUtil.filterBlank(bankFlareVO.getBankdist()),
SystemConstants.FunctionType.BANK_FLARE,
SqlUtil.filterBlank(bankString),
SqlUtil.filterBlank(bankFlareVO.getBeginDate()),
SqlUtil.filterBlank(bankFlareVO.getEndDate()),
SqlUtil.filterBlank(bankFlareVO.getSubject()),
SqlUtil.filterEqual(bankFlareVO.getActiveFlag(), -1),
SqlUtil.filterEqual(bankFlareVO.getBizType(), "-1"),
SystemConstants.DataDict.IMP_LEVEL,
SqlUtil.filterEqual(bankFlareVO.getImpDegree(), "-1"), },
model, BankFlareVO.class);
0 请登录后投票
   发表时间:2010-02-03  
另外要知道什么叫简单就是美!从效果上你可以一眼看出我的这个sql的简单,调用也简单,难道一定是ibatis就是好吗?其实我强调的是想法,而非技术,我们现在项目中就这么用的,应用过程就一个字:爽!
0 请登录后投票
   发表时间:2010-02-03  
zhongxuchen 写道
另外要知道什么叫简单就是美!从效果上你可以一眼看出我的这个sql的简单,调用也简单,难道一定是ibatis就是好吗?其实我强调的是想法,而非技术,我们现在项目中就这么用的,应用过程就一个字:爽!

^_^,不好意思,个人看法还是ibatis看起来更简单。

当然论直管可能到是你的写法更直观些。

ibaits实际上把全部判断逻辑集成在配置文件里面。
而你似乎是用代码分担部分判断逻辑功能。

另外ibatis传入参数也极为灵活。

如果论思想,两者本质差不多吧,就是通过配置文件动态拼接sql,在ibatis之前俺们也有搞过个类似的,做的还不如你。

我的看法嘛,不是贬低你,而是认为,如果要使用这类动态sql功能,不如直接上ibaits来的方便简单。
0 请登录后投票
   发表时间:2010-02-03  
anky_end 写道
zhongxuchen 写道
另外要知道什么叫简单就是美!从效果上你可以一眼看出我的这个sql的简单,调用也简单,难道一定是ibatis就是好吗?其实我强调的是想法,而非技术,我们现在项目中就这么用的,应用过程就一个字:爽!

^_^,不好意思,个人看法还是ibatis看起来更简单。

当然论直管可能到是你的写法更直观些。

ibaits实际上把全部判断逻辑集成在配置文件里面。
而你似乎是用代码分担部分判断逻辑功能。

另外ibatis传入参数也极为灵活。

如果论思想,两者本质差不多吧,就是通过配置文件动态拼接sql,在ibatis之前俺们也有搞过个类似的,做的还不如你。

我的看法嘛,不是贬低你,而是认为,如果要使用这类动态sql功能,不如直接上ibaits来的方便简单。

哈哈,无所谓贬不贬低了,其实判断并不是在每个代码中去判断,后台不会提供baseDaoSuppert吗,继承一下调用就一句话了,ibatis的写法不得在sql中增加
<if>等标记吗? sql一眼根本就看不明白,尤其大sql,那也叫简单,如果要修改呢,我们这个就是直接copy出去放到客户端工具上剔除一下#[]就可以,而ibatis可以吗?你想想写sql和改sql的过程就知道了
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics