Java 在iBatis结果映射中返回常量

Java 在iBatis结果映射中返回常量,java,ibatis,Java,Ibatis,我设置了一个resultMap,其中包含许多结果元素。我希望能够设置一个常量作为结果之一。所以不是 <result property="name" column="Name"/> 我希望能够确保该名称将作为字符串“Joe”返回。在理想情况下,我会将查询更改为返回此常量,但不幸的是,这不是我的选项。我已经扫描了iBatis dtd,无法找到合适的属性。我知道我可以迭代从iBatis返回的列表,但我更希望能够在iBatis映射中完成。谢谢如果不能更改sql,请尝试更改映射对象的Se

我设置了一个resultMap,其中包含许多结果元素。我希望能够设置一个常量作为结果之一。所以不是

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


我希望能够确保该名称将作为字符串“Joe”返回。在理想情况下,我会将查询更改为返回此常量,但不幸的是,这不是我的选项。我已经扫描了iBatis dtd,无法找到合适的属性。我知道我可以迭代从iBatis返回的列表,但我更希望能够在iBatis映射中完成。谢谢

如果不能更改sql,请尝试更改映射对象的Setter方法

public void setName(String name) {
    this.name = "Joe";
}

在我们的项目中,我们使用下面的解决方案处理DB值,例如布尔值

ABC-sqlmaps.xml

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


可能使用相同的配置,您将能够定义常量。

YesNoTypeHandler.java与Mybatis 3兼容:

ABC-sqlmaps.xml

<resultMap id="resultMapABC" class="com.abc.dto.ABC">
        ...
        <result property="isA" column="is_a" typeHandler="YesNoTypeHandler"/>
        ...
</resultMap>
<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>
<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.sql.CallableStatement;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入org.apache.ibatis.type.JdbcType;
导入org.apache.ibatis.type.TypeHandler;
公共类YesNoTypeHandler实现TypeHandler{
@凌驾
公共void setParameter(PreparedStatement paramPreparedStatement、int paramInt、Object paramObject、JdbcType paramJdbcType)引发SQLException{
if(paramObject==null){
paramPreparedStatement.setString(paramInt,“N”);
}
否则{
布尔值=(布尔)参数对象;
paramPreparedStatement.setString(paramInt,值?“Y”:“N”);
}
}
@凌驾
公共对象getResult(ResultSet getter、String columnLabel)引发SQLException{
字符串值=getter.getString(columnLabel);
if(getter.wasNull()){return false;}
返回“Y”。相等信号情况(值);
}
@凌驾
公共对象getResult(CallableStatement cs,int ColumnB)引发SQLException{
字符串值=cs.getString(columnB);
if(cs.wasNull()){return false;}
布尔布尔布尔值=“Y”。相等信号情况(值);
返回布尔值;
}
}