#{}与${}的语法
文章目录
- 1.前言
- 2.#{}与${}的区别
- 3.模胡查询
1.前言
通过以下代码引申到如何去使用#{}和${},以及他们的区别。
//数据库中的语法
INSERT INTO account (aname,alias_name,age) VALUES('玛莎','莎莎',20);
//jdbc中为了防止SQL注入我们使用prepareStatement
//这种从对象中获取属性值的方式,是通过OGNL对象图表达式语言完成的。
Account account = new Account();
account.setAname("张三")
account.setAlias_name("三")
account.setAge(20)
PreparedStatement pre = connection.prepareStatement("insert into account (aname,alias_name,age) values(?,?,?)");
pre.setString(1,account.getAname());
pre.setString(2,account.getAlias_name());
pe.setString(3,account.getAge());
2.#{}与${}的区别
- 相同点:都是参数替换
- 不同点1:#{}会根据参数类型自动的去添加’'而${}只是替换
- 不同点2:#{}在条件语句中where aid=#{aid}可以直接使用#{},如果是${}则会报错
下面就具体的代码演示:
<select id="selectOne" resultType="Account">selectaid,aname,alias_name as aliasname,agefromaccountwhere aid=${aid}</select>
错误信息:
Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘aid’ in ‘class java.lang.Integer’
解决方法:
${}
对于int,Integer 数值类型,要求必须传递${value}
,
一旦识别${value}
就直接替换,不使用OGNL
为什么说但是${}
只是替换 替换什么意思呢?
AccountMapper.xml文件
<insert id="insert">insertintoaccount(aname,alias_name,age)values (${aname},${aliasname},${age})</insert>
测试:
@Testpublic void insert(){account.setAge(25);account.setAliasname("智智");account.setAname("李智234789");accountMapper.insertAccount(account);}
结果:
运行完我们发现sql语句values值没有双引号
SQL: insert into account(aname,alias_name,age) values (李智234,智智,25)
所以数据库不认这条语句但是我们也可以手动去添加''
比如下列操作:
@Testpublic void insert(){account.setAge(25);account.setAliasname("'智智'");account.setAname("'李智234789'");accountMapper.insertAccount(account);}
运行完我们发现数据库中添加了这条语句
很显然很繁琐 所以就会出现了#{} 他会帮我们自动的去根据属性的类型去添加''
将上面的配置文件AccountMapper.xml修改一下或者values语句为 values ('${aname}','${aliasname}','${age}')
实质上:就是利用 prepareStatement进行sql的执行
<insert id="insert">insertintoaccount(aname,alias_name,age)values (#{aname},#{aliasname},#{age})</insert>
3.模胡查询
#{}模胡查询
AccountMapper.xml文件
<select id="selectLike" resultType="account">selectaid,aname,alias_name as aliasname,agefromaccountwhere aname like #{anme}</select>
测试:
@Testpublic void select(){List<Account> list = accountMapper.selectLike("%李%");System.out.println(JSON.toJSONString(list));}
结果:
[{“age”:23,“aid”:19,“aliasname”:“瑞瑞”,“aname”:“李瑞”},{“age”:20,“aid”:21,“aliasname”:“智智”,“aname”:“李智”}]
总结:使用#{}模糊查询传递值使用%李%
#{}模糊查询
<select id="selectLike" resultType="account">selectaid,aname,alias_name as aliasname,agefromaccount<!-- where aname like '${value}'List<Account> list = accountMapper.selectLike("%李%");-->where aname like ${value}</select>
@Testpublic void select(){List<Account> list = accountMapper.selectLike("'%李%'");System.out.println(JSON.toJSONString(list));}
结果:
[{“age”:23,“aid”:19,“aliasname”:“瑞瑞”,“aname”:“李瑞”},{“age”:20,“aid”:21,“aliasname”:“智智”,“aname”:“李智”}]
总结:方式一:使用#{}模糊查询传递值使用'%李%'
且xml文件中使用${value}
方式二:xml文件中直接使用'${value}'
传递值%李%
#{}与${}的语法相关推荐
- 【JavaScript总结】JavaScript语法基础:BOM
DOM是文档对象模型,操作对象是文档 window.document,和浏览器没有直接关系 DOM常用事件: onload,onbeforeunload, onunload onclick,ondbl ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- 第二天:Vue基础语法
1.计算属性的setter和getter 每个计算属性都有setter和getter 一般来说用到setter较少,都不希望数据被改动,所以只用getter时也有缩写 <!DOCTYPE htm ...
- LLVM语法语义指令特性
LLVM语法语义指令特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数,全局变 ...
- LLVM一些编程语法语义特性
LLVM一些编程语法语义特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数.全 ...
- LLVM一些语法规则
LLVM一些语法规则 LLVM文档 LLVM编译器基础架构支持广泛的项目,从工业强度编译器到专门的JIT应用程序,再到小型研究项目. 同样,文档分为几个针对不同受众的高级别分组: LLVM设计概述 几 ...
- 2021年大数据Hive(四):Hive查询语法
全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...
- 2021年大数据常用语言Scala(十八):基础语法学习 Map对象
目录 Map对象 不可变Map 可变Map Map基本操作 Map对象 Map可以称之为映射.它是由键值对组成的集合.在scala中,Map也分为不可变Map和可变Map. 不可变Map 定义 语法 ...
- 2021年大数据常用语言Scala(十七):基础语法学习 Set
目录 Set 不可变集 可变集 Set Set(集)是代表没有重复元素的集合.Set具备以下性质: 元素不重复 不保证插入顺序 和List正好相反, List: 元素可以重复 保证插入顺序 scala ...
最新文章
- 人脸识别最前沿在研究什么?
- 『一本通』差分约束系统
- Mysql+innodb数据存储逻辑
- Rendering: repaint, reflow/relayout, restyle的学习笔记
- mysql事务与jdbc事务_事务(mysql事务、jdbc事务)
- InnoDB自增原理都搞不清楚,还怎么CRUD?
- java request 处理过程_小猿圈Java开发之从代码看spring mvc请求处理过程
- 容器编排技术 -- Kubernetes kubectl create poddisruptionbudget 命令详解
- 【原创】centos常见问题集锦
- cad2014工具集_2014年最佳公开教育工具和故事
- 大数据学习笔记08:Java程序访问HDFS
- sqlserver 时间递增循环
- catv系统主要有哪三部分组成_有线电视系统,看完电力工程技术专家分析,顿时学会了,太经典...
- ubuntu16.xxx安装mysql5.0项目迁移环境搭建
- php跳转qq临时会话,怎样做出在网页中弹出QQ临时对话框
- python+pyqt4实现QQ自动发送信息
- webrtc nack实现原理
- 管程(Moniter) 并发编程的基本心法
- 【Python】京东自动下单抢购脚本——双十一购物小技巧
- 2021 PostgreSQL 中国技术大会 PPT 下载
热门文章
- VOC2007数据集制作
- $route.push()多次点击跳转报错问题
- python调用默认播放器_python使用Tkinter实现在线音乐播放器
- python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例
- win10升级补丁_Win 10 暂停更新及回滚方法
- MySQL安装版本Navicat连接报错2509解决方案
- 为什么python代码运行不了_为什么我的python代码不能正常运行?
- 天河三号是量子计算机吗,“天河三号”原型机亮相,排名有望继续世界第一
- C++实现愤怒小鸟小游戏
- python中关于np.array初始化不同维度矩阵的有趣现象