目录

引言

1.引入MyBatis依赖

2.简单配置MyBatis和Mysql存储

3.增加Ureport配置文件

数据库结构

4.创建报表存储器实体UreportFileEntity

5.创建UreportFileMapper接口

6.创建配置文件UreportFileMapper.xml实现对应接口

7.创建服务接口UreportFileService

8.创建服务实现类UreportFileServiceImpl

9.创建自定义报表存储器MySQLProvider

10.启动查看结果


引言

UReport2默认提供的名为“服务器文件系统”的报表存储机制,实际上是实现了UReport2提供的com.bstek.ureport.provider.report.ReportProvider接口;如果我们定义了自己的报表存储器,只需要实现了ReportProvider接口后,并将实现类配置到Spring中,让其成为一个标准的Spring Bean,这样UReport2就会检测到它而将其加载。

1.引入MyBatis依赖

源码:https://gitee.com/lfw1024/myreport/blob/master/pom.xml

<!-- 集成mybatis  --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency>

2.简单配置MyBatis和Mysql存储

源码:https://gitee.com/lfw1024/myreport/blob/master/src/main/resources/application.properties

# mybatis实体类包
mybatis.typeAliasesPackage=com.ggzn.entity
# mybatis mapper 文件的位置
mybatis.mapperLocations=classpath:mapper/*.xml
# ureport Mysql 存储
ureport.mysql.provider.prefix=report-
ureport.mysql.provider.disabled=false

3.增加Ureport配置文件

https://gitee.com/lfw1024/myreport/blob/master/src/main/resources/ureport.properties

# 将ureport.disableFileProvider改成true,即可禁用默认提供的文件存储机制
ureport.disableHttpSessionReportCache=false
ureport.disableFileProvider=false
ureport.fileStoreDir=/WEB-INF/ureportfiles
ureport.debug=true

数据库结构

https://gitee.com/lfw1024/myreport/blob/master/src/main/resources/sql/ureport.sql

CREATE TABLE `ureport_file_tbl` (`id_` int(11) NOT NULL AUTO_INCREMENT,`name_` varchar(100) NOT NULL,`content_` mediumblob,`create_time_` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`update_time_` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id_`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;

4.创建报表存储器实体UreportFileEntity

https://gitee.com/lfw1024/myreport/blob/master/src/main/java/com/ggzn/entity/UreportFileEntity.java

@Data
public class UreportFileEntity {private Long id;private String name;private byte[] content;private Date createTime;private Date updateTime;
}

5.创建UreportFileMapper接口

https://gitee.com/lfw1024/myreport/blob/master/src/main/java/com/ggzn/mapper/UreportFileMapper.java


@Mapper
public interface UreportFileMapper {/***  根据报表名称检查报表是否存在* @param name 报表名称* @return*/public int checkExistByName(String name);/***  根据报表名称查询报表* @param name 报表名称* @return*/public UreportFileEntity queryUreportFileEntityByName(String name);/*** 查询全部报表* @return */public List<UreportFileEntity> queryReportFileList();/*** 根据报表名称删除报表* @param name* @return*/public int deleteReportFileByName(String name);/***  保存报表*/public int insertReportFile(UreportFileEntity entity);/***  更新报表* @param entity* @return*/public int updateReportFile(UreportFileEntity entity);
}

6.创建配置文件UreportFileMapper.xml实现对应接口

https://gitee.com/lfw1024/myreport/blob/master/src/main/resources/mapper/UreportFileMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ggzn.mapper.UreportFileMapper"> <resultMap type="UreportFileEntity" id="ureportFile"><id column="id_" jdbcType="BIGINT" property="id"/><result column="name_" jdbcType="VARCHAR" property="name"/><result column="content_" jdbcType="BLOB" property="content"/><result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/><result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/></resultMap><select id="checkExistByName" parameterType="java.lang.String" resultType="java.lang.Integer">select count(*) from ureport_file_tbl where name_ = #{name} </select><select id="queryReportFileList" resultMap="ureportFile">select * from ureport_file_tbl</select><select id="queryUreportFileEntityByName" resultMap="ureportFile">select * from ureport_file_tbl where name_ = #{name}</select><delete id="deleteReportFileByName" parameterType="java.lang.String">delete from ureport_file_tbl where name_ = #{name}</delete><insert id="insertReportFile" parameterType="UreportFileEntity">insert into ureport_file_tbl (name_, content_, create_time_, update_time_) values(#{name}, #{content}, #{createTime}, #{updateTime})</insert><update id="updateReportFile" parameterType="UreportFileEntity">update ureport_file_tbl set name_ = #{name} , content_ = #{content}, create_time_ = #{createTime}, update_time_ = #{updateTime}where  id_ = #{id}</update></mapper>

7.创建服务接口UreportFileService

https://gitee.com/lfw1024/myreport/blob/master/src/main/java/com/ggzn/service/UreportFileService.java

