由于sql语句直接在数据库里面可以查到数据,但是通过ibatis配置以后查不到数据,后经检查发现因为sql语句中的中文出现乱码引起的,例如 select a,b from table where c='合格' 通过iBATIS配置后在后台打印出来是select a,b from table where c='????',从而导致查不出数据,解决方案如下:
1、创建监听器,主要是标红的语句
package com.dhx.common;
import java.nio.charset.Charset;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
* Application Lifecycle Listener implementation class ChartSetListen
*
*/
public class ChartSetListen implements ServletContextAttributeListener {
/**
* Default constructor.
*/
public ChartSetListen() {
// TODO Auto-generated constructor stub
com.ibatis.common.resources.Resources.setCharset(Charset.forName("gbk"));
}
/**
* @see ServletContextAttributeListener#attributeAdded(ServletContextAttributeEvent)
*/
public void attributeAdded(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see ServletContextAttributeListener#attributeReplaced(ServletContextAttributeEvent)
*/
public void attributeReplaced(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see ServletContextAttributeListener#attributeRemoved(ServletContextAttributeEvent)
*/
public void attributeRemoved(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
}
}
2、在webxml中配置
<listener>
<listener-class>com.dhx.common.ChartSetListen</listener-class>
</listener>
注意:配置位置需要配置到Spring的ContextLoaderListener之前
3、将gbk编码配置成<context-param>
<context-param>
<param-name>encoding</param-name>
<param-value>
gbk
</param-value>
</context-param>
4、重新部署应用,问题解决