MyBatis常见报错问题及解决方案

这是一个出错的代码

public interface OrderInfoManageMapper {
  List<GetOrderInfoManageListReq> selectAllOrder();
  void modifyDelivery(int id);
  void removeOrder(int id);
  List<GetOrderInfoManageListReq> selectOrderById(@Param("id") Integer id);
}

一、报错:

1 There is no getter for property named 'id' in 'class java.lang.Integer'

检查mapper.xml文件,没错,如下:

<select id="selectOrderById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    SELECT DISTINCT
    order_info.id,
    user_info.user_name,
    order_info.order_status,
    order_info.pay_type,
    order_info.total_price,
    ship_address.ship_user_name,
    ship_address.ship_user_mobile,
    ship_address.ship_address,
    order_goods.goods_desc,
    order_goods.goods_sku,
    order_goods.goods_icon,
    order_goods.goods_price
    FROM
    order_info,
    user_info,
    ship_address,
    order_goods
    WHERE
    order_info.id = order_goods.order_id
    AND order_info.user_id = user_info.id
    AND order_info.ship_id = ship_address.id
    <if test="id!= null and id!= '' ">
      AND order_info.id = #{id}
    </if>
  </select>

检查mapper接口,如下:

public interface OrderInfoManageMapper {
  List<GetOrderInfoManageListReq> selectAllOrder();
  void modifyDelivery(int id);
  void removeOrder(int id);
  List<GetOrderInfoManageListReq> selectOrderById(Integer id);
}

看似没有问题,但是id的话,需要这么写(看最后一行):

public interface OrderInfoManageMapper {
  List<GetOrderInfoManageListReq> selectAllOrder();
  void modifyDelivery(int id);
  void removeOrder(int id);
  List<GetOrderInfoManageListReq> selectOrderById(@Param("id") Integer id);
}

二、sql没问题却报错:

java.sql.SQLException: 无效的列类型: 1111

