锁定老帖子 主题:阿里巴巴开源平台新增项目SimpleEL
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-14
luckne 写道 现在的svn 还能访问吗? 我好想不行。。。想看看code 。。
可以访问: http://code.alibabatech.com/svn/simpleel/trunk 之前管理员做了大小写调整,请重新访问 |
|
返回顶楼 | |
发表时间:2011-04-14
最后修改:2011-04-15
QL主体功能差不多实现了,有一些细节带补充,周末有空就补完。
将会支持SELECT、WHERE、ORDER BY、LIMIT、GROUP BY、聚合函数,动态将QL语句编译为Java代码。 下一步还打算支持DELETE、UPDATE等。 TestCase代码 public class QLServiceTest extends TestCase { public static class Person { private int age; private String name; public Person() { } public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} } public void test_0 () throws Exception { QLService service = new QLService(); List<Person> srcCollection = new ArrayList<Person>(); srcCollection.add(new Person(18, "吴能")); srcCollection.add(new Person(27, "刘芒")); srcCollection.add(new Person(40, "黄警")); srcCollection.add(new Person(50, "夏留")); srcCollection.add(new Person(60, "刘晶")); srcCollection.add(new Person(33, "石榴姐")); List<Person> destCollection = new ArrayList<Person>(); Map<String, Object> context = new HashMap<String, Object>(); context.put("age", 30); service.select(Person.class, srcCollection, destCollection, "WHERE age > @age ORDER BY age desc LIMIT 1, 2", context); Assert.assertEquals(2, destCollection.size()); Assert.assertEquals("夏留", destCollection.get(0).getName()); Assert.assertEquals("黄警", destCollection.get(1).getName()); } } 动态生成的代码: package com.alibaba.simpleEL.dialect.ql.gen; import java.util.*; import static java.lang.Math.*; import com.alibaba.simpleEL.Expr; import static com.alibaba.simpleEL.TypeUtils.*; public class GenClass_10000 implements Expr { public Object eval(Map<String, Object> ctx) { List<com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person> _src_ = (List<com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person>) ctx.get("_src_"); List<com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person> _dest_ = (List<com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person>) ctx.get("_dest_"); final int offset = 1; final int rowCount = 2; int rowIndex = 0; for (com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person item : _src_) { if(item.getAge() > _int(ctx.get("age"))) { _dest_.add(item); } } { Comparator<com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person> comparator = new Comparator<com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person>() { public int compare(com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person a, com.alibaba.simpleEL.dialect.ql.QLServiceTest.Person b) { if (a.getAge() > b.getAge()) { return -1; } if (a.getAge() < b.getAge()) { return 1; } return 0; } }; Collections.sort(_dest_, comparator); } for (int i = 0; i < offset && i < _dest_.size(); ++i) { _dest_.remove(0); } while(_dest_.size() > rowCount) { _dest_.remove(_dest_.size() - 1); } return null; } } 测试代码路径: http://code.alibabatech.com/svn/simpleel/trunk/src/test/java/com/alibaba/simpleEL/dialect/ql/QLServiceTest.java 欢迎围观! |
|
返回顶楼 | |
发表时间:2011-09-21
跟MVEL相比有什么优势?
|
|
返回顶楼 | |
发表时间:2011-10-07
动态的把表达式放到java source,然后用jdk 1.6的新特性动态编译成class,这个思路还是比较不错的;发展计划中提到支持“提供SQL风格语法支持的预处理器”不知道这个特性做的怎样了,这个比较有挑战的。看了下代码,发现温少自己在原始的写语法和解析,是否有考虑用antlr来做更方便些!
|
|
返回顶楼 | |
发表时间:2011-10-08
温少
最好结合一个实际应用来阐述 |
|
返回顶楼 | |
发表时间:2011-10-08
你要告诉我们这个玩意实际作用在什么地方,看了半天实在是没看懂
|
|
返回顶楼 | |
发表时间:2012-03-31
现在又发布了一个新的解析器,不知道哪个更好
|
|
返回顶楼 | |
发表时间:2012-04-01
KimShen 写道 wenshao 写道 KimShen 写道 EL不稀奇,最快的OGNL解析器,来一个?
都说了和JSTL中的EL没任何关系了!! 我说是JSTL的EL了? 还有别的什么el咧,小弟真的不会 |
|
返回顶楼 | |