Mybatis中#{}与${}的区别
时间:2022-07-22
本文章向大家介绍Mybatis中#{}与${}的区别,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Mybatis中#{}与${}的区别
根据一个需求来实验一下:
可以在前台拼接sql例如: 很多条件可以一直and、and、and
一开始我使用的是#{}进行传值,后台出错了
测试接口如下:
@Autowired
EmploymentMessageService employmentMessageService;
@Test
public void getData(){
List<EmploymentMessage> employmentMessageData = employmentMessageService.getEmploymentMessageData("AND COMPANY_HIGHERNUM=150");
System.out.println(employmentMessageData.size());
}
测试SQL:
<select id="getEmploymentMessageData" resultType="cn.bigdata.entity.EmploymentMessage">
select * from employment_message WHERE 1=1 #{sql}
</select>
报错如下:
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''AND COMPANY_HIGHERNUM=150'' at line 1
### The error may exist in file [H:ProgrammeIdeaProjectbigdata-boottargetclassescnbigdatamapperEmploymentMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select * from employment_message WHERE 1=1 ?
### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''AND COMPANY_HIGHERNUM=150'' at line 1
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''AND COMPANY_HIGHERNUM=150'' at line 1
解决办法:
xml里的sql中的接收参数改为如下:
<select id="getEmploymentMessageData" resultType="cn.bigdata.entity.EmploymentMessage">
select * from employment_message WHERE 1=1 #{sql}
</select>
返回:
2019-08-12 22:32:23.864 INFO 16800 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-08-12 22:32:24.056 INFO 16800 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2019-08-12 22:32:24.064 DEBUG 16800 --- [ main] c.b.d.E.getEmploymentMessageData : ==> Preparing: select * from employment_message WHERE 1=1 AND COMPANY_HIGHERNUM=150
2019-08-12 22:32:24.093 DEBUG 16800 --- [ main] c.b.d.E.getEmploymentMessageData : ==> Parameters:
2019-08-12 22:32:25.902 DEBUG 16800 --- [ main] c.b.d.E.getEmploymentMessageData : <== Total: 56515
56515
总结: 也就是说使用#{}时,mybatis会自动加上引号。如果不想让加那么就使用${}
如果传递一个:AND COMPANY_HIGHERNUM=150
使用#{sql}会自动译为:’‘AND COMPANY_HIGHERNUM=150’’
运行sql则变成如下所示的代码,所以会出错:
select * from employment_message WHERE 1=1 ''AND COMPANY_HIGHERNUM=150''
使用${}会自动译为:AND COMPANY_HIGHERNUM=150 运行sql则:
select * from employment_message WHERE 1=1 AND COMPANY_HIGHERNUM=150
- 微信支付-微信红包Java版本
- Universe入门
- 分享一款值得分享的写作工具
- 微信二次开发Java自定义菜单事件实现
- 微信OAuth授权获取用户OpenId-JAVA(个人经验)
- 【手写文字识别】-JavaAPI示例代码
- 【Python3-API】情感倾向分析示例代码
- SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)
- 【Python3-API】通用文字识别示例代码
- Python入门教程之安装MyEclipse插件和安装Python环境
- AutoFlowLayout-多功能流式布局与网格布局控件
- RBAC新解:基于资源的权限管理(Resource-Based Access Control)
- 基于开源项目搭建属于自己的技术堆栈
- Redis整合Spring项目搭建实例
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 网络请求框架OkHttp3全解系列(一):OkHttp的基本使用
- 网络请求框架OkHttp3全解系列 - (二)OkHttp的工作流程分析
- 这次,我把Android事件分发机制翻了个遍
- 网络请求框架OkHttp3全解系列 - (三)拦截器详解1:重试重定向、桥、缓存(重点)
- Python全栈(七)Flask框架之4.Flask模板继承与案例练习
- 你想要的系列:网络请求框架OkHttp3全解系列 - (四)拦截器详解2:连接、请求服务(重点)
- 不会玩阴阳师的我带你一键下载《阴阳师:百闻牌》所有卡牌并调用百度OCR识别文字信息
- 微信小程序生命周期学习笔记-页面篇
- Python 字典 使用技巧
- 微信小程序生命周期学习笔记-组件
- C语言入门系列之2.数据类型、运算符和表达式
- 树莓派的cpu与gpu通信设计浅析
- Python全栈(七)Flask框架之5.视图高级--类视图和蓝图
- Python全栈(六)项目前导之5.使用GitHub进行多人协同开发
- 附002.Nginx代理相关模块解析