一、前言
任何报表都有数据源,它是一切数据的源头。JasperSoft当然也不例外,JasperSoft中支持丰富的数据源适配器。例如常见的 Jdbc 、MongoDB、Json、JNDI,甚至也可以使用我们自定义实现 JRDataSource 都是可以的。
如下图所示,这是6.8 版本的 JasperSoft 支持的数据源适配。随着JasperSoft软件迭代,所支持的数据源越来越丰富。
二、JDBC数据源
JasperSoft支持的数据源比较丰富,这里我们来使用常用的 JDBC 数据源来演示在Jasper模板中的使用。关于其他数据源我们也可以参考官方文档。
1、创建数据源
JasperSoft的数据源有多种方式创建方式;
点击 File --> 选择 DataAdapter
在Project Explorer区域 JasperSoft 项目上,或者任意空白处都可以
包括我们在创建模板后,也是可以创建数据源的。顶部也提供了快速按钮。
2、配置数据源
选择Data Adapter ,指定数据源名称,及保存的位置。一个Jasper项目中,是可以创建多个数据源。
选择 Database JDBC Connection 选项
选择 Next, 配置数据源属性
Name : 任意名称都可以
- JDBC Driver : 下拉选型框,选择Mysql,去除前后缀。还有一点需要注意的是,Mysql从6.x,使用了新的驱动名称 (com.mysql.cj.jdbc.Driver)
- JDBC Url : jdbc:mysql://localhost:3306/jasper?characterEncoding=utf8&serverTimezone=UTC
- Username : 用户名
- Password : 密码
Driver Classpath : 我们还需要配置一下 JDBC的驱动包,可以去mvnrepository 下载
3、使用数据源
配置好了Jdbc的数据源后,进一步可以使用数据源了,数据源只需要配置一次即可,可重复使用。
在创建模板的时候,就可以指定已配置的数据源文件
点击 Next 会配置已查询的字段,点击Finsh 完成配置。这里选择Finsh, 还可以在后面配置。
模板创建完毕,可以使用查询语句导入 Fields
4、测试用例
点击OK ,完成Fileds导入。把Fileds拖入到我们的模板里面,设置字体大小,及位置,点击预览。
这里只是简单的查询,当遇到复杂的SQL语句的时候,可以使用动态参数Parameters 。
5.Java 实例
前面的试例是帮助预览效果使用的,然而更多的需求是在项目中使用。
Pom.xml 基本配置,其中 jasperfonts 是自定义的字体包
<!--Jasper报表引擎-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.9.0</version>
</dependency>
<!--Jasper 自定义字体-->
<dependency>
<groupId>com.jasperfonts</groupId>
<artifactId>jasperfonts</artifactId>
<version>1.0</version>
</dependency>
<!--引入JDBC驱动包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--引入Mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--使用 Druid 连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.18</version>
</dependency>
需要在 application.properties 配置数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jasper?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=123456
编码如下
@Controller
@RequestMapping("report")
public class JasperController {
@Autowired
private DataSource dataSource;
@RequestMapping("/Jdbc")
public void Jdbc(HttpServletResponse response) throws Exception {
//1.获取编译后jasper模板文件流
InputStream reportStream = this.getClass().getClassLoader().getResourceAsStream("Jasper/TestC.jasper");
//2.获取输出流
ServletOutputStream outputStream = response.getOutputStream();
//2.创建参数值,填充参数
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("sex", 1);
//3.调用Jasper报表引擎
try {
JasperRunManager.runReportToPdfStream(reportStream, outputStream, hashMap,dataSource.getConnection());
response.setContentType("application/pdf");
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果预览
6、总结
我们可以使用JDBC数据源来填充Jasper报告,这种填充报告的方式在预览时候,所见及所得,更快的调试模板,提高效率。