【报错记录】mybatis映射对应的类没有无参构造引发的问题

写了一个联表查询文件记录及文件标签的SQL:

<select id="selectDataFileVoList" resultMap="dataFileVo">
        SELECT
        df.id AS id,
        df.file_name,
        df.file_url,
        df.file_size,
        df.extend_name,
        df.category_name,
        df.file_extracts,
        df.create_time,
        df.update_time,
        df.`remark`,
        dt.id AS tag_id,
        dt.tag_name AS tag_name
        FROM (
        SELECT id,
        file_name,
        file_url,
        file_size,
        extend_name,
        category_name,
        file_extracts,
        create_time,
        update_time,
        remark
        FROM data_file
        <where>
            <if test="fileName != null  and fileName != ''">
                AND file_name like concat('%',#{fileName},'%')
            </if>
            <if test="fileUrl != null">
                AND file_url = #{fileUrl}
            </if>
            <if test="extendName != null">
                AND `extend_name` = #{extendName}
            </if>
            <if test="categoryName != null">
                AND `category_name` = #{categoryName}
            </if>
            <if test="tagId != null">
                AND id IN
                (SELECT file_id FROM data_file_tag WHERE tag_id = #{tagId})
            </if>
        </where>
        ) df
        LEFT JOIN data_file_tag dft ON df.id = dft.file_id
        LEFT JOIN data_tag dt ON dt.id = dft.tag_id
    </select>

这个SQL查询出现报错,Cause: java.lang.IllegalArgumentException: argument type mismatch.参数不匹配。

mabatis的映射为:

    <resultMap id="dataFileVo" type="cn.lycode.data.domain.vo.DataFileVo">
        <id column="id" property="id"/>
        <result column="file_name" property="fileName"/>
        <result column="file_url" property="fileUrl"/>
        <result column="file_size" property="fileSize"/>
        <result column="extend_name" property="extendName"/>
        <result column="category_name" property="categoryName"/>
        <result column="file_extracts" property="fileExtracts"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <result column="remark" property="remark"/>
        <collection property="tagVoList" ofType="cn.lycode.data.domain.vo.DataTagVo">
            <id column="tag_id" property="id"/>
            <result column="tag_name" property="tagName"/>
        </collection>
    </resultMap>

发现如果最后一个List内容没有的的话就不报错, 有就会报不匹配的错误。

没查出什么原因,准备先注释掉最后的集合映射。

        <collection property="tagVoList" ofType="cn.lycode.data.domain.vo.DataTagVo">
            <id column="tag_id" property="id"/>
            <result column="tag_name" property="tagName"/>
        </collection>

然后发现报错内容变为越界异常:Error querying database. Cause: java.lang.IndexOutOfBoundsException:

按理说mybatis映射并没有要求实体类和映射的字段必须全部包含呀?
后面在查到原因是:自定义实体类没有无参构造方法。
参考:https://blog.csdn.net/qq_42429057/article/details/125613076

实体类源码:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class DataFileVo {
    /**
     * 主键
     */
    private Long id;

    /**
     * 文件名
     */
    @Excel(name = "文件名")
    private String fileName;

    /**
     * 文件url
     */
    @Excel(name = "文件url")
    private String fileUrl;

    /**
     * 文件大小
     */
    @Excel(name = "文件大小")
    private Long fileSize;

    /**
     * 文件类型
     */
    @Excel(name = "文件类型")
    private String extendName;

    /**
     * 文件分类
     */
    @Excel(name = "文件分类")
    private String categoryName;
    /**
     * 文件摘要
     */
    @Excel(name = "文件摘要")
    private String fileExtracts;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 备注
     */
    private String remark;
    
    /**
     * 文件标签
     */
    @Excel(name = "文件标签")
    private List<DataTagVo> tagVoList;

总结

遇到 Cause: java.lang.IllegalArgumentException: argument type mismatch. 或者 Cause: java.lang.IndexOutOfBoundsException 先看看实体类是不是缺少了无参构造函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甲 烷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值