Jun*_* Oh 6 null ibatis map mybatis typehandler
我正在做一个使用Spring 3.1.1和MyBatis3.0的项目.
我正在尝试将iBatis更改为MyBatis.但是,我正在努力使用resultmap.
使用iBatis时,我可以使用'nullValue'处理来自下面的查询中的值.
<resultMap class="java.util.HashMap" id="ChannelData">
<result property="id" javaType="java.lang.String" column="CHANNEL_ID" nullValue=""/>
<result property="code" column="SELECTSCOPE" nullValue="Television"/>
</resultMap>
Run Code Online (Sandbox Code Playgroud)
问题是MyBatis中没有'nullValue'.此外,如果列为"null",则mybatis永远不会填充该元素.例如.如果'SELECTSCOPE'为空,则会带来{id=aaa}.我需要一些像这样的数据 - > {id=aaa, code=''}.无论如何要处理这个?
PS
我查询超过20列.其中一些需要""当值为null时,其他人有自己的默认值一些字符串值.(如果我使用iBatis,'nullValue'是魔术关键字)我发现一些链接建议使用自定义类型处理程序,但使处理程序超过20可能是未来修复或维护混乱的原因.我需要一些简单的方法.
非常感谢:D
================================================== ====================================
我找到了带来一些空值的方法.它需要一些配置.
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL MAP Config 3.1//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="callSettersOnNulls" value="true"/> </settings> </configuration>
现在,我可以得到{id="aaa", code = null}.这是另外一个问题.如何设置查询的默认值?例如.如果'code'的值为null,那么我想把默认字符串'default'.所以结果应该改变形式
{id="aaa", code=null}来{id="aaa",code="default"}.可能吗?
谢谢〜
我想我可以为自己提出一个答案。但不知怎的,感觉效率不高。我制作了一个 TypeHandlerClass ,它实现了接口“org.apache.ibatis.type.TypeHandler”。源代码如下。
public class EmptyStringIfNull implements TypeHandler<String> {
@Override
public String getResult(ResultSet rs, String columnName) throws SQLException {
return (rs.getString(columnName) == null) ? "" : rs.getString(columnName);
}
@Override
public String getResult(ResultSet rs, int columnIndex) throws SQLException {
return (rs.getString(columnIndex) == null) ? "" : rs.getString(columnIndex);
}
@Override
public String getResult(CallableStatement cs, int columnIndex)
throws SQLException {
return (cs.getString(columnIndex) == null) ? "" : cs.getString(columnIndex);
}
@Override
public void setParameter(PreparedStatement ps, int arg1, String str,
JdbcType jdbcType) throws SQLException {
}
};
Run Code Online (Sandbox Code Playgroud)
所以我将其链接到 resultMap 元素“typehandler”中,如下所示:
<resultMap type="map" id="channel">
<result property="id" column="CHANNEL_ID" typeHandler="StringHandler"/>
<result property="code" column="SELECTSCOPE" typeHandler="StringHandler"/>
</resultMap>
Run Code Online (Sandbox Code Playgroud)
但我还有其他问题。我发现我可以在这个 .java 代码中添加一些 defaultValue 。但resultMap有很多结果。如果每个结果都有自己特定的默认值,如何处理?
在java代码中使用'if else'填充效率低下,因为其中一些不需要检查值,它们只需要检查是否为null。建议您聪明的解决方案:D Thanx