分类 默认分类 下的文章

在找到ureport2工具之前,我们生产上使用硕正工具来制作单证和报表,在我来公司之前使用硕正已经好几年了。现在需要寻找新的工具来代替硕正,在网上找了很久,也查询了很多的资料,我们后面采用ureport2来尝试一下,因为ureport2有以下几点好处:开源项目,我们可以根据自己的场景来修改源代码,跨平台,跨浏览器,测试了一下,性能也可以。所以开始着手用ureport2来作为新系统的开发工具
首先是去ureport2的官网上去了解该项目,它是一个开源项目,项目地址是:https://gitee.com/youseries/ureport , 去git clone 该项目
在自己的项目中集成ureport2的工具,在pom文件中增加ureport2的dependency,这个暂时不截图了,只要ureport2源码中的版本号和自己项目中的版本对应起来就好了
因为我们项目使用springboot开发的,但是ureport不是springboot的方式,它的所有入口都是采用servlet的方式进入的。所以现在的请求分为了2个方向,一个是项目本身的请求走的是自己的controller,另一个是ureport的请求走的是自己的servlet,所以在项目启动类中需要增加以下代码

@Bean
public ServletRegistrationBean buildUReportServlet() {
    return new ServletRegistrationBean(new DocumentUreportServlet(), UreportConstants.ureportMapping);

}

这里面的DocumentUreportServlet 继承了UReportServlet ,因为所有ureport请求都会进去到这里,我们项目对这个进行特殊处理,无非就是获取用户的信息,你可以在里面增加一些其他的逻辑

public class DocumentUreportServlet extends UReportServlet {

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
    LoginDataHelper.init(request, response);
    try {
        super.service(request, response);
    } catch (Exception e) {
        throw new BusinessException(e.getMessage());
    }
}

}
至于UreportConstants.ureportMapping 这些都是ureport的请求地址

public static final String[] ureportMapping = {
        "/ureport/chart/*",
        "/ureport/datasource/*",
        "/ureport/preview/*",
        "/ureport/look/*",
        "/ureport/designer/*",
        "/ureport/import/*",
        "/ureport/searchFormDesigner/*",
        "/ureport/res/*",
        "/ureport/excel97/*",
        "/ureport/excel/*",
        "/ureport/pdf/*",
        "/ureport/word/*",
        "/ureport/xml/*",
};

表明这些请求地址会进入到ureport自带的serlvet,上面介绍了项目启动类集成ureport的方式

LEFT JOIN是一种SQL语句中常用的关联查询方式,它可以返回包括左表中所有记录和与右表中记录匹配的记录在内的所有记录。如果在右表中没有匹配数据的话,那么左表中对应的字段值会被置为NULL。

如果需要将找不到匹配数据的记录调整为排序到最后,可以在ORDER BY子句中使用IFNULL函数。IFNULL函数用于返回两个表达式的第一个非NULL值,语法为IFNULL(expr1,expr2),如果expr1不为NULL,则返回expr1的值,否则返回expr2的值。

例如,假设有两个表A和B,需要将左表A和右表B进行LEFT JOIN查询,并按照B表中的字段排序。如果在B表中找不到对应的数据,则需要将其排序到最后。可以使用如下SQL语句:

SELECT A., B.
FROM A
LEFT JOIN B ON A.id = B.id
ORDER BY IFNULL(B.field, 'zzz');
该语句中使用IFNULL函数,将B表中的待排序字段作为第一个参数,将一个特殊的字符串’zzz’作为第二个参数。当B表中的待排序字段为NULL时,IFNULL函数返回’zzz’,使得这些记录排在最后。