【mybatis踩坑】mybatis获取类型为字符串String的参数自动加引号
今天写了一个简单的测试例子,用mybatis实现新建一个MySQL数据表
整体是JavaWeb项目,下面的代码是不完整的。
这是mapper
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="com.reliable.dao.CreateMapper">
6 <update id="createTable3" parameterType="map">
7 CREATE TABLE ${tableName} (
8 field_1 VARCHAR(255) NOT NULL,
9 field_2 VARCHAR(255) NOT NULL
10 )ENGINE=INNODB DEFAULT CHARSET=utf8;
11 </update>
12 </mapper>
测试
public void createTable3Test(ArrayList<String[]> tableInfo) {
String tableName=tableInfo.get(0)[0]+"_state";
Map<String, Object> condition = new HashMap<String, Object>();
condition.put("tableName",tableName);
condition.put("comment_1","字段名");
condition.put("comment_2","字段状态");
System.out.println("第三张表名: "+condition.get("tableName"));
SqlSession sqlSession = MybatisUtils.getSession();
CreateMapper mapper = sqlSession.getMapper(CreateMapper.class);
mapper.createTable3(condition);
sqlSession.close();
}
问题描述
当使用map向mapper传递参数时,在mapper接受这个参数有两种方式:
1、#{ }
2、${ }
这两种方式有显著的区别:
#:默认会给传来的参数加上引号
$:不会给参数加任何东西
打个比方:
像我今天写的例子,如果表名的位置我传递的map的value是---表名1
如果使用#{ } 来接收参数,我的sql语句会变成这样, create table '表名1' 。。。
这样的话这个sql语句是有错误的,运行就会抛出异常
如果我使用${ } 来接收参数,我的sql语句是这样的,create table 表名1 。。。
这时候建表语句是没有问题的。
当参数需要加上引号的时候,用#{}。
例:select * from xxx where name= #{name}
SQL:select * from xxx where name= 'name'
当参数不需要加上引号的时候,用${}
例:select * from xxx order by ${id}
SQL:select * from xxx order by id
【mybatis踩坑】mybatis获取类型为字符串String的参数自动加引号的更多相关文章
- MyBatis踩坑之SQLProvider转义字符被删除问题
目录 踩坑背景 问题描述 原因追踪 解决方案 方法一 方法二 踩坑背景 项目架构:Spring Boot + MyBatis + MySQL. 使用MyBatis作为ORM框架,jdbc驱动使用的是m ...
- OkHttp踩坑记:为何 response.body().string() 只能调用一次?
想必大家都用过或接触过 OkHttp,我最近在使用 Okhttp 时,就踩到一个坑,在这儿分享出来,以后大家遇到类似问题时就可以绕过去. 只是解决问题是不够的,本文将 侧重从源码角度分析下问题的根本, ...
- 对于pycharm和vscode下,从外部复制文本内容为python字符串内容是会自动加\u202a解决办法
先来看下这个python3源代码,表面上看没有语法毛病,如果源代码字符串内容是手动复制过来的文本内容,在pycharm和vscode下始终提示: pywintypes.error: (2, 'Shel ...
- MyBatis踩坑记录
在线文档: 动态SQL http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html 1. Error setting null for paramete ...
- 转载:mybatis踩坑之——foreach循环嵌套if判断
转载自:作者:超人有点忙链接:https://www.jianshu.com/p/1ee41604b5da來源:简书 今天在修改别人的代码bug时,有一个需求是在做导出excel功能时,mybatis ...
- SpringBoot整合mybatis踩坑
springboot整合mybaits过程中,调用接口时报错:org.apache.ibatis.binding.BindingException: Invalid bound statement ( ...
- 初学者手册-MyBatis踩坑记(org.apache.ibatis.binding.BindingException)
1.参数绑定失败 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bi ...
- Java int和integer有什么区别 (mybatis踩坑)
不要在实体类中使用int 我们都知道Integer是int的包装类,而int是基本数据类型.所以Integer类型的变量会初始化为null,int类型则会被初始化为0 . 所以在下面的动态拼接例子中: ...
- 微信小程序踩坑之获取手机号
最近在开发小程序遇到这样一个问题, 在用户点击授权后去解密手机号时会出现第一次失败,第二次成功的情况.研究了一段时间,终于找到比较合理的解决方案,在此记录并总结一下,希望可以帮助到大家. 需求描述 在 ...
- C# Aspose.Words.Document.PageCount 踩坑笔记(获取文档页数)
事情是这样的,我需要获取Word文档的页数,结果就遇到了这个坑人的问题. var doc = new Aspose.Words.Document(@"相对路径"); doc.Pag ...
随机推荐
- 使用webgl(three.js)创建自动化抽象化3D机房,3D机房模块详细介绍(抽象版一)
目前市面上有两种机房 一种是普通机房 一种是由微模块组成的机房,本文主要介绍普通机房的抽象化体现模式. 抽象机房模式:机房展示过程中,我们需要对机房进行建模,当遇到大量机房需要建模时,这无疑是巨大工作 ...
- http 与 tcp 的一些学习
HTTP 是一个基于 TCP/IP 通信协议来传递数据的协议,传输的数据类型为 HTML 文件,.图片文件, 查询结果等. HTTP 协议一般用于 B/S 架构().浏览器作为 HTTP 客户端通过 ...
- mysql分组后获取每个组排序后的第一条数据(整行)
有一个学生分数表student,数据结构是这样的 CREATE TABLE `student` ( `id` int(11) NOT NULL, `student_id` int(11) DEFAUL ...
- django的orm多表查询作业第五题答案
5.每个作者出版的所有书的最高价格以及最高价格的那本书的名称. 用django的模型类写不出来的,只能用原生sql写这题 关于第五题,mysql5.7及以上版本,使用下面的答案 set sql_mod ...
- ASP.NET Core 跨域
跨域常见问题: 1.发布到IIS上后跨域问题 解决方法 修改web.config文件 <system.webServer> <httpProtocol> <customH ...
- 目标检测 - VOC - xml标注格式
目标检测 - VOC - xml标注格式 相对其他计算机视觉任务,目标检测算法的数据格式更为复杂.为了对数据进行统一的处理,目标检测数据一般都会做成VOC或者COCO的格式. XML标注格式 < ...
- 第134篇:解决浏览器的CORS跨域问题(CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome-untrusted, https, edge.)
好家伙, 我继续尝试着将我的飞机大战使用ES6模块化分离开来,出了点问题 1.出现问题: edge,chrome等一系列浏览器,会为了安全,禁止你跨域访问 目录如下: 主程序 index.htm ...
- c++复习笔记——STL(vector)
c++-----STL容器系列(1) vector 1 介绍 Vector是stl容器中一种常见的容器 ,基本和数组类似,其大小(size)可变,常用于数组长度不确定时来代替数组,当数据超过vecto ...
- C++ mySQL数据库连接池(windows平台)
C++ MySQL数据库连接池 新手学了C++多线程,看了些资料练手写了C++数据库连接池小项目,自己的源码地址 关键技术点 MySQL数据库编程.单例模式.queue队列容器.C++11多线程编程. ...
- Java 常用类 于 StringBuffer 和 StringBuilder的使用 + String三者的异同
1 package com.bytezero.stringclass; 2 3 import org.junit.Test; 4 5 /** 6 * 关于 StringBuffer 和 StringB ...