datatable java排序,Java实现DataTable的过滤,排序,聚合功能

用过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}

]

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值