1.SQL查询


1.1 SQL语句

在报表设计器左边的数据集或是共享数据集,点击“新增”则出现数据集窗口页面选中sql查询如下图:

选择数据源,数据源对应数据库,填写数据集名称,数据集名称不能为空且不能与该报表其他数据集重复,默认程序会智能解析sql。

1.2 SQL解析

解析SQL优点
简化带参数的sql语句,如select * from rpt_value where name=:arg, arg为参数名称与参数页面的组件名称相对应,当参数页面不输入arg值即arg为空,sql解析会智能生成可执行的sql语句如:select * from rpt_value where 1=1。

解析SQL缺点
智能解析SQL语句并不能保证解析sql正确性,如果保存sql出现错误,建议SQL解析选择否

1.3 不解析SQL

SQL解析选择“”,当sql语句中存在参数,需要写判断参数是否为空的表达式:
select * from rpt_value where 1=1
<if test="arg1 != null"> and name=:arg1</if>
<if test="startDate != null"> and t_date>:startDate</if>

当参数startDate=null,arg = name,生成的可执行的sql:select * from rpt_value where 1=1 and name=’name’

1.4 IF表达式

<if test=""></if>test中为逻辑判断表达式,根据参数最终生成可执行的SQL语句,if表达式也支持嵌套sql判断 示例:可以根据参数sqlType 不同执行不同的SQL语句

           <if test="!isdef sqlType">  
                select * from A 
           </if>
           <if test="sqlType == 'A'">
                select * from A where 1=1 
                <if test="year != null"> and year=:year</if>
           </if>
            <if test="sqlType == 'B'">
                select * from B where 1=1 
                <if test="year != null"> and year=:year</if>
           </if>
        

if表达式语法:

操作符 描述 示例(argName为参数名称)
!isdef 等于null isdef 表示是否参数有值, <if test="!isdef argName"></if>
isdef 不等于null <if test="isdef argName"></if> 或 <if test="argName != null"></if>
== 等于 <if test="argName == 'A'"></if>
!= 不等于 <if test="argName != 'A'"></if>
&& 与,条件均为true,则为true <if test="argName > 10 && argName < 20"></if>
|| 或,条件有一个为ture均为true <if test="argName > 10 || argName < 5"></if>
> 大于 <if test="argName > 10"></if>
< 小于 <if test="argName < 10"></if>
<= 小于等于 <if test="argName <= 10"></if>
>= 大于等于 <if test="argName >= 10"></if>

1.5 分页数

分页数为0时表示不使用分页查询,当分页数大于0时,SQL语句在查询时会自动增加SQL分页片段,不需要在SQL检索中写分页查询SQL,当填写分页数如2,程序会智能依据不同数据库添加sql分页片段,如mysql:select * from rpt_value limit 0, 2