public interface UreportFileService {/***  根据报表名称检查报表是否存在* @param name 报表名称* @return*/public int checkExistByName(String name);/***  根据报表名称查询报表* @param name 报表名称* @return*/public UreportFileEntity queryUreportFileEntityByName(String name);/*** 查询全部报表* @return */public List<UreportFileEntity> queryReportFileList();/*** 根据报表名称删除报表* @param name* @return*/public int deleteReportFileByName(String name);/***  保存报表*/public int insertReportFile(UreportFileEntity entity);/***  更新报表* @param entity* @return*/public int updateReportFile(UreportFileEntity entity);
}

8.创建服务实现类UreportFileServiceImpl

https://gitee.com/lfw1024/myreport/blob/master/src/main/java/com/ggzn/service/impl/UreportFileServiceImpl.java

@Service
public class UreportFileServiceImpl implements UreportFileService{@Resourceprivate UreportFileMapper ureportFileMapper;@Overridepublic int checkExistByName(String name) {return ureportFileMapper.checkExistByName(name);}@Overridepublic UreportFileEntity queryUreportFileEntityByName(String name) {// TODO Auto-generated method stubreturn ureportFileMapper.queryUreportFileEntityByName(name);}@Overridepublic List<UreportFileEntity> queryReportFileList() {// TODO Auto-generated method stubreturn ureportFileMapper.queryReportFileList();}@Overridepublic int deleteReportFileByName(String name) {// TODO Auto-generated method stubreturn ureportFileMapper.deleteReportFileByName(name);}@Overridepublic int insertReportFile(UreportFileEntity entity) {// TODO Auto-generated method stubreturn ureportFileMapper.insertReportFile(entity);}@Overridepublic int updateReportFile(UreportFileEntity entity) {// TODO Auto-generated method stubreturn ureportFileMapper.updateReportFile(entity);}}

9.创建自定义报表存储器MySQLProvider

https://gitee.com/lfw1024/myreport/blob/master/src/main/java/com/ggzn/ureport/provider/MySQLProvider.java


@Setter
@Component
@ConfigurationProperties(prefix = "ureport.mysql.provider")
public class MySQLProvider implements ReportProvider{private final Logger log= LoggerFactory.getLogger(getClass());private static final String NAME = "mysql-provider";private String prefix = "";private boolean disabled;@Autowiredprivate ViewUreportService viewUreportService;@Autowiredprivate UreportFileService ureportFileService;@Autowiredprivate HttpServletRequest request;/*** 根据报表名加载报表文件* @param file 报表名称* @return 返回的InputStream*/@Overridepublic InputStream loadReport(String file) {UreportFileEntity ureportFileEntity = ureportFileService.queryUreportFileEntityByName(getCorrectName(file));byte[] content = ureportFileEntity.getContent();ByteArrayInputStream inputStream = new ByteArrayInputStream(content);return inputStream;}/*** 根据报表名,删除指定的报表文件* @param file 报表名称*/@Overridepublic void deleteReport(String file) {ureportFileService.deleteReportFileByName(getCorrectName(file));}/*** 获取所有的报表文件* @return 返回报表文件列表*/@Overridepublic List<ReportFile> getReportFiles() {List<UreportFileEntity> list = ureportFileService.queryReportFileList();List<ReportFile> reportList = new ArrayList<>();for (UreportFileEntity ureportFileEntity : list) {reportList.add(new ReportFile(ureportFileEntity.getName(), ureportFileEntity.getUpdateTime()));}return reportList;}/*** 保存报表文件* @param file 报表名称* @param content 报表的XML内容*/@Overridepublic void saveReport(String file, String content) {file = getCorrectName(file);UreportFileEntity ureportFileEntity = ureportFileService.queryUreportFileEntityByName(file);Date currentDate = new Date();if(ureportFileEntity == null){ureportFileEntity = new UreportFileEntity();ureportFileEntity.setName(file);ureportFileEntity.setContent(content.getBytes());ureportFileEntity.setCreateTime(currentDate);ureportFileEntity.setUpdateTime(currentDate);ureportFileService.insertReportFile(ureportFileEntity);}else{ureportFileEntity.setContent(content.getBytes());ureportFileEntity.setUpdateTime(currentDate);ureportFileService.updateReportFile(ureportFileEntity);}HttpSession session = request.getSession();if(session.getAttribute("viewid") == null){log.info("viewid为空");}else{String viewid = session.getAttribute("viewid").toString();log.info("viewid:"+viewid);ViewUreportEntity viewUreportEntity = new ViewUreportEntity();viewUreportEntity.setId(viewid);viewUreportEntity.setName(prefix+file);int i = viewUreportService.insertOne(viewUreportEntity);log.info(file+"ViewUreportEntity插入成功"+i);}}/*** @return 返回存储器名称*/@Overridepublic String getName() {return NAME;}/*** @return 返回是否禁用*/@Overridepublic boolean disabled() {return disabled;}/*** @return 返回报表文件名前缀*/@Overridepublic String getPrefix() {return prefix;}/*** @description 获取没有前缀的文件名* @param name* @return*/private String getCorrectName(String name){log.info("前缀:"+prefix);if(name.startsWith(prefix)){name = name.substring(prefix.length(), name.length());}return name; }}

10.启动查看结果

Spring Boot 2.1.8.RELEASE集成UReport2 (四) 添加Mysql存储器相关推荐

