【Mybatis异常】nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter

简介: 【Mybatis异常】nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter

一、背景描述

项目说明:Spring boot (v2.0.0 RELEASE) + Mybatis-Plus (v3.1.1 RELEASE)

最近在项目中调试接口的时候遇到这样一个问题,mybatis解析时出错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'deptId' in 'class java.lang.String',如下图所示:

二、错误原因

正常情况下,我们都知道mybatis在进行参数判断的时候,直接可以用 就可以了,使用entity实体或者Map的时候,下面的代码是正确的:

下面是重点哦:

但是单个参数和多参数的判断有个不同点,当我们的入参为entity实体,或者map的时候,使用 if 参数判断没任何问题。但是当我们的入参为java.lang.Integer 或者 java.lang.String的时候,这时候就需要注意一些事情了。

我们需要使用 if 参数判断 引入参数,会抛异常nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'deptId' in 'class java.lang.String'

<select id="queryList" resultType="com.soft.back.model.OutdevFactory"
      parameterType="java.lang.String">
  select
      <include refid="Base_Column_List"/>
  from op_outdev_factory
  <where>
      <if test="factoryName != null">
    and name like concat('%',#{factoryName},'%')
      </if>
  </where>
</select>

至于原因嘛就是对于这类单个入参然后用 if 判断的,mybatis有自己的内置对象,Mybatis默认采用OGNL解析参数,所以会自动采用对象树的形式取 string.xxx 值,如果没在在方法中定义,则会抛异常报错。

三、解决方案

方案一:把 #{xxx} 修改为 #{_parameter}

<select id="queryList" resultType="com.soft.back.model.OutdevFactory"
      parameterType="java.lang.String">
  select
      <include refid="Base_Column_List"/>
  from op_outdev_factory
  <where>
      <if test="_parameter != null">
    and name like concat('%',#{_parameter},'%')
      </if>
  </where>
</select>

方案二:在方法中提前定义

/**
 * 查询厂家列表
 * @param factoryName
 * @return
 */
List<OutdevFactory> getFactoryList(@Param("factoryName") String factoryName);
<select id="queryList" resultType="com.soft.back.model.OutdevFactory"
      parameterType="java.lang.String">
  select
      <include refid="Base_Column_List"/>
  from op_outdev_factory
  <where>
      <if test="factoryName!= null">
    and name like concat('%',#{factoryName},'%')
      </if>
  </where>
</select>

 

注意事项:其他mybatis的版本不知道有没有这个问题,暂时不知道。

 

 

 

完结!


相关文章
|
监控 安全 Java
SpringBoot-开启Admin监控服务
本文介绍如何在SpringBoot项目中开启Admin监控服务。
505 0
|
存储 数据库
Navicate 如何导出数据库中的存储过程、事件、视图等?
Navicate 如何导出数据库中的存储过程、事件、视图等?
1039 0
|
XML JSON API
高效使用 Postman:如何正确传递 Query、Path 和 Body 参数
Postman 作为一个功能强大的工具,极大地简化了 API 测试和调试的过程,提供了发送请求和检查响应的直接方法。本文将着重介绍如何在 Postman 中高效地处理请求参数,以提高 API 测试和开发的便利性。
|
存储
若依框架 --- pdf文件上传预览功能实现
若依框架 --- pdf文件上传预览功能实现
1146 0
|
8月前
|
前端开发 Java Spring
SpringBoot之异步调用@Ansyc
本文介绍了在Spring Boot中实现异步任务的方法,通过在启动类或线程池配置类上添加`@EnableAsync`注解开启异步功能。详细说明了线程池属性类的定义,包括核心线程数、最大线程数、队列容量等参数配置。同时,文章指出需要在目标方法上使用`@Async`注解以实现异步执行,并列举了`@Async`注解失效的多种情况,如方法被`static`修饰、类未被Spring扫描、方法调用者与被调用方法在同一类中等。此外,还探讨了解决事务与异步之间矛盾的方案,强调了正确使用`@Transactional`注解的重要性。
706 8
|
XML Java 数据库连接
解决在mybatis中出现的org.apache.ibatis.exceptions.PersistenceException~
解决在mybatis中出现的org.apache.ibatis.exceptions.PersistenceException~
2479 0
|
Java Spring
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
1980 0
|
前端开发 JavaScript
【定制需求】el-tree 树形控件实现:每级可单独选择,选择父级不选中子集,子集全部选中不自动选中父级,手写按钮可支持子集全选,以及取消子集全选,el-tree 树形控件取消父子级联动选择
【定制需求】el-tree 树形控件实现:每级可单独选择,选择父级不选中子集,子集全部选中不自动选中父级,手写按钮可支持子集全选,以及取消子集全选,el-tree 树形控件取消父子级联动选择
1471 0
|
SQL Java 关系型数据库
【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能
【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能
1315 0
【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能
|
前端开发
若依修改,配置了一个接口路径出现了,如何放通接口{ “msg“: “请求访问:/code/list,认证失败,无法访问系统资源“, “code“: 401}
若依修改,配置了一个接口路径出现了,如何放通接口{ “msg“: “请求访问:/code/list,认证失败,无法访问系统资源“, “code“: 401}