使用MyBatis XML映射器resultMap或resultType时,是否有一种简单的方法可以从char类型列中修剪空格?或者我是否需要编写自定义类型处理程序/添加代码到我的JavaBean setter?
答案 0 :(得分:0)
执行此操作的最佳方法是创建将使用的类型处理程序,而不是默认的StringTypeHandler
。如果XML上有一个标志,那将会更方便。
答案 1 :(得分:0)
这是一个简单的示例,用于删除TypeHandlers – MyBatis 3之后的VARCHAR列中的空格。
package com.foo.bar.mybatis.handler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
@MappedJdbcTypes(JdbcType.VARCHAR)
public class StringTrimTypeHandler extends BaseTypeHandler<String> {
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
System.out.println("StringSpaceTypeHandler.getNullableResult(ResultSet rs, String columnName) [rs=" + rs + ", columnName=" + columnName + "]");
return rs.getString(columnName);
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
System.out.println("StringSpaceTypeHandler.getNullableResult(ResultSet rs, int columnIndex) [rs=" + rs + ", columnIndex=" + columnIndex + "]");
return rs.getString(columnIndex);
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
System.out.println("StringSpaceTypeHandler.getNullableResult(CallableStatement cs, int columnIndex) [cs=" + cs + ", columnIndex=" + columnIndex + "]");
return cs.getString(columnIndex);
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
System.out.println("StringSpaceTypeHandler.setNonNullParameter() [ps=" + ps + ", i=" + i + ", parameter=" + parameter + ", jdbcType=" + jdbcType + "]");
parameter = parameter.trim();
ps.setString(i, parameter);
}
}
关键部分是在setNonNullParameter()
方法中使用trim()来删除标题和尾部空白,然后再将其传递给PreparedStatement
。
创建StringTrimTypeHandler
类后,您需要在mybatis-config.xml
中对其进行配置。
<!-- mybatis-config.xml -->
<configuration>
.....
<typeHandlers>
<typeHandler handler="com.foo.bar.mybatis.handler.StringTrimTypeHandler"/>
</typeHandlers>
.....
</configuration>
然后您可以在MyBatis中配置logging – MyBatis 3来查看实际的sql参数。