mybatis {arg0} 与 {0}
解决方案:
MyBatis的XML的配置文件中声明设置属性的useActualParamName参数值为假
<setting name="useActualParamName" value="false" />
代码展示:
Dao层函数
User getUserBys(int id,String name);
对应的mapping.xml
<select id="getUserBys" resultType="model.User"> select * from user where id = #{0} and name=#{1} </select>
这种方法应该是对的,但是如果你使用的是mybatis3.4.2或者之后的版本,就会产生绑定异常:
org.apache.ibatis.binding.BindingException: Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]
从异常可以看出在没有使用@参数注解的情况下,传递参数需要使用
#{}为arg0 - #{} ARGN#或者{}参数1 - #{} paramn
- 更换下mapping.xml中的代码
<select id="getUserBys" resultType="model.User"> select * from user where id = #{arg0} and name=#{arg1} </select>
此时代码就会正常运行
下面贴上3.4.1以及之前版本的绑定异常信息:
org.apache.ibatis.binding.BindingException: Parameter 'arg0' not found. Available parameters are [0, 1, param1, param2]
可以发现3.4.1版本中传递参数可以使用#{0} - #{N}
问题原因
MyBatis的通过XMLConfigBuilder类来加载配置文件中的各项参数
- 3.4.2版本之前设置属性中useActualParamName参数的默认值为flase
XMLConfigBuilder.class的settingsElement方法中的源代码
configuration.setUseActualParamName(booleanValueOf(props.getProperty("useActualParamName"), true));
- 3.4.2版本之后设置属性中useActualParamName参数的默认值为true
XMLConfigBuilder.class的settingsElement方法中的源代码
configuration.setUseActualParamName(booleanValueOf(props.getProperty("useActualParamName"), false));
mybatis {arg0} 与 {0}的更多相关文章
- mybatis plus3.1.0 热加载mapper
今天又开始写业务代码了,每次修改SQL都要重启服务,实在是浪费时间. 想起之前研究过的<mybatis plus3.1.0 热加载mapper>,一直没有成功,今天静下心来分析了问题,终于 ...
- springboot项目war包部署及出现的问题Failed to bind properties under 'mybatis.configuration.mapped-statements[0].
1.修改pom文件 修改打包方式 为war: 添加tomcat使用范围,provided的意思即在发布的时候有外部提供,内置的tomcat就不会打包进去 <groupId>com.scho ...
- spring整合mybatis,springMVC的0配置文件方式
0配置文件的形式主要是采用spring3.0提供的@configuration注解和spring容器在启动的时候会加载实现了WebApplicationInitializer的类,并调用其onStar ...
- mybatis将传入0识别成空字符串
mybatis将传入的Integer类型的0被识别成空字符串,网上的解决办法: <if test="status != null and status != '' or status ...
- SpringBoot整合MyBatis与MySql8.0
一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...
- Mybatis 3.3.0 Log4j配置
最近做一个SSM学习项目,配置log4j,mybatis用下面的方式配置,不管用,打印不出执行的SQL语句. log4j.logger.java.sql.Connection=DEBUGlog4j.l ...
- mybatis理解(0)
- 问题-MyBatis不识别Integer值为0的数据
问题-MyBatis不识别Integer值为0的数据 问题:使用MyBatis的过程中,发现一个值为0的数据,Mybatis所识别,最后定位才发现,是自己的写法有问题, <if test=&qu ...
- Spring3.0 与 MyBatis框架 整合小实例
本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...
随机推荐
- Unity WidgetsUI CreateTaskView Demo
Creating own ListView PS:TaskView 的Image去掉,背景才会变透明 Let's create own ListView, for this we need to wr ...
- TCP通信粘包问题分析和解决
转载至https://www.cnblogs.com/kex1n/p/6502002.html 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发 ...
- Entity Framework Core的坑:Skip/Take放在Select之前造成Include的实体全表查询
今天将一个迁移至 ASP.NET Core 的项目放到一台 Linux 服务器上试运行.站点启动后,浏览器打开一个页面一直处于等待状态.接着奇怪的事情发生了,整个 Linux 服务器响应缓慢,ssh命 ...
- CH 4401/Luogu 4168 - 蒲公英 - [分块]
题目链接:传送门 题目链接:https://www.luogu.org/problemnew/show/P4168 题解: 经典的在线求区间众数的问题,由于区间众数不满足区间可加性,所以考虑分块,假设 ...
- Vue SSR 配合Java的Javascript引擎j2v8实现服务端渲染2创建Vue2+webpack4项目
前提 安装好nodejs并配置好环境变量,最好是 node10,https://nodejs.org/en/download/ 参考我之前的文章 debian安装nodejs Yarn &&a ...
- Mysql thread 与 OS thread
测试环境信息如下: OS:Ubuntu 16.04 LTS Mysql:Mysql 5.7.18,使用docker images运行的实例 Mysql如何处理client请求 在Mysql中,连接管理 ...
- Go编写的并行计算示例程序
Go编写的并行计算示例程序 package main import "fmt" const ngoroute = 1000000 func f(left, right chan i ...
- javascript中的值如何传递到django下的views.py中或者数据库中?
用Ajax,Ajax有很多种写法,包括JQuery和JS,这里贴一个用JQuery写的最通用的Ajax,POST方法传递JSON格式数据: $.ajax({ url: "your url&q ...
- Bootstrap3隐藏滑动侧边栏菜单代码特效
链接:https://pan.baidu.com/s/1syV3ZFg-RqfCv0HS5K0vug 提取码:yjex
- 自己写的运用bootstrap和angulajs框架写的demo
登录html: <body ng-app="mainapp"> <div class="container"> <div clas ...