當前位置:首頁 » 編程語言 » ibatissql中文亂碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ibatissql中文亂碼

發布時間: 2023-07-17 16:17:15

Ⅰ ibatis動態sql配置啟動時提示:The content of elements must consist of well-formed character data...

把下面這個表達式反過來寫就可以了。
如圖:

Ⅱ iBatis的SqlMap中,我寫的這條動態SQL語句,將表名當做參數動態傳遞,報「表名無效」錯誤。

因為#value#這種形式的,轉換為SQL中的?,而問號只有在賦值屬性(欄位)的時候才用,表名不能用這個方式寫,而且更不要用$value$這種形式替換,因為ibatis編譯的SQL會緩存。導致第二次傳遞進來的表名不會替換,在表可數的情況下,可以傳遞一個變數,來判斷需要查詢哪個表。

Ⅲ 我在做struts和ibatis的綜合開發時報錯:java.sql.SQLSyntaxErrorException: ORA-00908: 缺失 NULL 關鍵字

如果sql寫的正確,請檢查您的sql 中是不是有漢語的空格,建議將輸入法調整成英文,重新把sql寫一遍就好了,我也遇到這樣的問題,自己解決了

Ⅳ 怎麼從ibatis中獲取SQL

如何從ibatis中獲取SQL

以下是在網上搜到的辦法:

運行期從ibatis配置文件中獲取sql的兩種方法
運行期從ibatis配置文件中獲取sql
1.通過SqlMapClientDaoSupport,SqlMapClientImpl,MappedStatement,Sql,RequestScope等ibatis提供的類

public List<UserInfo> getUserList(UserInfo userInfo) {
String sql = null;
SqlMapClientImpl sqlmap = (SqlMapClientImpl) this.getSqlMapClient();
MappedStatement stmt = sqlmap.getMappedStatement("getUserInfoList");
Sql stmtSql = stmt.getSql();

RequestScope requestScope = new RequestScope();
requestScope.setStatement(stmt);
sql = stmtSql.getSql(requestScope, userInfo);
System.out.println(sql);
return null;
}

註:這個方法我是寫在中的,該 extends SqlMapClientDaoSupport,所以上述就可以直接this調用getSqlMapClient()方法,

2.通過SqlMapExecutorDelegate,MappedStatement,Sql,RequestScope等ibatis提供的類
public List<UserInfo> getUserList(UserInfo userInfo) {
SqlMapExecutorDelegate delegate=((ExtendedSqlMapClient)
(getSqlMapClientTemplate().getSqlMapClient())).getDelegate();

MappedStatement ms = delegate.getMappedStatement("getUserInfoList");
Sql sql=ms.getSql();
RequestScope requestScope = new RequestScope();
requestScope.setStatement(ms);
String sqlStr = sql.getSql(requestScope,userInfo);
System.out.println(sqlStr);
}

註:這兩個例子中用到的類都是ibatis官方jar文件中的,快速導入即可,"getUserInfoList"為ibatis的xml文件中配置的id,getSql(,)
中第二個參數就是要傳遞的參數對象。

上述寫法完全可以再簡化,上述只是簡單介紹,可供參考.......

參考:http://hi..com/iany/item/254166ffaef7a3e81a111f71

但是以上方法有點問題,ibatis參數有$和#之分,當#的時候,獲取出來的SQL是含有?號的。

我想ibatis一定也是最後使用的是JDBC的一種實現,所以就debug了一下源代碼。
看了一下,總結了一下,可以這樣實現:

package com.seven.dbTools.ibatis;

import java.util.HashMap;
import java.util.Map;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl;
import com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap;
import com.ibatis.sqlmap.engine.mapping.sql.Sql;
import com.ibatis.sqlmap.engine.scope.RequestScope;
import com.ibatis.sqlmap.engine.mapping.statement.MappedStatement;

public class IbatisUtil extends SqlMapClientDaoSupport {

/**
* get sql from ibatis :從ibatis中獲取sql已經動態參數
* @param sqlid : sqlMap中的id
* @param parameterMap : 參數map
* @return
*/
public Map<String, Object[]> getSqlAndParametersFromIbatis(String sqlid,
Map parameterMap) {
String sql = null;
SqlMapClientImpl sqlmap = (SqlMapClientImpl) this.getSqlMapClient();
MappedStatement stmt = sqlmap.getMappedStatement(sqlid);
Sql stmtSql = stmt.getSql();
RequestScope requestScope = new RequestScope();
requestScope.setStatement(stmt);
ParameterMap dynamicParameterMap = stmtSql.getParameterMap(
requestScope, parameterMap);
Object[] values = null;
if (dynamicParameterMap != null) {
values = dynamicParameterMap.getParameterObjectValues(requestScope,
parameterMap);
}
sql = stmtSql.getSql(requestScope, parameterMap);
Map<String, Object[]> sqlMap = new HashMap<String, Object[]>();
sqlMap.put(sql, values);
return sqlMap;
}

}

以上代碼得到SQL和動態的參數。

Ⅳ 如何設置ibatis 後台列印完整的sql語句

在項目開發時都大家都希望將SQL在後台列印出來,以幫助開發以及後續的bug修改。如果用JDBC那麼可以方便的列印,可使用ibatis就不知道怎麼辦了,最近在網上找了一段log4j的配置可以很保姆的處理這個問題。這里貼出來給大家參考一下。

如果是JB,那麼要設置,這類型的文件也載入到目標項目中。

在項目試運行需要維護得階段可以把debug改為error,這樣伺服器後台只列印報錯信息,這樣既可以看清錯誤又可以減輕伺服器負擔(後台不斷列印數據很消耗伺服器資源的。。)