希望Mybatis插入布尔值为Y,N,而不是0,1

时间:2013-09-27 12:58:31

标签: mybatis

我正在使用MyBatis

将类实例写入MySQL数据库
// I have no control over how this java class is laid out -.-
class Hello {
    boolean isFriendly
}

我的MyBatis Mapper看起来像这样

<insert id="doHello" parameterType="Hello">
    insert into hello_table (
        is_friendly   --this is a varchar(1) btw
    )
    values (
      #{isFriendly}
    )
 </insert>

问题是它将值插入到数据库中为0或1,但我需要将其作为“N”或“Y” 我没有选择修改java

我正在尝试尽可能减少我的代码,理想情况下要将内容添加到Mybatis Mapper中

我尝试过像

这样的事情
 #{isFriendly,jdbcType=Boolean}

但它无效

3 个答案:

答案 0 :(得分:4)

MyBatis typeHandler是一种正确的方法。

您可以实现一个类型处理程序,然后在任何sql语句中使用它:

#{isFriendly, typeHandler=YesNoBooleanTypeHandler}

有关详细信息,请参阅MyBatis Java Boolean to Sql enum

答案 1 :(得分:2)

修改您的插入语句

insert into hello_table (
        is_friendly
    )values (${isFriendly=="0"?"'N'":"'Y'"})

答案 2 :(得分:0)

创建处理程序并将其添加到Mybatis配置中 创建处理程序


    import org.apache.ibatis.type.BaseTypeHandler;
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.MappedJdbcTypes;
    import org.apache.ibatis.type.MappedTypes;

    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    @MappedTypes(Boolean.class)
    @MappedJdbcTypes(JdbcType.CHAR)
    public class BooleanStringTypeHandler extends BaseTypeHandler {

        @Override
        public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
            preparedStatement.setString(i, aBoolean ? "Y" : "N");
        }
        @Override
        public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
            return getBoolean(resultSet.getString(s));
        }
        @Override
        public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
            return getBoolean(resultSet.getString(i));
        }
        @Override
        public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
            return getBoolean(callableStatement.getString(i));
        }
        private Boolean getBoolean(String s) {
            return "Y".equalsIgnoreCase(s);
        }
    }

在Mybatis配置中添加:

<typeHandlers>
    <typeHandler jdbcType="CHAR" javaType="java.lang.Boolean" handler="crm.data.trade.utils.BooleanStringTypeHandler"/>
</typeHandlers>