论坛首页 入门技术论坛

数据库动态查询最佳实现

浏览 12260 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-03-28  
downpour 写道
真的不知道我是不是在同一个火星人说话。

这年头,使用hbm.xml的人已经少之又少,为什么?因为不乐意在维护一个entity的同时,再去维护一个繁重的xml。所以出现了annotation,出现了约定大于配置。但是你目前的思路还是要维护配置文件,你可以不在你自定义的配置文件中写你的SQL或者HQL,但是你目前的思路基本上还是处于需要有某处地方来维护你的SQL或者HQL语句,这就带来了很大的维护成本,在我看来,这的确就是一种落伍的思想方式。

你的这个工具,请允许我称之为工具,放在2年前,可能会被评为良好贴或者给别人提供一个很好的思路,但是现在再拿出来,还到处宣称自己有多么多么优秀,是不合适的。我想指出的,只是一个事实,你的东西没有你想象中那么优秀,你的语言过激了。如果你想讨论,可以看看之前很多人的实现方式,然后改进你的方案,别人拿不拿别人的方案出来分享,是别人的自由,你总是质疑别人拿不出比你更好的方案来,你为什么不想一想,别人为什么要拿出他的方案来和你讨论呢?

工具和框架是给人用的,自己用的舒服就成,你可以分享给大家,但是不能强迫大家都说你的东西好。Javaeye的论坛一向没有所谓的高手,不过这里至少还有一些敢于提出批评意见的人,能够给出相对客观的评价。

BTW 如果你的东西真的有你吹嘘的那么好,那么具有独创性。就不会有那么多朋友给你投新手帖了。

讨论就此结束,不再做任何回复。

