当前位置:首页 » 编程语言 » 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,这样服务器后台只打印报错信息,这样既可以看清错误又可以减轻服务器负担(后台不断打印数据很消耗服务器资源的。。)