博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis resultMap空值映射问题解决
阅读量:5946 次
发布时间:2019-06-19

本文共 2408 字,大约阅读时间需要 8 分钟。

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中已经移除。

参考链接http://stackoverflow.com/questions/22852383/how-to-change-valuenull-to-empty-string-from-query-when-using-mybatis

转载地址:http://bzbxx.baihongyu.com/

你可能感兴趣的文章
【前端性能】必须要掌握的原生JS实现JQuery
查看>>
mysql系统变量
查看>>
svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
查看>>
JavaScript 编码规范(中文/Airbnb公司版)
查看>>
DNX/ASP.NET 5的xUnit入门向导
查看>>
正则表达式—匹配连续重复的字符
查看>>
如何在一个月内改善你的生活
查看>>
beyond compare比较工具设置
查看>>
Java中的事务
查看>>
Spring Ajax一个简单样例
查看>>
传递给数据库 'master' 中的日志扫描操作的日志扫描号无效
查看>>
导入https证书
查看>>
SAP R3和JAVA交换数据之JCO
查看>>
近期给朋友推荐的笔记本型号
查看>>
sqlserver使用存储过程发送http请求
查看>>
oracle 相关操作
查看>>
JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
查看>>
activeMQ安全配置及常见问题解决
查看>>
实作 ASP.NET 多笔数据离线编辑(转)
查看>>
solr的用分布式搜索(转)
查看>>