mybatis参数类型不匹配错误argument type mismatch的处理方案

目录
  • 参数类型不匹配错误argument type mismatch
    • 错误日志
    • 错误描述
    • 错误原因
  • mybatis时argument type mismatch的坑
    • 错误描述:参数类型不匹配
    • 例如

参数类型不匹配错误argument type mismatch

错误日志

java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error selecting key or setting result to parameter object. Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id’ of ‘class xxxxxxxx’ with value ‘37997’ Cause: java.lang.IllegalArgumentException: argument type mismatch
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error selecting key or setting result to parameter object. Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id’ of ‘class com.fshows.lifecircle.marketcore.service.dal.lifecircle.dataobject.TpLifecircleQuotaDO’ with value ‘37997’ Cause: java.lang.IllegalArgumentException: argument type mismatch

错误描述

根据字面意思就是:参数类型不匹配

实际就是某个参数存储的,与传入的参数类型不一致

错误代码

错误原因

在mybatis:gen生成代码的时候,这个id参数生成类型resultType=“java.lang.Long”,但实际数据库类型是int,应该对应resultType=“java.lang.Integer”

只要将Long改为Integer,与数据库对应即可。

mybatis时argument type mismatch的坑

错误描述:参数类型不匹配

常见错误中 mybatis映射出现问题无非就

column名字错误、property字段名错误、resultMap id写错了 没对上、映射实体类属性类型和数据库字段类型对不上,

这个一般都是比较容易想到和发现的。

但是某一天 映射实体类 因为某些地方要数据处理,你写了一个有参构造,而没把无参构造补上,这时mybatis在映射的时候 (映射首先要创建对象) 就会出现异常,而此时的参数类型不匹配 正是指的构造参数类型不匹配 而非数据字段和属性不匹配!

例如

new PeopleVO(People p) 和 new People() debug下可以看到会报错参数People类型错误

所以在开发中 该遵循的规则 还是要遵循,相信不少人在初学java的时候 一定听过 写了有参构造一定要手动把无参构造写上,当时我想的是 要是用上无参构造new对象 编译器也会提示,用的时候在new也不迟 况且还不一定用得上,

可是在mybatis映射的时候 想不到吧 人家反射创建对象了… 不由感慨 前人的总结都是踩了无数坑的基础上建立起来的,那些表面看起来不会有问题的代码 可能会以某种意想不到的形式出现bug

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决mybatisplus插入报错argument type mismatch的问题

    今天使用argument type mismatch发现插入的时候报错 java.lang.IllegalArgumentException: argument type mismatch 从错误中看是参数的问题,想到我再实体类里面定义了几个在数据库中没有的字段,就使用了 @TableField(exist = false) 来排除掉这个字段. 再跑发现还是这个错误,后来看了下主键的@TableId默认的type是IdType.NONE,想想我们应该用自增的id就手动增加了一个 @TableId

  • 解决MyBatis @param注解参数类型错误异常的问题

    问题现象 今天使用mybatis遇到个很奇怪的问题,我使用一个参数@param("threshold"),类型是java的double,但是很奇怪,一直告诉我参数转换错误,int不能转double,我就奇怪了,哪里来的int. 解决办法 我感觉可能使用用到了mybatis的关键字,所以就把threshold换了个名字,果然好了. 问题原因 某些关键词,mybatis会认为是某种类型,下面列出来一些,后面发现再补充. size, threshold, modCount是int类型 loa

  • MyBatis 参数类型为String时常见问题及解决方法

    1. 参数为String时的插值问题 假设有下面一Dao接口方法 public Account findByAccountType (String type)throws DaoException; 对应的Mapper.xml <select id="findByAccountType " parameterType="string" resultType="account"> select * form account <wh

  • mybatis参数类型不匹配错误argument type mismatch的处理方案

    目录 参数类型不匹配错误argument type mismatch 错误日志 错误描述 错误原因 mybatis时argument type mismatch的坑 错误描述:参数类型不匹配 例如 参数类型不匹配错误argument type mismatch 错误日志 java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.execu

  • java方法重载和参数类型自动提升方式

    目录 方法重载和参数类型自动提升 方法重载的意思是 对于基本类型数据而言 java基本类型重载 1.重载 2.基本类型重载 3.代码示例 4.重载解析过程 5.可行集获取的原则 方法重载和参数类型自动提升 方法重载的意思是 一个类中可以由多个方法具有相同的名字,但这些方法的参数必须不同, 参数不同是指满足下列之一: 参数的个数不同 参数的个数相同,但参数列表中对相应的某个参数的类型不同 对于基本类型数据而言 参数类型存在自动提升 以byte a = 1为例,存在如下自动提升方式: byte–>

  • mybatis自定义参数类型转换器数据库字段加密脱敏

    目录 1 问题背景 2 解决方案 2.1 使用数据库加密算法 2.2 使用mybatis的自定义参数类型转换器 3 一般web项目使用 3.1 创建自定义Java类型 3.2 自定义类的转换处理器 3.3 配置自定义类型和类型转换器 3.4 查询使用 3.5 新增修改使用 4. springboot项目使用 4.1 配置自定义类型和类型转换器 4.2 mybatis-plus的使用 1 问题背景 在数据库存储人员的信息时,有一些信息是敏感数据,如身份证号.出生地等.为了防止信息泄漏,这些信息不允

  • 详解Mybatis 传递参数类型为List的取值问题

    问题描述: 参数传递为List时: 当传递一个 List 实例或者数组作为参数对象传给 Mybatis.此时,Mybatis 会自动将它包装在一个 Map 中,用名称在作为键.List 实例将会以"list" 作为键,而数组实例将会以"array"作为键.所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map. DAO 层: List<User> selectUserByIDs( List ID

  • 基于MyBatis的parameterType传入参数类型

    目录 MyBatis的parameterType传入参数类型 1. MyBatis的传入参数parameterType类型分两种 2. 如何获取参数中的值 3.案例 mybatis 之parameterType="Long" MyBatis的parameterType传入参数类型 在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的输入参数

  • Java方法的可变参数类型实例分析

    Java方法中的可变参数类型是一个非常重要的概念,有着非常广泛的应用.本文就以实例形式对此加以分析.具体如下: 一般来说,许多Java初学者在看到下面的这段代码的时候,都会问一个问题:dealArray方法里那三个小点点是什么啊? public class TestVarArgus { public static void dealArray(int... intArray){ } public static void main(String args[]){ } } 这就是本文所要讨论的问题:

  • MyBatis resultMap id标签的错误使用方式

    目录 MyBatis resultMap id标签的错误使用 本节的问题主要是我对mybatis id标签的错误使用 resultMap标签的使用规则 自定义结果映射规则 association联合查询 使用association进行分布查询 collection分步查询 MyBatis resultMap id标签的错误使用 我们在编写VO对象,如果业务场景稍微复杂一点,就会用到集合属性.例如用户查看个人订单列表,每个订单又包含多种或者多个规格的商品. 本节的问题主要是我对mybatis id

  • typescript返回值类型和参数类型的具体使用

    目录 返回值类型 可缺省和可推断的返回值类型 Generator 函数的返回值 参数类型 可选参数和默认参数 剩余参数 返回值类型 在 JavaScript 中,我们知道一个函数可以没有显式 return,此时函数的返回值应该是 undefined: function fn() { // TODO } console.log(fn()); // => undefined 需要注意的是,在 TypeScript 中,如果我们显式声明函数的返回值类型为 undfined,将会得到如下所示的错误提醒.

随机推荐