论坛首页 Java企业应用论坛

“write less,do more” Hibernate下的JQuery --->HQuery

浏览 19607 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-04-03  
downpour 写道
还是挺有想法的,不过好像除了少敲了几个字母以外,好像看不出什么原创性的东西。不知道能否加上一些动态查询的封装,比如对参数进行判断,当参数为null时,不用在外面再包一层来判断。

不过再怎么说,也比拼SQL的工具来得有想法。

 public Selector $eq(String column, Object value) {
        return $eq(column, value, defaultIgnoreCase, defaultIgnoreBank);
    }

    public Selector $eq(String column, Object value, boolean ignoreCase) {
        return $eq(column, value, ignoreCase, defaultIgnoreBank);
    }

    public Selector $eq(String column, Object value, boolean ignoreCase, boolean ignoreBank) {
        return $createSelector(Condition.EQ, column, value, ignoreCase, ignoreBank, defaultMatch);
    }

看我的构造
boolean ignoreCase, 是否忽略大小写 默认否 除非设置
boolean ignoreBank  是否忽略空值  默认是   为null 时 这个Selector不生效。
这样的判断应该是最基本 一直都有 呵呵。

HQuery里所有的东西都用的Hibernate提供的API 没有自己发明这个轮子
要说创,那么顶多说的上是模仿 不算创 。为的确实就是"少敲了几个字母"


0 请登录后投票
   发表时间:2009-04-03  
pertghost 写道
QBC 一对多时,多方为EAGER加载,查询一方会有自动全连接的问题 不知道楼主是怎么解决这个问题的?

HQuery里没有用到FetchMode.EAGER 类似这样的代码

setFetchMode("orders",FetchMode.EAGER)   

关联的持久化类全部是
Criteria.createAlias()

0 请登录后投票
   发表时间:2009-04-03  
如果能做到写查询语句 全部有代码提示就好了,包括要查的主对象下的所有字段
0 请登录后投票
   发表时间:2009-04-03  
xiao0556 写道
如果能做到写查询语句 全部有代码提示就好了,包括要查的主对象下的所有字段

我没有理解你的意思
不过 你可以给出伪代码。谢谢
0 请登录后投票
   发表时间:2009-04-03  
楼主 你的东东我大致了解了下 个人认为你的东西只限于项目组内推广使用 我相信大家不会为了少写几个单词而使用你再次封装的东西 而且源码里跳出个$是不是有点别扭

我只喜欢页面上出现${} ,至于后台 我想那就算了


另 我不是打击你啊 我只是说我的看法 没恶意
0 请登录后投票
   发表时间:2009-04-03   最后修改:2009-04-03
stevensinclair 写道
楼主 你的东东我大致了解了下 个人认为你的东西只限于项目组内推广使用 我相信大家不会为了少写几个单词而使用你再次封装的东西 而且源码里跳出个$是不是有点别扭

我只喜欢页面上出现${} ,至于后台 我想那就算了


另 我不是打击你啊 我只是说我的看法 没恶意

理解
HQuery的最初设计也是解决部门内部开发的问题。
再一个就是让项目做到尽量简洁.
再者,同样的事情 少写几行代码不是更好。
因为设计的另一个
[url="http://www.iteye.com/topic/232885" ]guiceSide[/url]也是为了简洁.
但是如果要集成的话也很简单,它可以代替dao.
对于$这个 在JAVA里出现 仁者见仁了


0 请登录后投票
   发表时间:2009-04-04  
期待进一步完善,我觉得这个对于熟悉jquery的java的开发者来说,会是一个很好的开源项目
0 请登录后投票
   发表时间:2009-04-04   最后修改:2009-04-04
stevensinclair 写道
我相信大家不会为了少写几个单词而使用你再次封装的东西 而且源码里跳出个$是不是有点别扭
我只喜欢页面上出现${} ,至于后台 我想那就算了

另 我不是打击你啊 我只是说我的看法 没恶意


我赞同stevensinclair的观点:不为了少写单词,引入另外一种“语法”。楼主的改造,有些类似一种新的语法了(区别与java的语法)。
我赞同楼主创新精神、效率精神:write less, do more!

确实很多代码非常类似,又不好抽取。呵呵,但换个思路,大部分还是能够抽取出来的。比如Spring的jdbc template。呵呵,Spring之前,我当时也搞了个template。很多Jdbc操作代码变的简单了。

我有个建议和楼主探讨一下:
使用类似JAVA API的方式,提供这种write less, do more!
这样的好处是:
1,让广大java初学者不至于迷茫,也让我这样爱偷懒的编程者(我也不大喜欢学习新语法)有福;
2,用有意义的词做api,比这种语法更有表现意义。(你的语法已经有表现意义了,我只是觉得可以更有表现意义些)
3,用api调试起来会更方便一些。


例如您的update例子,是否可以这么改造一下(也不知道是否对,期望指正):
public static void update( Collection entities, DetachedCriteria dc ) {
  ...
}

0 请登录后投票
   发表时间:2009-04-05  
metadmin 写道


我赞同stevensinclair的观点:不为了少写单词,引入另外一种“语法”。楼主的改造,有些类似一种新的语法了(区别与java的语法)。
我赞同楼主创新精神、效率精神:write less, do more!

确实很多代码非常类似,又不好抽取。呵呵,但换个思路,大部分还是能够抽取出来的。比如Spring的jdbc template。呵呵,Spring之前,我当时也搞了个template。很多Jdbc操作代码变的简单了。

我有个建议和楼主探讨一下:
使用类似JAVA API的方式,提供这种write less, do more!
这样的好处是:
1,让广大java初学者不至于迷茫,也让我这样爱偷懒的编程者(我也不大喜欢学习新语法)有福;
2,用有意义的词做api,比这种语法更有表现意义。(你的语法已经有表现意义了,我只是觉得可以更有表现意义些)
3,用api调试起来会更方便一些。


例如您的update例子,是否可以这么改造一下(也不知道是否对,期望指正):
public static void update( Collection entities, DetachedCriteria dc ) {
  ...
}


1.对于这种“新的语法”确实对于一些人来说 需要花时间去理解去学习,但是对于JQuery用户来说我觉得能迅速掌握,包括当初我开发这个的时候基本的方法名称,参数传递方式都是按照JQuery来的
2.HQuery现在我还在内部测试阶段,基本功能都已经完成,准备看看有没有什么性能,线程,和使用的优化,接着生成JavaDocs 让大家能尽快试用,至于有用的词语可待我API出来以后大家看看 并提建议。
3.update例子,我个人觉得 如果改造成传2个参数的Collection entities, DetachedCriteria dc方法 那么又回到最初的模式去了,dc又需要自己构造,entities也同样。而且又有一部分人需要学习dc的构造
类似如上代码 HQuery
$($eq("deptName","HQuery")).save(Entity.class);

省去2点 1 DC的构建在$eq("deptName","HQuery")已经完成
        2 entities在save方法执行前会去判断是否需要从数据库进行加载 这也是自动完成
        3 至于SAVE方法调用的是session.saveOrUpdate();这也是我个人使用的原因 因为大部分时候我没有用到session.save() session.update() 而是直接saveOrUpdate 而在封装时候以save方法名称而已
谢谢你的建议
0 请登录后投票
   发表时间:2009-04-05  
nbkangta 写道
期待进一步完善,我觉得这个对于熟悉jquery的java的开发者来说,会是一个很好的开源项目

恩 对于jquery的使用者来说,
应该对HQuery的语法会比较容易接受。
会进一步完善的。
0 请登录后投票
论坛首页 Java企业应用版

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