最近项目需要,做了一个动态查询。把查询结果返回到页面上显示。
要查询的字段和表名都是动态的,是在后台拼出来的。
可是在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;
}
分享到:
相关推荐
本文将深入探讨IBATIS动态查询语句的运用,解析其背后的逻辑与机制,以及如何利用这些特性来增强查询的灵活性与安全性。 ### IBATIS动态查询基础 IBATIS,现在更广为人知的名字为MyBatis,是一种半自动映射的持久...
iBatis 动态查询条件详解 iBatis 是一个基于 Java 的持久层框架,它提供了动态查询条件的功能,可以根据不同的条件生成不同的 SQL 语句。在 iBatis 中,动态查询条件是通过 `<dynamic>` 元素来实现的,该元素可以...
iBatis动态SQL标签用法 iBatis是Java持久层框架,提供了动态SQL标签来实现动态查询。动态SQL标签可以根据不同的条件生成不同的SQL语句,从而提高查询效率和灵活性。 动态SQL片段 iBatis提供了动态SQL片段的功能,...
ibatis动态多条件组合查询 实例 说明
### ibatis的动态查询知识点详解 #### 一、模糊查询 **知识点1:** 在进行模糊查询时,ibatis支持两种不同的语法标记:`#` 和 `$`。 1. **使用 `$value$` 进行模糊查询:** - 在进行模糊查询时,使用 `$value$` ...
首先,我们需要理解Ibatis动态SQL的基本概念。在Ibatis的XML映射文件中,我们可以通过条件标签来构建动态SQL。这些标签包括`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等。它们...
**Ibatis动态查询详解** Ibatis,全称MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Ibatis可以使用简单的XML或注解...
在Ibatis中,复杂查询通常涉及到多个表的联接、条件动态拼接、子查询以及各种数据类型的处理。文档"Ibatis复杂查询语句.doc"所展示的查询语句就是一个很好的例子,展示了Ibatis如何处理复杂的数据库操作。接下来,...
在描述中提到的"按条件查询",就是通过iBatis动态构建SQL语句来实现的。开发者可以在SQL Map中定义一个模板SQL,然后在Java代码中传入参数,iBatis会自动替换SQL中的占位符,生成实际的查询语句。这种方式既避免了硬...
"分页资料.txt", "ibatis 分页查询.txt"和"ibatis动态查询条件.txt"可能是关于如何在实际项目中实现分页查询和动态条件查询的具体示例或说明,帮助开发者更好地理解和应用上述概念。 总的来说,IBATIS SQL Maps提供...
根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...
`sqlMapConfig.xml`文件是Ibatis的全局配置,它引用了`book.xml`,并设置了一些Ibatis的配置选项,如缓存和动态代理的启用。 综上所述,Ibatis通过配置文件和Pojo类实现了`book`和`user`之间的多表查询。在运行时,...
iBatis 中使用安全的拼接语句、动态查询、大于、小于、等于 iBatis 是一个流行的持久层框架,提供了许多强大的功能来帮助开发者构建高效、安全的数据库交互应用程序。本文将详细介绍 iBatis 中使用安全的拼接语句、...
iBATIS推荐的写法是在SQL字符串中动态添加`%`,如下所示: ```xml SELECT * FROM t_stu WHERE s_name LIKE '%' || #name# || '%' ``` 在这个例子中,`#name#`代表传入的参数,而`'||'`是字符串拼接操作符。这样...
### 解决IBatis缓存动态字段问题 #### 背景与问题描述 在使用IBatis框架处理数据库操作时,可能会遇到动态数据表名、动态字段名的情况。这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为...
iBATIS动态标签是SQL映射文件中的一种功能强大的特性,它允许在SQL语句中进行条件判断,根据传入的参数动态生成合适的查询条件。动态标签主要用于提高灵活性,使得SQL映射文件能够适应多种查询场景,而无需为每种...
2. **动态SQL**:Ibatis的动态SQL功能可以进一步优化分页查询。通过`<if>`、`<choose>`等标签,可以在SQL中根据条件动态插入分页语句,使得SQL更加灵活。 3. **PageHelper插件**:为了简化分页操作,社区开发了...
注意,iBatis还支持动态SQL,这意味着你可以在XML配置文件中使用`<if>`、`<choose>`、`<when>`等标签来根据条件动态构建SQL语句,这对于复杂的连接查询非常有用。 总的来说,iBatis提供了强大的SQL定制能力,使得...
在日常的软件开发过程中,尤其是在处理数据库查询时,我们经常面临一个问题:如何优雅地处理那些未知或动态变化的列名及列数的情况?在这种情况下,传统的实体类映射方式往往难以满足需求。本文将详细介绍如何利用 ...
本文将深入探讨iBATIS动态注入的相关知识点。 iBATIS动态SQL主要通过XML映射文件中的特定标签实现,允许我们根据业务需求动态地构建SQL语句。这些动态元素使得SQL语句可以根据传入的参数值动态地调整,避免了大量IF...