用过C#的知道,在.net环境下的有个DataTable对象,数据处理非常方便和强大.可惜Java本身并没有提供这样的类。 在monalisa-db中提供了一个Java版本的DataTable,可以把DataTable当中一个数据库表来看待,能够使用SQL语法对表内的数据做过滤,排序,count/sum/av
用过C#的知道, 在.net环境下的有个DataTable对象,数据处理非常方便和强大. 可惜Java本身并没有提供这样的类。
在monalisa-db中提供了一个Java版本的DataTable, 可以把DataTable当中一个数据库表来看待,能够使用SQL语法对表内的数据做过滤,排序,count/sum/avg, group,join等, 操作起来也很方便, 不妨试用一下。
详细示例参考: https://github.com/11039850/monalisa-example
Maven 引用:
com.tsc9526
monalisa-core
1.1.2
Monalisa-db
//例子1: 从数据库查询出一个DataTable
DataTable users=User.SELECT().select();
DataTable results=users.select(
"name, count(*) as cnt"
,"status >= 0"
,"name asc"
,"name");
//对TableData的过滤操作,执行效果和下面的SQL相同
//SELECT name ,count(*) FROM _THIS_TABLE
// WHERE status >=0
// GROUP BY name
// ORDER by name ASC
//例子2: 自定义数据
DataTable table = new DataTable();
//创建测试数据
for(int userId=1;userId<=6;userId++){
DataMap row = new DataMap();
row.put("user", userId);
row.put("area", "guangdong-"+(userId%2));
row.put("rank" ,90+userId);
table.add(row);
}
DataMap r=table.selectOne("count(*) as cnt", "rank > 91", null, null);
System.out.println(r);
//输出: {cnt=5}
DataTable rs=table.select(
//字段选择: 支持常用的SQL聚合函数:sum/avg/count
//(null 或 "" 表示 *)
"area,count(*) as cnt"
//过滤条件: 支持AND, OR , 括号
//(null 或 "" 表示无条件)
, "rank>0"
//排序字段:ASC/DESC
//(null 或 "" 表示无指定的排序)
,"area ASC"
//分组语句:GROUP BY ... HAVING ...
//(null 或 "" 表示无分组)
,"area");
System.out.println(rs);
//输出:[{area=guangdong-0, cnt=3}, {area=guangdong-1, cnt=3}]
//例子3: Join
DataTable t1 = new DataTable();
t1.add(new User().setName("zzg1").setStatus(1));
t1.add(new User().setName("zzg2").setStatus(1));
t1.add(new User().setName("zzg3").setStatus(1));
DataTable t2 = new DataTable();
for(int i=0;i<2;i++){
DataMap row = new DataMap();
row.put("name", "zzg"+i);
row.put("age" ,16+i); //新字段
t2.add(row);
}
DataTable ts=
t1.join(t2, "name","name")//用字段name连接2个表 t1,t2;
.select(null, "age>0","age",null); //过滤 出age>0,并按age升序
System.out.println(ts);
/*输出如下:
[
{name=zzg1, status=1 , name1=zzg1, age=17}
]
*/