当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
JAVA认证辅导:ibatis动态查询
发布时间:2010/6/7 11:06:09 来源:城市学习网 编辑:ziteng
  最近项目需要,做了一个动态查询。把查询结果返回到页面上显示。
  要查询的字段和表名都是动态的,是在后台拼出来的。
  可是在ibatis中运行的时候总报“列名无效”,在sql/plus中运行则正常。
  百思不得其解。
  后来通过查资料,解决如下:
  Xml代码
  <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"是必须的,否则会报列名无效的错误。
  前台画表格:
  Js代码
  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");
  } [NextPage]   Js代码
  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格式字符窜:
  Java代码
  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;
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved