Java代码
public class StringTypeHandler implements TypeHandler<Object> {
private static Logger logger = org.slf4j.LoggerFactory.getLogger(StringTypeHandler.class);
private static String ISO88591_ENCODE = "ISO8859_1";
private static String UTF8_ENCODE = "UTF-8";
private static String GBK_ENCODE = "GBK";
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
try {
String paramStr = null;
if (null != parameter) {
paramStr = (String) parameter;
if (GBK_ENCODE.equals(getEncode(paramStr))) {
if (null != parameter) {
ps.setString(i, new String(((String) parameter).getBytes(GBK_ENCODE), ISO88591_ENCODE));
}
}
}
else {
ps.setString(i, (String) parameter);
}
} catch (UnsupportedEncodingException e) {
ps.setString(i, (String) parameter);
logger.debug("StringTypeHandler encode Exception");
}
}
public Object getResult(ResultSet rs, String columnName) throws SQLException {
try {
if (null != rs.getString(columnName)) {
String columnValue = rs.getString(columnName);
if (ISO88591_ENCODE.equals(getEncode(columnValue))) {
return new String(rs.getString(columnName).getBytes(ISO88591_ENCODE), GBK_ENCODE);
}
}
} catch (UnsupportedEncodingException e) {
logger.debug("StringTypeHandler encode Exception");
}
return rs.getString(columnName);
}
public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
return cs.getString(columnIndex);
}
//返回编码格式
private String getEncode(String str) {
String encode = null;
if (verifyEncode(str, GBK_ENCODE)) {
encode = GBK_ENCODE;
} else if (verifyEncode(str, ISO88591_ENCODE)) {
encode = ISO88591_ENCODE;
} else if (verifyEncode(str, UTF8_ENCODE)) {
encode = UTF8_ENCODE;
}
return encode;
}
//判断编码格式是否相符
private boolean verifyEncode(String str, String encode) {
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
return true;
}
} catch (UnsupportedEncodingException e) {
logger.debug("StringTypeHandler encode UnsupportedEncoding");
}
return false;
}
配置文件
<typeHandlers>
<typeHandler javaType="String" jdbcType="VARCHAR" handler="com.betdemo.interceptor.StringTypeHandler" />
</typeHandlers>
分享到:
相关推荐
3. **结果集映射**:在处理查询结果时,如果实体类中的字段类型与数据库字段的字符集不匹配,也会引发乱码。 4. **日志打印**:MyBatis的日志打印中,如果日志配置的编码与实际数据编码不符,也会造成乱码显示。 5...
JSQ+MyBatis+MySQL 中文乱码解决方案 中文乱码是 JSQ、MyBatis 和 MySQL 集成时常见的问题,解决这个问题需要从多方面入手。本文将从 JSP、MyBatis 和 MySQL 三个方面来解决中文乱码问题。 JSP 中文乱码解决方案 ...
4. 处理结果:获取查询结果,如果是单个结果,可以使用ResultMap进行映射。 5. 提交或回滚:在完成所有操作后,记得提交事务(SqlSession.commit())或者在出现异常时回滚(SqlSession.rollback())。 6. 关闭...
解决此类问题的关键在于确保整个数据处理链路中的字符编码一致,包括前端、服务器端、数据库连接字符串以及数据库本身。 1. **前端编码**:前端通常使用UTF-8编码发送请求,因此,确保前端页面和JavaScript代码的...
总结来说,解决Java中Spring MVC、MyBatis和MySQL中文乱码问题,需要对整个系统进行全方位的字符编码检查和设置,包括前端、后端、数据库以及代码本身。只要每个环节都按照UTF-8标准配置,中文乱码问题一般就能得到...
Oracle数据库的字符集设置、操作系统环境变量以及应用程序的配置之间需要保持一致,才能正确地处理和显示中文字符。以下是一些关于如何解决Oracle中文乱码问题的关键知识点: 1. **数据库字符集**: Oracle数据库...
综上所述,这个压缩包中的项目应该包含了一个完整的Spring Boot应用,其中集成了MyBatis和Redis,并且已经处理了可能出现的乱码问题。对于初学者或开发者来说,这是一个很好的参考实例,可以帮助他们理解如何在实际...
如果你的数据库中的数据是用UTF-8编码的,但在查询过程中没有正确地设置字符编码,那么Mybatis在映射数据到Java对象时可能会因为无法正确解析数据的编码而导致NULL值。 解决这类问题的步骤如下: 1. 检查Mybatis的...
这个工具是基于Mybatis框架的,主要用于生成Mapper接口、Mapper XML文件以及对应的Java Bean类,使得在数据库操作相关的编码工作中能够更加便捷。 在Mybatis-Generatory中,主要涉及以下几个核心概念: 1. **逆向...
DAO(Data Access Object)接口则提供了对数据库操作的方法,包括查询、插入、更新和删除等。MBG通过解析数据库表结构,可以自动生成这些类和接口,这样开发者就可以专注于业务逻辑的实现,而不用关心基础的数据访问...
这个工具基于Java,与MyBatis框架紧密集成,支持XML配置和注解方式,适用于各种数据库环境。 在使用MyBatis-SQL生成器时,首先要理解其核心组件和工作原理。该生成器通过读取配置文件(通常为generatorConfig.xml)...
MyBatis逆向工程是一种强大的工具,它可以帮助开发者快速生成基于数据库表的Java实体类(POJOs)、Mapper接口及XML映射文件,极大地提高了开发效率。在这个名为"mybatis逆向工程,带中文注释"的项目中,我们将探讨...
3. `乱码处理.txt` 可能是关于如何处理字符编码问题的说明,因为在数据库操作中,正确处理字符编码是至关重要的。 4. `myBatis01` 这个文件名没有明确的扩展名,可能是myBatis的映射文件(Mapper XML文件),或者是...
MyBatis是一个强大的Java持久层框架,它允许开发者将SQL语句与Java代码分离,提供了一种灵活的方式来处理数据库操作。在本高级映射实例中,我们将深入探讨如何使用XML方式编写Mapper文件,以及如何利用关联嵌套和...
- 使用MyBatis进行数据库操作,编写Mapper接口和XML配置文件,定义SQL查询。 - 配置Spring与MyBatis的整合,如SqlSessionFactoryBean和DataSource,使Spring能够管理MyBatis的数据源和SqlSessionFactory。 - 解决...
MyBatis 是一个流行的持久层框架,它允许开发者将 SQL 查询与 Java 代码直接绑定,提供了一种简单而强大的方式来处理数据库操作。以下是一份详细的 MyBatis 开发环境搭建指南,包括必要的软件版本选择和配置步骤。 ...
当数据插入到数据库时,如果对应字段的字符集不支持所插入的字符,仍然会出现乱码。这里提到,数据库默认使用GBK字符集,对于越南文来说,这就导致了乱码问题。 解决方案是修改特定字段的字符集和校对规则。校对...
- 可以自定义MyBatis拦截器,对输入参数进行编码转换,或者在返回结果前进行解码处理。 6. **日志记录**: - 日志输出时,确保日志框架(如Log4j、SLF4J等)的配置文件中指定了正确的字符集,避免在打印SQL语句时...
主要涉及技术包含Maven、Spring、SpringBoot、MyBatis、Redis等。 项目前端模板引擎使用Thymeleaf,数据源使用Druid。 使用注意 1、开发工具的选择 本项目使用 Intellij IDEA 2019.3.5 版本开发,若使用 Eclipse/...
通过上述步骤,我们可以使用MyBatis方便地进行单表查询,无论是获取全部数据,还是根据条件筛选,MyBatis都能提供高效、灵活的支持。在实际项目中,理解并熟练掌握这些基本操作,对于提升开发效率和代码质量有着至关...