1

使用 MyBatis XML 映射器 resultMap 或 resultType 时,是否有一种简单的方法可以从 char 类型的列中删除空格?或者我是否需要编写自定义类型处理程序/将代码添加到我的 JavaBean 设置器?

4

2 回答 2

1

这是一个从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);
    }

}

关键部分是在方法中使用trim()setNonNullParameter()将其传递给PreparedStatement.

创建StringTrimTypeHandler类后,您需要在mybatis-config.xml.

<!-- mybatis-config.xml -->

<configuration>
.....
    <typeHandlers>
        <typeHandler handler="com.foo.bar.mybatis.handler.StringTrimTypeHandler"/>
    </typeHandlers>
.....
</configuration>

You then could config logging – MyBatis 3 in MyBatis to see the actual the sql parameter.

于 2020-07-02T10:00:46.510 回答
0

最好的方法是创建一个类型处理程序来代替默认的StringTypeHandler. 不过,如果 XML 上有一个标志会更方便。

于 2011-07-07T15:49:02.970 回答