JQuery的启发-教你如何二次处理及优化IBatis和Hibernate的查询结果集

阅读更多
不知不觉地习惯上了的JQueryr的简洁,觉得java开发中有很多地方都太死板了,很多JAVA新手都照葫芦画瓢,别人怎么写就跟着怎么写,缺乏自己的独立判断能力,尽管在我自己的ORM框架中已经有了对输出业务对象结果集(即pojo对象的resultset化)的二次处理,如distinct,sum,sort,group,filter等处理,但是经常要面对的是已经写好的SSH或SSI这类的java开发框架,Hibernate和IBatis框架几乎都是清一色的返回List就完事了,其他的都要程序员自己实现,但业务总是复杂多变的,如系统对接或分布式应用以及优化性能和减少数据库IO操作时都不可避免地对数据集进行二次处理, 光从数据库返回的对象集是绝对不够的,对这些javabean的二次处理在所难免,天天对着那堆for和if实在让我觉得一点创意都没有,我花了两天时间写了一个EasyQuery的对象,实现对List和Object[]的处理,在这实现过程中,sort和distinct,sum这些都很好实现,最复杂的就是filter,以前也实现了Expression对象,调用方法类似于:
memberResultSet.filter(Filter.create("name","张三")),
但是条件一旦复杂,而且还有OR判断时,表达式就会很长,类似于:
Expression e1=new RowExpression("name","张三");
Expression e2=new RowExpression("level","in",1,2,3,4);
Condition cond=Filter.create(new Expressions(e1,e2,e3).setOr(true));
memberResultSet.filter(cond);
如果条件再复杂一些,就写得更长更长了,
但是现在喜欢上JQuery的简洁,不想再写这么长的语句了,用一行文字表达:
memberResultSet.filter("name=张三 or (level=[1,2,3,4] and age<60)");
或:
new EasyQuery(memberList).filter("name=张三 or (level=[1,2,3,4] and age<60)");
把JQuery的*=, ^=, $=,!= 与 SQL的 or, and 和Java的||,&&等简洁的表达式结合在一起,这样看起来就很舒服了。并兼容Expression的写法,这样的话程序员喜欢哪种写法都行。
这种描述式的写法大大减少IF和For这类过程式写法,可以把几十行的代码缩短到几行,而且一眼就看懂这几行代码的意图,非常优雅。大家有空也可以试一试在JAVA开发中使用,说不定会喜欢上哦。附上源代码供大家学习交流。如有错误,或有更好的想法和建议欢迎指教。
  • easyquery.zip (14.7 KB)
  • 下载次数: 37
  • MatchString.zip (2.3 KB)
  • 下载次数: 2

你可能感兴趣的:(EasyQuery,jquery,sprint)