报表系统工具类总结
项目源码连接:https://gitee.com/dada_java/Dada-Smart-Logistics-ReportEzPageParam由Controller传入的分页参数,包含page 页面 默认1rows 加载行数 默认 20sort 字面排序,orderBy的条件order 数据库数据排序 默认asx升序拿到了EzPageParam后,会出现PageUtils工具类现有api发现P
项目源码连接:https://gitee.com/dada_java/Dada-Smart-Logistics-Report
EzPageParam
由Controller传入的分页参数,包含
page 页面 默认1
rows 加载行数 默认 20
sort 字面排序,orderBy的条件
order 数据库数据排序 默认 asx升序
拿到了EzPageParam后,会出现
PageUtils工具类现有api
发现PageBean泛型参数Bean
实现了序列化接口的通用分页数据bean,提供基本数据域访问,和分页规则
略过。。。。
继续看,发现EzPage泛型page类,同样实现了序列化,说明是用来net传输
的带有总和和行数的List数据行,提供set,get接口
由FranchiseeController的示例中总结得出用法
在@RequestMapping的修饰类传入EzPageParam类,和要处理的信息json
或者其他
然后一些限制和判断,略。。。
使用PageParam PageUtil.convert(EzPageParam)
将封装好的EzPageParam传入convert 方法拆分成参数并返回PageParam分页信息类
继续传递到service层的method,在service的具体实现中发现如下声明
项目用的Dao表示MyBatis的Mapper交互类
BaseDaoImpl中有实现一些分页操作和数据访问封装总和
吧这个类给自定义的Daoimp 实现继承,实现对应Dao,DAO则继承
baseDao总有常用的增删改查操作
通过service回到controller后发现EzPage类
一个弱化的数据封装类
JsonUtil对其进行处理,返回json
jsonUtil使用的logback的日志和jacklson的json处理
流程:
EzPageParam
PageUtils.convert(EzPageParam)返回PageParam
传递PageParam给Service层method
这些PageParam参数method来自BaseBiz基础支撑类
然后在
Dao 实现类中有来自父类BaseDaoImp的listBy, listPage method
两个方法区别在于是否携带了分页信息PageParam,通过计算
出来得出数据和分页信息承载体并返回PageBean给前台controller
Controller拿到后
使用PageUtils.convertPageBean返回EzPage泛型类
使JsonUtil类,对其处理即可。。。。。。
String resultStr(查询结果) = jsonUtil.object2Json(EzPage<T>)
可以添加的修饰
在服务器端,使用约定方法 getCountResult来统计
初始化单个pojo的状态,调用initData初始化方法,约定,而不是构造method
返回统计结果,单个pojo类型
String footStr(统计结果) = jsonUtil.object2Json(pojo实例)
假设我已经处理完以上步骤:
那我会使用如下语法
进行拼接json,然后返回给前端
EXCEL补充:
如果想导出excel
涉及了
DataField 项目的数据field
ExcelDataExportor 做事的类,实际细节
ExportDataSource接口,用于实现解耦
需要捕获异常,无法恢复(初步判定)
UnsupportedEncodingException
IOException
具体用法:
Controller有一个javax.servlet的HttpServletResponse方便获取流进行写
一般会先
Response.reset,
并设置content-type头,方便brower判断
还有一个Http头需要设置
Content-disposition
这个是MiMe类型的扩展,和普通的不同,这个能指示客户端如何显示附加的文件
还有个attachment的属性,防止Brower直接打开而是通过其他打开,
Response.AppendHeader(“Content-Disposition”, “attachment;filename=xxxx.文件后缀”;
还有一些可以指导Brower做的属性可以设置
参考link : http://www.cnblogs.com/brucejia/archive/2012/12/24/2831060.html
Ok,当好设置好一切的时候
手工拿到response.getOutputStream所绑定的流
并初始化一些
DataField数据
然后
new ExcelDataExportor<T>(dataFields(数组), new ExportDataSource<T>(){
public List<T> getData(){
return list;//返回一个对象的List集合
}
},out(绑定的response的流)),Model.EXCEL(暂时发现CSV和EXCEL可以用)
).export();//new完直接export导出!
更多推荐
所有评论(0)