ibatis 动态查询

最近项目需要,做了一个动态查询。把查询结果返回到页面上显示。

 

要查询的字段和表名都是动态的,是在后台拼出来的。

 

可是在ibatis中运行的时候总报“列名无效”,在sql/plus中运行则正常。

 

百思不得其解。

 

后来通过查资料,解决如下:

<select id="queryLogInfo" resultClass="java.util.HashMap" remapResults= "true " parameterClass="java.util.Map" >
   		select t.CREATOR,t.CREATE_DT,decode(o.BUSI_OPER_TYPE,'1','新增','2','修改','3','删除') as OPER_TYPE, $colNames$ 
   		from  $tableName$ t,TAS_OPERATION_LOG o 
   		where $pkIdName$ = #pkIdValue#
   		and t.log_id = #logId#
  </select>

 其中:remapResults= "true"是必须的,否则会报列名无效的错误。

 

前台画表格:

function doSelectAction(Re){
	//返回的串
	var str = Re.responseText.evalJSON(); 
	
	var keys = str.keys;
	
	var showNames = str.showNames;
	//表头显示名称
	var showNamesArray =  showNames.split(",");
	
	//sqlMap对应的字段名。
	var keysArray = keys.split(",");
	
	//查询结果
	var tem = str.logStrlist.evalJSON();
	//先清空表格
	document.getElementById("newbody").innerText = '';
	
	//画表格头
	 var row=document.createElement("tr"); 
	 for(var j=0;j<showNamesArray.length;j++){
 	    var cell = document.createElement("td"); 
		 cell.align = 'center';
		 cell.appendChild(document.createTextNode(showNamesArray[j])); 
	   row.appendChild (cell); 
	 }
	document.getElementById("newHead").appendChild (row); 
	 
	//画表格
	tem.each(function(obj){ 
		var row=document.createElement("tr"); 
		 for(var i=0;i<keysArray.length;i++){
		 	
		 	var cell = document.createElement("td"); 
			 cell.align = 'center';
			 cell.appendChild(document.createTextNode(obj[keysArray[i]])); 
		   row.appendChild (cell); 
		 }
		document.getElementById("newbody").appendChild(row); 
    }); 
   //senfe("表格名称","奇数行背景","偶数行背景","鼠标经过背景","点击后背景");
    senfe("newbody","#f8fbfc","#e5f1f4","#ecfbd4","#bce774");
}
 
function senfe(o,a,b,c,d){
 var t=document.getElementById(o).getElementsByTagName("tr");
 for(var i=0;i<t.length;i++){
  t[i].style.backgroundColor=(t[i].sectionRowIndex%2==0)?a:b;
//  t[i].onclick=function(){
//   if(this.x!="1"){
//    this.x="1";
//    this.style.backgroundColor=d;
//   }else{
//    this.x="0";
//    this.style.backgroundColor=(this.sectionRowIndex%2==0)?a:b;
//   }
//  }
  t[i].onmouseover=function(){
   if(this.x!="1")this.style.backgroundColor=c;
  }
  t[i].onmouseout=function(){
   if(this.x!="1")this.style.backgroundColor=(this.sectionRowIndex%2==0)?a:b;
  }
 }
}

 后台把查询结果解析成json格式字符窜:

public ActionForward getInit(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        OperationBO operationBO = null;
        JSONObject data = new JSONObject();
        try {
            response.setContentType("text/json");
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = null;
            operationBO = (OperationBO) InteractionObjectFactory.getInstance()
                    .getInteractionObject("TP_OperationBO",
                            getAppContext(request));
            String logId = request.getParameter("logId");
            String operType = request.getParameter("operType");
            //操作日志信息
            Map map = operationBO.queryLogInfo(logId, operType);
            List logList = (List) map.get("resultlist");
            
            JSONArray logJsonList = JSONArray.fromObject(logList);
            String logStrlist = logJsonList.toString();
            
            try {
                out = response.getWriter();
                data.put("logStrlist", logStrlist);
                data.put("keys", (String) map.get("keys"));
                data.put("showNames", (String) map.get("showNames"));
                out.println(data.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            } finally {
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return null;
    }
 

 

 

 

你可能感兴趣的:(sql,c,json,ibatis,J#)