当前位置: 首页 > article >正文

【报错记录】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 先看看实体类是不是缺少了无参构造函数


http://www.kler.cn/a/226801.html

相关文章:

  • NUXTJS安装始终报错无法正常运行问题解决
  • T113-Pro的buildroot添加gdisk ( GPT disks )出现gptfdisk needs a toolchain w/ C++的解决方法
  • 业务流程自动化平台在制造业应用案例,助力业务自动化、智能化
  • QSlider使用笔记
  • 029 命令行传递参数
  • 云尘 -- 铁三域控
  • 2402d,d的内存库设计
  • Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”
  • Oracle分析SQL执行调优
  • 三门问题(Python运算蒙提霍尔问题)
  • 学习方法分享
  • Http请求Cookie失效问题
  • 深入了解Flutter中的Sliver:介绍与使用场景
  • 基于SpringBoot开发的校刊投稿系统[附源码]
  • 美国服务器地址和端口及密码
  • 如何选择最适合的服务器
  • 线性代数------矩阵的运算和逆矩阵
  • 《PyTorch基础教程》01 搭建环境 基于Docker搭建ubuntu22+Python3.10+Pytorch2+cuda11+jupyter的开发环境
  • MySQL系统配置
  • 【微服务】skywalking自定义链路追踪与日志采集