关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 14141|回复: 0

jeecg3.5ga动态数据源与动态报表改造

[复制链接]
发表于 2015-3-21 09:07:13 | 显示全部楼层 |阅读模式

阅读代码发现jeecg代码已支持多数据源和动态数据源,花了很多功夫才弄明白多数据源和动态数据源的区别,不当之处各位海涵,望有官方人士指正。

多数据源是在spring-mvc-hibernate.xml文件中 数据源集合 配置的数据源
可以在DataSourceType增加新的枚举来,增加新的数据库源,我测试的时候增加一个informix数据库的源,具体如下:
#informix
hibernate.ids.dialect=org.hibernate.dialect.InformixDialect
ids.driver=com.informix.jdbc.IfxDriver
ids.url=jdbc:informix-sqli://xxx.xxx.xxx.xxx:xxx/db:informixserver=onserver;NEWLOACLE=en_us,zh_cn,zh_tw;NEWCODESET=GBK,8859-1,819,Big5,UTF-8;
ids.username=user
ids.password=pass

然后可以在spring-mvc-hibernate.xml中 数据源集合中参照dataSource_jeecg增加一个配置,并将这个配置名称加到 数据源集合中
这里新增加的名字最好是dataSource_enter,dataSource4,mapdataSource中的一个,否则就要更改DataSourceType
DataSourceContextHolder.setDataSourceType(DataSourceType.dataSource_jeecg);
setDataSourceType切换数据源,由此可知多数据源是用作jeecg自身运行的数据库的,可以通过配置使jeecg面向多种类型的数据库,当然每个数据源里面jeecg运行需要的表必须存在

动态数据源,找到一个controller
/jeecg/src/main/java/org/jeecgframework/web/system/controller/core/DynamicDataSourceController.java
加载到菜单中,发现这个设计是可以将数据源定义到数据库的,查看代码发现保存在DynamicDataSourceEntity中,这个就是动态数据源的定义了,它允许管理员通过ui定义数据源,通过DynamicDBUtil可以发出对这个数据源的查询

屏幕快照 2015-03-21 上午8.30.25.png

感觉这个动态的数据源应该是用在”动态报表配置“模块中,
通过这样dba添加数据源,开发人员在使用动态报表生成需要的报表,应该是高效的企业查询、报表生成的一种解决方案。
那么是不是这样的?用了一下动态报表发现使用的数据源还是和jeecg是同一个的,挺遗憾的。

抱着动态数据源+动态报表配置的想法,我对jeecg修改了部分代码,我是以提取单位informix数据库里面的数据为目标,改造的程序,
目前已经实现的功能如下:
1.动态报表中可以的动态数据源的代码,链接不同的数据源,报表定义部分的数据还是存在jeecg中,仅仅查询处理在动态数据源指定的库中
2.动态报表查询sql可以支持变量,使用:+变量名的形式,添加了解析变量的功能,指定变量的类型、描述、内容等等,
3.动态报表查询sql支持存储过程(单位大量查询是通过存储过程获取数据,不解决这个就没法用),同时存储过程也可以使用变量,规则同上
4.屏蔽了jeecg原有的根据查询结果集中的字段进行再次查询的功能,转为根据输入的查询变量内容进行查询
5.对于存储过程的查询,报表结果屏蔽了分页功能
6.JdbcDao中增加了对informix类型数据库分页查询的支持

具体实现细节不再描述,有很多地方实现的不完美,暂时先这样了至少可以用了。
改造后的动态报表定义、查询界面如下
屏幕快照 2015-03-21 上午8.31.15.png
报表定义部分增加了变量解析,用正则表达式匹配实现,:变量名称相比?的形式就可以出现多次了

屏幕快照 2015-03-21 上午8.32.09.png
把sql解析出来的按结果字段进行查询的功能给隐藏了,查询变量统一按sql语句中的变量

屏幕快照 2015-03-21 上午8.36.57.png
上图是存储过程的调用,也是支持变量的

屏幕快照 2015-03-21 上午8.37.13.png

屏幕快照 2015-03-21 上午8.39.25.png
上图是查询动态报表项目的界面,点击如有查询变量会弹出需要输入的变量清单

屏幕快照 2015-03-21 上午8.41.13.png
上图是存储过程的返回结果,注意下方分页控制被隐藏了

屏幕快照 2015-03-21 上午8.42.21.png

上图是select语句返回的结果,下方有分页控制

以下是添加、修改的文件清单,都在压缩包中,有需要可以访问(3分下载),informix数据库需要引入ifxjdbc.jar

http://download.csdn.net/detail/blueguy1223/8519835

\jeecg\src\main\webapp\plug-in\template\mustache.js
\jeecg\src\main\java\org\jeecgframework\web\system\pojo\base\DynamicDataSourceEntity.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\service\impl\core\CgReportServiceImpl.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\service\impl\core\CgreportConfigHeadServiceImpl.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\service\core\CgReportServiceI.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\page\core\CgreportConfigHeadPage.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\entity\core\CgreportConfigHeadEntity.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\engine\core\cgreportlist.ftl
\jeecg\src\main\java\org\jeecgframework\web\cgreport\sql\core\CgReportDao_queryCgReportMainConfig.sql
\jeecg\src\main\java\org\jeecgframework\web\cgreport\controller\excel\CgExportExcelController.java
\jeecg\src\main\java\org\jeecgframework\core\common\dao\jdbc\JdbcDao.java
\jeecg\src\main\java\org\jeecgframework\core\util\DynamicDBUtil.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\controller\core\CgreportConfigHeadController.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\controller\core\CgReportController.java
\jeecg\src\main\java\org\jeecgframework\web\cgreport\controller\core\CgreportConfigHeadController.java
\jeecg\src\main\java\org\jeecgframework\tag\core\easyui\TabsTag.java
\jeecg\src\main\webapp\webpage\jeecg\cgreport\core\cgreportConfigHead.js
\jeecg\src\main\webapp\webpage\jeecg\cgreport\core\cgreportVar.jsp
\jeecg\src\main\webapp\webpage\jeecg\cgreport\core\cgreportConfigItemList.jsp
\jeecg\src\main\webapp\webpage\jeecg\cgreport\core\cgreportConfigHead-update.jsp
\jeecg\src\main\webapp\webpage\jeecg\cgreport\core\cgreportConfigHead-add.jsp
\jeecg\src\main\webapp\webpage\jeecg\cgreport\core\cgreportConfigHeadList.jsp

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表