我有一个resultMap,其中设置了许多结果元素。我希望能够将常量设置为结果之一。所以代替

<result property="name" column="Name"/>


我希望能够确保该名称以字符串'Joe'的形式返回。在理想的世界中,我希望更改查询以返回此常数,但不幸的是,这对我来说不是一个选择。我已经扫描了iBatis dtd,但是找不到合适的属性。我知道我可以遍历从iBatis返回的列表,但是我希望能够在iBatis映射中进行操作。谢谢

最佳答案

YesNoTypeHandler.java与Mybatis 3兼容:

ABC-sqlmaps.xml

<resultMap id="resultMapABC" class="com.abc.dto.ABC">
        ...
        <result property="isA" column="is_a" typeHandler="YesNoTypeHandler"/>
        ...
</resultMap>


ibatis.xml

<sqlMapConfig>
    ...
    <typeAlias alias="YesNoTypeHandler" type="com.abc.dao.sqlmap.YesNoTypeHandler"/>
    <typeHandler javaType="boolean" jdbcType="BOOLCHAR" callback="YesNoTypeHandler"/>
    ...
</sqlMapConfig>




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

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

public class YesNoTypeHandler implements TypeHandler {

    @Override
    public void setParameter(PreparedStatement paramPreparedStatement, int paramInt, Object paramObject, JdbcType paramJdbcType) throws SQLException {
        if (paramObject == null) {
            paramPreparedStatement.setString(paramInt, "N");
        }
        else {
            Boolean value = (Boolean) paramObject;

            paramPreparedStatement.setString(paramInt, value ? "Y" : "N");
        }
    }


    @Override
    public Object getResult(ResultSet getter, String columnLabel) throws SQLException {
        String value = getter.getString(columnLabel);
        if (getter.wasNull()) { return false; }
        return "Y".equalsIgnoreCase(value);

    }

    @Override
    public Object getResult(CallableStatement cs, int columnNb) throws SQLException {
        String value = cs.getString(columnNb);
        if (cs.wasNull()) { return false; }
        Boolean BoolValue = "Y".equalsIgnoreCase(value);
        return BoolValue;
    }
}

关于java - 在iBatis resultMap中返回常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6775039/

10-10 17:02