哈哈,第一我没有说我这个不是工具呀,我上升到框架推荐给别人了吗?现在感觉一定通过annotation方式就是先进,你就感觉别人不知道,我们是因为客户现场环境一般要求基于jdk1.4而已,所以在小项目中用jdk1.5但在实际项目中我们目前是要求尽可能以1.4为要求,还有用annotation和xml其实并不重要只是习惯而已,项目的目的在于选用合适的架构和技术追求的是稳定和功能,在这个过程中能够然开发者开发更简单便捷很重要,同时还要考虑项目的风险,技术的应用要跟项目及项目团队人员状况相匹配,当然也要考虑公司技术的延续性统一性。
   我就是搞不懂,用一个annotation就标榜自己先进(这个东西知道的人很多,就好比我开始发表这个文章时,有一个说有一个做法:EO eo=(EO)this.get().非要写成String query="from EO where id=?" 一样,别人是不知道this.get()吗?是因为别人不是在讨论这个问题),但我不想谈所谓先进,我所要体现的是sql(或hql)维护以及使用的简洁,再说你根本就没有看清楚我的文章,我的做法是sql写在配置文件或以string 方式传递都是可以的,你说的是覆盖的,我给开发者提供了放在文件和代码中的两种可能,因为findByJdbcQuery(String namedQueryOrSql ,我会首先判断namedQueryOrSql 是否直接是一个查询语句,如果不是则作为一个Map key去查对应的sql。我说过我的东西不是给大家带来使用的麻烦,而是作为一个选择,是完全非侵入式的,不强迫你改变以往的习惯!
   哈哈,算了,搞成了推荐一个东西给大家遭到如此打击!
 
0 请登录后投票
   发表时间:2009-03-28   最后修改:2009-03-28
zhenjia 写道
zhongxuchen 写道

首先解释一下,这个工具并不是只针对sql,是支持hql的,
而且hql或sql可以这么写
from OrganInfo as t
where 1=1
      #[and t.name like ?]
       and t.enable=?
就是说#[]相当于if,只需在需要判断的地方增加#[];

1.做点改善吧#[]应该去,不然把SQL COPY进去的时候 还要去写#[] 够麻烦的
2.只是简单的null判断?如果不支持复杂的判断,那应该努力。
3.对于这样的动态SQL 我的实现。
@Transactional(type = TransactionType.READ_ONLY)
	@FinderByCriteria(entity = WfReq.class,
 restriction = {@Restriction(column = "lockYn", value = "Y", condition = Condition.EQ) },
 orderBy = { @OrderBy(column = "sendDate", isAsc = false) })
	public Page<WfReq> getPageListBySend(@FirstResult int start,
			@MaxResults int limit,
			@SearchModeList List<SearchMode> searchModeList) {
		return null;
	}

无SQL 基于QBC annotation声明查询方式 动态 静态 排序 等等,
searchModeList 传入你所谓的#[]#[]#[]#[] 自动判断。并且判断支持非null以外的其他逻辑判断
我只管仍有可能用到的查询参数,其他不管。


在我们的BaseDAOSupport中提供了Criteria查询,hql查询,同时也提供了jdbc查询,简单的用Criteria查,
表多了关系复杂了就用sql,
谢谢提醒,已经提供了任何参数的判断,在传参数时new Object[]{this.convertSqlParams(obj,"-1")}单个转,也可以是this.convertSqlParams(objs),默认是转"",也可以是this.convertSqlParams(objs,new Object[]{-1,""}),多个转,给项目组用的第一天就提出来了,本来让他们自己转null的,后来还是提供了一些方法,提供了convertSqlParams(obj,new Object[]{对照值1,对照值2}),提供对多个对象转null和多个值对比如-1什么的。还提供lessThen,between,moreThen对比函数。
#[]何尝不想去,个别地方要增加这个东西是烦一点,但提供一个约定方便后来维护者知道那里到那里是要通过null判断去掉的。同时sql写起来不需要过多排版约束,其实这是一个折中的处理!

0 请登录后投票
   发表时间:2009-03-28  
算了不扯淡了,给大家介绍一些其它的吧,这篇就到此为止了:
动态数据源:
http://www.iteye.com/topic/334788
数据库SEQUENCE
http://www.iteye.com/topic/335565
0 请登录后投票
   发表时间:2009-03-29  
报告大家一个好消息。根据楼主的思想,我编写的小工具快完成了。如果最后完成,希望大家指证。
0 请登录后投票
   发表时间:2009-03-29   最后修改:2009-03-29
魔力猫咪 写道
报告大家一个好消息。根据楼主的思想,我编写的小工具快完成了。如果最后完成,希望大家指证。

我希望在你的小工具上声明一下借鉴陈式查询,其实我本希望将我的东西拿出来给大家共享的(因为公司部分原因我只给大家展示了基于hibernate的实现,我在我的sagacity中已经独立出来成为一个小插件形式提供给spring的集成),因为我们的东西一直在用,已经相对完善了,受此打击还是算了(竟然被评为新手贴!),哈哈!
0 请登录后投票
   发表时间:2009-03-29  
zhongxuchen 写道
魔力猫咪 写道
报告大家一个好消息。根据楼主的思想,我编写的小工具快完成了。如果最后完成,希望大家指证。

我希望在你的小工具上声明一下借鉴陈式查询,其实我本希望将我的东西拿出来给大家共享的(因为公司部分原因我只给大家展示了基于hibernate的实现,我在我的sagacity中已经独立出来成为一个小插件形式提供给spring的集成),因为我们的东西一直在用,已经相对完善了,受此打击还是算了(竟然被评为新手贴!),哈哈!

好的我会在工具的Redme中写出是借鉴了你的思想。并给出到你的博客的链接http://zhongxuchen.iteye.com/。
0 请登录后投票
   发表时间:2009-03-29  
就差最后的测试了。如果测试没问题的话,我写完帮助就可以拿出来让大家试用了,决定采用LGPL许可证。
0 请登录后投票
   发表时间:2009-03-29  
参考楼主的思想,动态查询语句处理框架“仓库猫”正式诞生。我在googlecode上开了项目,英文名“catsorage”。目前0.1测试版的源代码已经上传。因为我使用了google-json库,为了避免麻烦,决定使用和google-json相同的Apache 2.0许可证,反正这个和LGPL也差不多,好像和商业更亲和。
但是因为使用说明还没有编写好,所以暂时不提供直接下载。
楼主的大名和博客地址我已经放到首页了。
0 请登录后投票
   发表时间:2009-04-07  
QuakeWang 写道
大家在这篇2年前的帖子中讨论过各种类似做法:
http://www.iteye.com/topic/58834
你提出的想法是在约定大于配置上更进一步,少去了一些tag,如果更进一步,连#[]都可以省略,可以and开头,换行结尾作为匹配:
from HrOrganInfo where 1=1
and createDate>= ? and createDate<= ?
and ORGAN_NO like ?
and ORGAN_NAME like ?
and IS_ACTIVE = ?

啊,这个头像哪来的?
跟我外SHEN好像啊
0 请登录后投票
   发表时间:2009-04-08  
越来越不了解javaeye的大牛了,是不是确实自己太牛了......
这种帖子被评为新手帖,确实是太过分了,你们应该明白逛javaeye的大部分人都没有你们那么牛,所以请你们手下留情点吧.....
人家辛辛苦苦地写了那么多,你们评为新手帖,确实是太打击人的积极性了,这样下去,javaeye的技术论坛不会再有人发帖子了,大家都去泡海阔天空吧
0 请登录后投票
论坛首页 入门技术版

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