mybatis解析异常

1.问题现象

Caused by: org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'sale_id' from result set.  Cause: java.sql.SQLException: Cannot convert value 'é宿µè¯' from column 19 to TIMESTAMP.

造成原因:需要给表中中增加字段以满足业务需求

2.问题原因

2.1dao层实体

@Data
@Builder
public class OppJobPO {
    /**
     * 主键ID
     */
    private Long id;

    /**
     * 帖子标题
     */
    private String postTitle;
    /**
     * 帖子URL
     */
    private String postUrl;
    /**
     * 帖子上架时间
     */
    private Date postCreatedTime;
    
    
}

2.2 mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="OppJobDao">
    <resultMap id="OppJobResultMap" type="OppJobPO">
        <id column="id" property="id" jdbcType="BIGINT"/>
    
        <result column="post_title" property="postTitle" jdbcType="LONGVARCHAR"/>
        <result column="post_url" property="postUrl" jdbcType="LONGVARCHAR"/>
        <result column="post_created_time" property="postCreatedTime" jdbcType="TIMESTAMP"/>

    </resultMap>
    <sql id="Base_Column_List">
        id,post_title,post_created_time,post_url
    </sql>
    <select id="queryByOppId" parameterType="java.util.Map" resultMap="OppJobResultMap">
        select
        <include refid="Base_Column_List"/>
        from opp_jobs
        order by created_time desc
    </select>
    </mapper>

2.3 错误原因

        因为OppJobPO使用了@Builder注解,会默认提供一个全参数的构造器,导致mybatis在解析会将查询的结果完全按照构造器的字段类型进行映射解析,实体的字段顺序和查询的字段顺序不一致,导致实体解析报错。

 

3.结论

a.xml映射的dao层实体最好存在默认的无参数构造器

b.若dao层实体仅存在全参构造器,需要保证查询的字段顺序与构造器的参数顺序完全一致。查询字段缺失或者不一致都会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值