  1. Spring Boot(十一)Redis集成从Docker安装到分布式Session共享

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...

  2. Spring Boot - Thymeleaf模板简介以及集成

    文章目录 Spring Boot - Thymeleaf模板简介以及集成 1.什么是Thymeleaf? 2.标准表达式 2.1 变量表达式 2.2 选择表达式/星号表达式 2.3 URL表达式 2. ...

  3. 001-Spring Cloud Edgware.SR3 升级最新 Finchley.SR1,spring boot 1.5.9.RELEASE 升级2.0.4.RELEASE注意问题点...

    一.前提 升级前 => 升级后 Spring Boot 1.5.x => Spring Boot 2.0.4.RELEASE Spring Cloud Edgware SR3 => ...

  4. 搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统

    搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统 场景 可行性分析 搭建Spring Boot集成 ...

  5. spring boot 2.0.3.RELEASE 整合 shiro bug 记录

    spring boot 2.0.3.RELEASE 和 shiro 结合的 bug 纪要: 1.shiro 的过滤器 会出现在所有的过滤链中,尽管该请求不包含在shiro过滤规则中,尽管不会进入shi ...

  6. Spring Boot(十二)集成spring-boot-starter-mail发送邮件

    项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(十二)集成spring-boot-starter-mail发 ...

  7. Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库

    前言 最近在做阅读类的业务,需要记录用户的PV,UV: 项目状况:前期尝试业务阶段: 特点: 快速实现(不需要做太重,满足初期推广运营即可) 快速投入市场去运营 收集用户的原始数据,三要素: 谁 在什 ...

  8. Spring Boot 和Apache Kafka的集成

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1. 引言 Apache Kafka 是一个分布式的.容错 ...

  9. Payment Spring Boot 1.0.2.RELEASE 发布,接入微信支付分、先享卡功能

    Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 演示例子:https ...

  10. 《Spring Boot 实战派》--13.集成NoSQL数据库,实现Elasticsearch和Solr搜索引擎

    第13章 集成NoSQL数据库,实现Elasticsearch和Solr搜索引擎 关于搜索引擎 我们很难实现 Elasticseach 和 Solr两大搜索框架的效果:所以本章针对两大搜索框架,非常详 ...

最新文章

  1. 对话“互联网先驱”:星际互联网究竟可不可行?
  2. Windows 系统安装Docker Compose 步骤
  3. python异步io多文件_Python 异步 IO 性能又上一层楼
  4. 启动vue项目报错:ENOSPC: System limit for number of file watchers reached, watch
  5. 学习JS的心路历程-函式(一)
  6. PowerDesigner15官方正式版+注册补丁
  7. /UI5/IF_UI5_REP_PERSISTENCE - why I cannot deploy app to GM6
  8. c语言类静态数据成员函数,鸡啄米:C++编程入门系列之二十一(C++程序设计必知:类的静态成员)...
  9. mysql宾馆客房管理系统视频_java swing mysql实现的酒店宾馆管理系统项目源码附带视频指导运行教程...
  10. Nods.js安装配置(windows)
  11. macOS 终端打开提示:zsh compinit: insecure directories
  12. python爬虫实训总结报告_python爬虫简单总结(一)
  13. Unity3D网页游戏夺先发之势你hold得住吗?
  14. python javascript人工智能_Python,Java和JavaScript哪个编程语言未来发展空间更大?...
  15. java石头剪刀布思路_石头剪刀布Java实现
  16. JS最佳实践——红皮书
  17. Spring之AOP 切入点表达式写法
  18. 竞赛排名_纪中1743_模拟
  19. GEWV2.3L22A-SLIC烧坏问题经验案例
  20. “WGT安装包中manifest.json文件不存在”与解决办法

热门文章

  1. html页面 js注释,html、css和js注释的规范用法
  2. WTG--让我们随时随地封装系统!
  3. 控制系统--系统结构图
  4. 高等数学第六版上册答案
  5. android手机无法开机自动启动,安卓手机无法开机的6种解决方法
  6. 自适应t分布与动态边界策略改进的算术优化算法
  7. Mysql数据库误删除数据恢复方案
  8. 矩形微带天线贴片尺寸计算
  9. javah 找不到类文件的解决办法
  10. 51单片机之串口通信、WiFi模块、蓝牙模块、4G模块