原因是在mybatis中

 SELECT
 C_NAME1,
 C_NAME2
 FROM
 MY_TABLE
 WHERE
 1=1
 AND ID IN ({#param})

param是java传来的字符串 'id1','id2','id3'

此时就会报这个错误,因为使用in条件时不能用#,要使用$,如

 SELECT
 C_NAME1,
 C_NAME2
 FROM
 MY_TABLE
 WHERE
 1=1
 AND ID IN ({$param})

三、java想mybatis中传入‘a','b','c',放在in中

可能会这么写mybatis:

SELECT * FROM TABLE_NAME
 WHERE 1=1
 <if para!= null && para!="" >
 AND PARS in (#{para})
 </if>

java传过来的para为

String para = "'a','x','d','g'";

此时预期效果为

SELECT * FROM TABLE_NAME
 WHERE 1=1
 AND PARS in ('a','x','d','g')

但是判断会通过,值不会传入,会出现:

SELECT * FROM TABLE_NAME
 WHERE 1=1
 AND PARS in ()

将#换成$才可以。虽然#很安全

SELECT * FROM TABLE_NAME
WHERE 1=1
<if para!=null && para!="" >
AND PARS in (${para})
</if>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法

    Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法 一.问题描述 写好配置文件用JUnit进行测试,一运行就报错: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiat

  • 解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法

    mybatis-plus使用jdk8的LocalDateTime 查询时报错: org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'update_time' from result set.  Cause: java.sql.SQLFeatureNotSupportedException ; null; nested exception is java.sql.SQ

  • Mybatis返回int或者Integer类型报错的解决办法

    会报错如下: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Mapper method 'com.bill.springMybatis.dao.UserDao.getUserIdByName attempted to return null from a m

  • Mybatis批量更新报错问题

    下面给大家介绍mybatis批量更新报错问题, allowMultiQueries=true 后来发现是jdbc链接没有加允许批量更新操作的参数引起的,不加会报badsql,mysql版的mybatis批量更新操作如下 <update id="updateOrderOverdueStatus" parameterType="java.util.List"> <foreach collection="list" item=&quo

  • MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法

    最近在项目中有这么一段代码:下载服务器基础业务数据进行本地批量插入操作,因项目中使用mybatis进行持久化操作,故直接考虑使用mybatis的批量插入功能. 1.以下是Mapper接口的部分代码 public interface PrintMapper { @InsertProvider(type = PrintMapperProvider.class,method = "insertAllLotWithVehicleCode4H2") void insertAllLotWithVe

  • mybatis中foreach报错:_frch_item_0 not found的解决方法

    发现问题 在mybatis的动态sql中最常见的错误就是使用,比如:_frch_item_0 not found There is no getter for property named 'states' in 'class com.xingguo.model.User' 等等. 一般在使用时出现问题是由以下几种错误使用方式造成的: 1.参数类型不是List,特别当参数为实体类,一个属性为list时,注意collection的名字. 2.遍历时属性的名字或者字段错误 3.多个参数时没有使用@p

  • Oracle+Mybatis的foreach insert批量插入报错的快速解决办法

    最近做一个批量导入的需求,将多条记录批量插入数据库中. 解决思路:在程序中封装一个List集合对象,然后把该集合中的实体插入到数据库中,因为项目使用了MyBatis,所以打算使用MyBatis的foreach功能进行批量插入.期间遇到了"SQL 命令未正确结束 "的错误,最终解决,记录下来供以后查阅和学习. 首先,在网上参考了有关Mybatis的foreach insert的资料,具体如下: foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach

  • SpringBoot集成MybatisPlus报错的解决方案

    这篇文章主要介绍了SpringBoot集成MybatisPlus报错的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题 启动的时候总是报如下错误: java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class 解决方案 需要一个mybatis-spring-boot-starter的包,在pom文件加上之后,完

  • mybatis报错元素内容必须由格式正确的字符数据或标记组成异常的解决办法

    今天同事写一个查询接口的时候,出错:元素内容必须由格式正确的字符数据或标记组成. 错误原因:mybatis查询的时候,需要用到运算符 小于号:< 和大于号: >,在mybatis配置文件里面,这种会被认为是标签,所以解析错误 错误事例: select <include refid="Base_Column_List" /> from t_time_interval where status <> 99 and time_intvl_id >=2

  • MyBatis常见报错问题及解决方案

    这是一个出错的代码 public interface OrderInfoManageMapper { List<GetOrderInfoManageListReq> selectAllOrder(); void modifyDelivery(int id); void removeOrder(int id); List<GetOrderInfoManageListReq> selectOrderById(@Param("id") Integer id); } 一

  • Xcode8下iOS10常见报错闪退,字体适配和编译不过的问题及解决方案

    9月14日凌晨1点,苹果推送了iOS10,于是一上班就迅速升级了iOS10,然后坑就这样开始了... 问题1 首先是xcode的问题,发现xcode升级到8才能真机运行,于是先了解了下iOS10的适配. 有这个iOS10适配总结,还有这个iOS10适配问题收集整理,还有这个iOS10适配,还有很多其他的. 这个好办,取消nullabl关键字就好. 然后另一个蛋疼的问题来了 问题二,编译不过的问题 蛋疼的clang报错le.. 这个是详细的信息,一堆莫名其妙的东西出来了. 隐隐约约感觉是WGS84

  • 详解Maven项目Dependencies常见报错及解决方案

    个人最近项目中所遇到的问题,记录下便自己和同样遇到问题的小伙伴提供一个参考. 通常Maven里报红波浪线的常见问题 ①可能是子工程没有继承父工程 注意父工程中有中对应的module: <groupId>com.fred.parent</groupId> <artifactId>mall</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>

  • 超全面python常见报错以及解决方案梳理必收藏

    AttribteError: 'module' object has no attribute xxx' 描述:模块没有相关属性.可能出现的原因: 1.命名.py文件时,使用了Python保留字或者与模块名等相同. 解决:修改文件名 2.pyc文件中缓存了没有更新的代码. 解决:删除该库的.pyc 文件 AttributeError: 'Obj' object has no attribute 'attr' 描述:对象没有相关属性.可能出现的原因: 1.Python内置对象没有属性. 解决:去除

  • Python常见报错解决方案总结(新手拯救指南)

    目录 前言 01缩进错误(IndentationError) 02Tab 和空格混用(TabError) 03语法错误(SyntaxError) 04变量名错误(NameErro) 05索引错误(IndexError) 06键错误(KeyError) 07类型错误(TypeError) 08属性错误(AttributeError) 总结 前言 如果说写代码最害怕什么,那无疑是Bug.而对于新手来说,刚刚接触编程,在享受写代码的成就感时,往往也会被各式各样的Bug弄得晕头转向.今天,我们就做了一期

  • Vue常见报错以及解决方案实例总结

    目录 前言 一.报错结构 二.常见问题总结及解决方法 Mixed spaces and tabs Element is missing end tag TypeError: Cannot read properties of undefined (reading '...') TypeError: ...forEach is not a function '...' is not defined / no-undef 总结 前言 写代码的过程中一定会遇到报错,遇到报错不要担心,认真分析就可以解决

  • Go语言将string解析为time.Time时两种常见报错

    目录 1.错误 2.报错信息详细 3.解决方案 1.错误 错误1:parsing time “xx”: xxx out of range错误2:parsing time “xx”:cannot parse"xx" as “-” 2.报错信息详细 详细1: parsing time "2022/10/31 19:00:01": month out of range 详细2: parsing time "2022/10/31 20:00:01" as

  • Python中如何处理常见报错

    1.首先是常见的语法错误.2.然后是基础语法中的常见异常.3.最后是操作文件过程中的常见异常,这部分也是重难点知识. 这是我们在终端比较常见的报错信息: 按照 Python 官方文档的定义,我们在终端见到的“错误消息”至少可以被分为两类:语法错误(syntax errors)和异常(exceptions) . 语法错误(syntax errors)是初学者最容易犯的错误,简单来说就是代码不符合 Python 的基本语法规范而导致程序出了问题. 当你的代码完全符合 Python 的语法规范后,就该

  • MySQL安装常见报错处理方法总结大全

    目录 前言 1.无法启动处理,错误1053 1.1 结束进程 1.2 更改网络服务 1.3 删除服务 2.Winwods安装初始化报错 3.Centos环境rpm初始化MySQL报错 4.MySQL8安装后无法登陆 总结 前言 本文总结了MySQL安装过程常见故障处理,分享给大家 1.无法启动处理,错误1053 Windows 无法启动Mysql服务 错误1053:服务没有及时响应启动或控制请求 1.1 结束进程 处理方法:1.在命令行中敲入tasklist查看进程2.根据进程名杀死进程task

  • R语言初学者的一些常见报错指南

    目录 前言 第一类:工作路径问题 未设定工作路径 当前路径需要修改 第二类:对象名或函数名问题 未找到函数名报错 函数名大小写问题 未找到赋值对象 对象赋值不规范 第三类:符号问题 中文逗号报错 绝对路径的设定符号使用不规范 缺少括号或引号 赋值号报错 必要的引号与括号 第四类:中文注释乱码 第五类:数据集或变量长度不同 总结 前言 与Python.C语言等相比,R语言可以说是比较容易的编程语言之一(更适合数据探索和科研).尽管R语言相对简单,但仍给新手小白们带来无数的困难和痛苦.特别是,当你在

随机推荐