多表组合查询(一)准备阶段

2012/09/16 2135点热度 0人点赞 0条评论

功能描述:1)自定义从那几张表中查询数据

2)可自定义组合条件

3)自定义组合表头

4)可定制查询模板

5)可以选择查询模板回显上去

6)可将符合条件的所有数据导出成excel,根据类型创建不同的cell

效果图环境准备:可查询表和字段配置:search-conditions.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置可查询的字段,和该字段显示的文本值,还有该字段查询的类型 -->
<conditions>
    <!-- 定义查询的表和该表在页面上显示的值 -->
    <table name="xmb" value="项目表">
       <!-- 定制可查询到的字段,每个字段都带上该表的简写,并定义字段的类型
          * type对应的是设定条件中的关系,
             type="string" :表示该查询的关系有:1)等于,2)包含  
                 对应的查询条件值是文本框需要自己填写
             type="num"    :表示该查询的关系有:1)大于,2)小于,3)等于,4)大于等于,5)小于等于  
                 查询的是数值类型,对应的查询条件值是文本框,需自己填写值
             type="select" :表示该查询的关系有:1)等于  
                 对应的查询条件值是下拉选select,配置在该字段里的<searchValue>选项
             type="date"   :表示该查询的是日期,对应的关系中的值是日期段
                 对应的查询条件值是带日期控件的文本框,只能选择时间,
                 日期对应的是开始和结束日期,不填写,开始日期默认是'1900-01-01',结束日期是当前的系统时间
             备用type="int" :表示查询的是整数类型,用于导出的时候区分整数类型和浮点类型,
               (不区分的话,在excel中没有办法计算)
       -->
       <column name="x.xmmc" showText="项目名称" type="string" />
       <column name="x.xmfzrxm" showText="项目负责人姓名"  type="string"/>
       <column name="x.xmssdq" showText="项目所属地区" type="select">
           <!-- name保存在数据库中的值,value显示给客户看的值 -->
           <searchValue name="11" value="海淀区"/>
           <searchValue name="12" value="朝阳区"/>
           <searchValue name="13" value="东城区"/>
           <searchValue name="14" value="西城区"/>
       </column>
       <column name="x.ksrq" showText="开始日期" type="date"/>
       <column name="x.xmmj" showText="项目面积" type="num"/>
       <column name="x.xmrs" showText="参与人数" type="int"/>
     </table>
     <table name="qyb" value="企业表">
       <column name="q.qymc" showText="企业名称" type="string"/>
       <!-- 省略.... -->
     </table>
     <table name="ryb" value="人员表">
       <column name="r.rymc" showText="人员名称"/>
       <column name="r.rylx" showText="人员类型" type="select">
          <searchValue name="" value=""/>
       </column>
     </table>
</conditions>

 查询模板定制,在指定目录下,登录用户名.xml 

<?xml version="1.0" encoding="UTF-8"?>
<searchCondition>
  <!--  查询模板定制
     * searchTemplate 代表一个模板
       * id 当前模板编号,添加的时候,取最大值+1 
       * name  模板名称
       * fromTable 从哪几张表从查询数据
       * tableHead 设置的表头
       * tr 代表设置条件的行
         * ljys 逻辑运算,只有and和or,默认为and
         * zkh  左括号
         * tableName  当前字段所在的表
         * columnName  当期设置条件的字段
         * gx 查询的关系
         * ykh 右括号
   -->
  <searchTemplate id="1" name="未命名1" fromTable="xmb,qyb" tableHead="{'x.xmmc':'项目名称','x.xmfzrxm':'项目负责人姓名','x.xmssdq':'项目所属地区','q.qymc':'企业名称'}">
    <tr ljys="" zkh="" tableName="xmb" columnName="x.xmmc" gx="like" cxtjz="北京" ykh=""/>
    <tr ljys="and" zkh="" tableName="qyb" columnName="q.qylx" gx="like" cxtjz="公司" ykh=""/>
    <tr ljys="and" zkh="(" tableName="xmb" columnName="x.xmssdq" gx="=" cxtjz="11" ykh=""/>
    <tr ljys="or" zkh="" tableName="xmb" columnName="x.xmssdq" gx="=" cxtjz="12" ykh=")"/>
  </searchTemplate>
</searchCondition>

 查询页面定制dzSearch.jsp

<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ page isELIgnored="false"%>
<%
    String webPath = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>                           
    <title>综合查询</title>
  </head>
     <body>
  <div >
       <!-- 由于我这边是固定的从三张表中读取数据,我就偷了个懒,直接静态了,如果表不固定,可以动态的加载 -->
       <div class="table-top"><span style="float: left;vertical-align: middle">设定条件</span><input type="button" name="addTrBtn" id="addTrBtn" class="button" style="float:right;width:70px;height:22px" value="添加条件" onclick="addTr()"/></div>
       <table id="conditionTable" class="tableRegion" style="table-layout:fixed;"  width="100%"  >
           <thead  class="tableHeader ">
              <tr>
                 <td width="5%">逻辑运算</td>
                 <td width="5%">左括号</td>
                 <td width="10%">表名</td>
                 <td width="30%">字段</td>
                 <td width="10%">关系</td>
                 <td width="15%">查询条件值</td>
                 <td width="5%">右括号</td>
                 <td width="5%">操作</td>
              </tr>
           </thead>
           <tbody>
              <tr >
                 <td ></td>
                 <td ><input  type="text" onchange="kh(this.value)" class="khcss"/></td>
                 <td ><select  onchange='tableChange(this,1)' ><option  selected='selected'>请选择</option><option value='FWAQ_DWY_HTINFO'>项目表</option><option value='FWAQ_DWY_WYINFO'>企业表</option><option value='FWAQ_DWY_WYUSERINFO'>人员表</option></select></td>
                 <td><select onchange='columnChange(this)' style="width:340px"></select></td>
                 <td ></td>
                 <td ></td>
                 <td ><input  type="text" onchange="kh(this.value)"  class="khcss"/></td>
                 <td ></td>
              </tr>
           </tbody>
       </table>
    </div>
   <!-- 自定义条件结束 -->
   <!-- 自定义表头开始 -->
    <div class="table-top" style="clear: both"><span style="float: left;vertical-align: middle">表头设定</span></div>
    <table>
       <tr>
          <td>
              <select id="tableHeader" multiple="multiple" size="10" onchange="tableChange(this,2)"  style="width: 100px">

              </select>
          </td>
          <td>
              <select id="columnHeader" multiple="multiple" size="10"  style="width: 330px" >
              </select>
          </td>
          <td><input id="rightMoveBtn" type="button" value=">>" class="button" style="width:60px;height:20px" /><br/><br/>
              <input id="leftMoveBtn"  type="button" value="<<" class="button" style="width:60px;height:20px" />
          </td>
          <td>
             <select id="resultHeader" multiple="multiple" size="10"  style="width: 330px"></select>
          </td>
       </tr>
    </table>
   <!-- 自定义表头结束 -->
   <br/>
   <input id="searchBtn" type="button" value="查 询"  class="button" onclick="searchFn()" style="width:60px;height:20px" />
   <input id="saveSearchCondition2Xml" type="button" value="保存成模板" class="button" style="width:80px;height: 20px">
   <input id="openMbPage" value="选择模板" type="button" class="button" vlaue="选择模板" onclick="openMbWin()" style="width:70px;height:20px" /><span id="showMbText"></span>
  </body>
</html>

 

yxkong

这个人很懒,什么都没留下

文章评论