锁定老帖子 主题:开创性的陈氏数据库动态查询设计
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间: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); |
|
返回顶楼 | |
发表时间:2010-02-03
另外要知道什么叫简单就是美!从效果上你可以一眼看出我的这个sql的简单,调用也简单,难道一定是ibatis就是好吗?其实我强调的是想法,而非技术,我们现在项目中就这么用的,应用过程就一个字:爽!
|
|
返回顶楼 | |
发表时间:2010-02-03
zhongxuchen 写道 另外要知道什么叫简单就是美!从效果上你可以一眼看出我的这个sql的简单,调用也简单,难道一定是ibatis就是好吗?其实我强调的是想法,而非技术,我们现在项目中就这么用的,应用过程就一个字:爽!
^_^,不好意思,个人看法还是ibatis看起来更简单。 当然论直管可能到是你的写法更直观些。 ibaits实际上把全部判断逻辑集成在配置文件里面。 而你似乎是用代码分担部分判断逻辑功能。 另外ibatis传入参数也极为灵活。 如果论思想,两者本质差不多吧,就是通过配置文件动态拼接sql,在ibatis之前俺们也有搞过个类似的,做的还不如你。 我的看法嘛,不是贬低你,而是认为,如果要使用这类动态sql功能,不如直接上ibaits来的方便简单。 |
|
返回顶楼 | |
发表时间: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的过程就知道了 |
|
返回顶楼 | |