Mybatis查询字段值得不到,显示为null

开发环境

SpringBoot 1.5 + JDK1.8 + Mybatis3.4

现象描述

现象

接口测试过程中发现,数据库里面好些字段有值,而postman显示的结果为null,而且有的字段可以显示有的不可以。

mapper代码

List<PcmArticleListDTO> selectAboutUs(String siteId);

xml代码

动态SQL
<sql id="selectAboutUsField">${alias}.CT_ID,${alias}.TITLE,${alias}.SUBTITLE,${alias}.CON,${alias}.CON_H5,${alias}.ABSTRACT,${alias}.AUTHOR,${alias}.CT_TIME,${alias}.KW,${alias}.IS_AUTODIS,${alias}.DIS_TIME,${alias}.AU_STATE,${alias}.PUB_STATE,${alias}.LIKE_NUM,${alias}.READ_NUM,${alias}.COVER_PATH,${alias}.CONTENT_TYP,${alias}.URL,${alias}.IS_TIMEING,${alias}.REMARK, ${alias}.CRT_TIME,${alias}.UPD_TIME,${alias}.TIMEING_DATE </sql>
  <select id="selectAboutUs" resultType="com.xxx.xxx.model.PcmArticleListDTO">
    select
    <include refid="selectAboutUsField">
      <property name="alias" value="t1"></property>
    </include>
    from PCM_ARTICLE t1
    left join PCM_SECTION_ARTICLE t2 on t1.CT_ID = t2.CT_ID
    where t1.PUB_STATE = '1'
    and t1.DEL_TAG = '0'
    and t2.SEC_SID = #{siteId}
    order by
    t2.ORDER_VAL,
    t1.PUB_TIME desc
  </select>

定义的映射关系
<resultMap id="PcmArticleListDTO" type="com.xxx.xxx.model.PcmArticleListDTO">
    <id column="CT_ID" jdbcType="VARCHAR" property="ctId" />
    <result column="TITLE" jdbcType="VARCHAR" property="title" />
    <result column="SUBTITLE" jdbcType="VARCHAR" property="subtitle" />
    <result column="CON" jdbcType="VARCHAR" property="con" />
    <result column="CON_H5" jdbcType="VARCHAR" property="conH5" />
    <result column="ABSTRACT" jdbcType="VARCHAR" property="abstracts" />
    <result column="AUTHOR" jdbcType="VARCHAR" property="author" />
    <result column="CT_TIME" jdbcType="TIMESTAMP" property="ctTime" />
    <result column="KW" jdbcType="VARCHAR" property="kw" />
    <result column="IS_AUTODIS" jdbcType="CHAR" property="isAutodis" />
    <result column="DIS_TIME" jdbcType="TIMESTAMP" property="disTime" />
    <result column="AU_STATE" jdbcType="CHAR" property="auState" />
    <result column="PUB_STATE" jdbcType="CHAR" property="pubState" />
    <result column="DEL_TAG" jdbcType="VARCHAR" property="delTag" />
    <result column="CRT_OPT" jdbcType="VARCHAR" property="crtOpt" />
    <result column="CRT_TIME" jdbcType="TIMESTAMP" property="crtTime" />
    <result column="UPD_OPT" jdbcType="VARCHAR" property="updOpt" />
    <result column="UPD_TIME" jdbcType="TIMESTAMP" property="updTime" />
    <result column="PUB_OPT" jdbcType="VARCHAR" property="pubOpt" />
    <result column="PUB_TIME" jdbcType="TIMESTAMP" property="pubTime" />
    <result column="LIKE_NUM" jdbcType="DECIMAL" property="likeNum" />
    <result column="READ_NUM" jdbcType="DECIMAL" property="readNum" />
    <result column="COVER_PATH" jdbcType="VARCHAR" property="coverPath" />
    <result column="CONTENT_TYP" jdbcType="CHAR" property="contentTyp" />
    <result column="URL" jdbcType="VARCHAR" property="url" />
    <result column="IS_TIMEING" jdbcType="CHAR" property="isTimeing" />
    <result column="TIMEING_DATE" jdbcType="TIMESTAMP" property="timeingDate" />
    <result column="REMARK" jdbcType="VARCHAR" property="remark" />
  </resultMap>


分析解决与总结

查看定义的pojo及对应的映射关系,没有发现异常。

跟之前代码比较发现,此处返回的值使用resultMap,而此处使用的resultType,会不会是这个问题引起的?

遂将此处的resultType,更换为resultMap,更换之后发现,均可以正常显示

总结

resultMap:适合pojo中属性名与数据库表名一致或不一致的情况,已经建立了对应关系(经过驼峰处理的字段)。 resultType:适合pojo中属性名与数据库表中列名完全一致的情况。

对比我的测试发现,TITLE,SUBTITLE这种字段在一种情况下可以正常显示,而CT_ID之类的字段则不能显示,验证了以上的说法。

resultMap通用性更高,建议优先使用。

转载于:https://my.oschina.net/u/3193075/blog/3067212

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值