Mybatis resultMap空值映射问题解决
来源:互联网 发布:php sqllite 编辑:程序博客网 时间:2024/05/17 08:23
转自文章 http://www.oschina.net/question/1032714_224673
Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的age字段没有值,Mybatis返回的map中只映射了 name和sex字段,而age字段则没有包含。
那么如何将age字段映射到map中呢。提供两种解决方法:
使用Mybatis config配置
创建configuration.xml
1
2
3
4
5
6
7
8
<?
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
>
配置Mybatis的SqlSessionFactoryBean
1
2
3
4
5
6
<
bean
id
=
"sqlSessionFactory"
class
=
"org.mybatis.spring.SqlSessionFactoryBean"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
<
property
name
=
"configLocation"
value
=
"classpath:/META-INF/spring/configuration. xml"
/>
<
property
name
=
"mapperLocations"
value
=
"classpath:/META-INF/spring/mybatis/modelMap/*.xml"
/>
</
bean
>
在这种配置中,age将以null值映射到map中。
如果想要配置age的默认值,则可以建立一个类,实现Mybatis的TypeHandler接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
}
<span></span>
@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) <span></span><span style=
"font-size:9pt;line-height:1.5;"
>
throws
SQLException {</span><span style=
"font-size:9pt;line-height:1.5;"
> }</span><span style=
"font-size:9pt;line-height:1.5;"
>}</span>
继续在resultMap中使用,即可配置age的默认值(上述代码中age的默认值为"")
1
2
3
4
5
<
resultMap
id
=
"list"
type
=
"java.util.LinkedHashMap"
>
<
result
property
=
"name"
column
=
"name"
/>
<
result
property
=
"sex"
column
=
"sex"
/>
<
result
property
=
"age"
column
=
"age"
typeHandler
=
"com.demo.EmptyStringIfNull"
/>
</
resultMap
>
网上有些资料中提到可以使用 defaultValue 和 nullValue的配置,但是这中配置是ibatis的用法,在Mybatis中已经移除。
写的不错,很有帮助,<setting name="callSettersOnNulls" value="true"/>好像需要mybatis3.2以上版本,实用的3.1.1启动就会出问题。
--- 共有 1 条评论 ---
- last确实是要3.2+以上的版本,谢谢指出(9个月前)
0 0
- Mybatis resultMap空值映射问题解决
- Mybatis resultMap空值映射问题解决
- Mybatis resultMap空值映射问题解决
- Mybatis resultMap空值映射问题解决
- MyBatis结果集映射(ResultMap)
- [mybatis]ResultMap输出结果映射
- Mybatis 输出映射-- resultType resultMap
- MyBatis输出映射为resultMap
- Mybatis ResultMap 无法继承父resultMap的映射关系
- Mybatis 高级结果映射 ResultMap Association Collection
- Mybatis 高级结果映射 ResultMap Association Collection
- Mybatis 高级结果映射 ResultMap Association Collection
- Mybatis 高级结果映射 ResultMap Association Collection
- 【Mybatis框架】输出映射-resultType与resultMap
- Mybatis 高级结果映射 ResultMap Association Collection
- Mybatis 高级结果映射 ResultMap Association Collection
- mybatis-SQL语句映射文件(1)resultMap
- Mybatis 高级结果映射 ResultMap Association Collection
- ucloud UDataArk 测试
- 中国剩余定理入门
- LeetCode 111 Minimum Depth of Binary Tree
- c# winfrom 在panel上绘制矩形
- Android防止重复点击深入
- Mybatis resultMap空值映射问题解决
- RPM包相关介绍
- POJ1423- 数学
- coderforce Codeforces Round #333 (Div. 1) A. The Two Routes
- RecycleBin 分析
- 行为驱动开发iOS
- PHP弱类型安全
- CCBR2015青年论坛总结
- mysql分表方法-----MRG_MyISAM引擎分表法