1、现象
mybatis版本从3.4.2升级到3.5.6之后,碰到一个问题select 值为空的问题,在3.4.2的版本下可以正常筛选出来。对应的mapper.xml文件如下所示。 结果digtAccArId字段为空,crdtfwdfacepicfilerte不为空。
<?xml vsersion="1.0" encoding="UTF-8"?>
<sqlMap namespace="xxxx">
<resultMap id = "baseResult" type="com.test.info.testPO">
<result column ="Digt_Acc_Ar_ID" property = "digtAccArId" />
<result column ="CrdtFwdFacePicFileRte" property = "crdtfwdfacepicfilerte" />
</resultMap>
<sql id = "base_list">
Digt_Acc_Ar_ID as digtAccArId,
CrdtFwdFacePicFileRte as crdtfwdfacepicfilerte
</sql>
</sqlMap>
2、概要分析
首先列举一下mybaits的数据库列和java的PO字段的映射方式:
-
通过select ... as的这种加别名的方式映射
-
通过resultMap的方式映射
-
通过数据库表列明与PO字段名字相似的方式,并开启mapUnderscoreToCamelCase
下面通过举例说明
com.test.info.po的结构如下
public Class TestPO {
private String digtAccArId;
private String crdtfwdfacepicfilerte;
}
数据库表结构如下
create table test
(
Digt_Acc_Ar_ID varchar(23),
CrdtFwdFacePicFileRte varchar(10)
)
方式一、通过select ... as的这种加别名的方式映射,as后的字段是和PO的属性一致
<sql id = "base_list">
Digt_Acc_Ar_ID as digtAccArId,
CrdtFwdFacePicFileRte as crdtfwdfacepicfilerte
</sql>
方式二、通过result