文章目录

  • 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}' 传递值%李%

#{}与${}的语法相关推荐

  1. 【JavaScript总结】JavaScript语法基础:BOM

    DOM是文档对象模型,操作对象是文档 window.document,和浏览器没有直接关系 DOM常用事件: onload,onbeforeunload, onunload onclick,ondbl ...

  2. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  3. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  4. 第二天:Vue基础语法

    1.计算属性的setter和getter 每个计算属性都有setter和getter 一般来说用到setter较少,都不希望数据被改动,所以只用getter时也有缩写 <!DOCTYPE htm ...

  5. LLVM语法语义指令特性

    LLVM语法语义指令特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数,全局变 ...

  6. LLVM一些编程语法语义特性

    LLVM一些编程语法语义特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数.全 ...

  7. LLVM一些语法规则

    LLVM一些语法规则 LLVM文档 LLVM编译器基础架构支持广泛的项目,从工业强度编译器到专门的JIT应用程序,再到小型研究项目. 同样,文档分为几个针对不同受众的高级别分组: LLVM设计概述 几 ...

  8. 2021年大数据Hive(四):Hive查询语法

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...

  9. 2021年大数据常用语言Scala(十八):基础语法学习 Map对象

    目录 Map对象 不可变Map 可变Map Map基本操作 Map对象 Map可以称之为映射.它是由键值对组成的集合.在scala中,Map也分为不可变Map和可变Map. 不可变Map 定义 语法 ...

  10. 2021年大数据常用语言Scala(十七):基础语法学习 Set

    目录 Set 不可变集 可变集 Set Set(集)是代表没有重复元素的集合.Set具备以下性质: 元素不重复 不保证插入顺序 和List正好相反, List: 元素可以重复 保证插入顺序 scala ...

最新文章

  1. 人脸识别最前沿在研究什么?
  2. 『一本通』差分约束系统
  3. Mysql+innodb数据存储逻辑
  4. Rendering: repaint, reflow/relayout, restyle的学习笔记
  5. mysql事务与jdbc事务_事务(mysql事务、jdbc事务)
  6. InnoDB自增原理都搞不清楚,还怎么CRUD?
  7. java request 处理过程_小猿圈Java开发之从代码看spring mvc请求处理过程
  8. 容器编排技术 -- Kubernetes kubectl create poddisruptionbudget 命令详解
  9. 【原创】centos常见问题集锦
  10. cad2014工具集_2014年最佳公开教育工具和故事
  11. 大数据学习笔记08:Java程序访问HDFS
  12. sqlserver 时间递增循环
  13. catv系统主要有哪三部分组成_有线电视系统,看完电力工程技术专家分析,顿时学会了,太经典...
  14. ubuntu16.xxx安装mysql5.0项目迁移环境搭建
  15. php跳转qq临时会话,怎样做出在网页中弹出QQ临时对话框
  16. python+pyqt4实现QQ自动发送信息
  17. webrtc nack实现原理
  18. 管程(Moniter) 并发编程的基本心法
  19. 【Python】京东自动下单抢购脚本——双十一购物小技巧
  20. 2021 PostgreSQL 中国技术大会 PPT 下载

热门文章

  1. VOC2007数据集制作
  2. $route.push()多次点击跳转报错问题
  3. python调用默认播放器_python使用Tkinter实现在线音乐播放器
  4. python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例
  5. win10升级补丁_Win 10 暂停更新及回滚方法
  6. MySQL安装版本Navicat连接报错2509解决方案
  7. 为什么python代码运行不了_为什么我的python代码不能正常运行?
  8. 天河三号是量子计算机吗,“天河三号”原型机亮相,排名有望继续世界第一
  9. C++实现愤怒小鸟小游戏
  10. python中关于np.array初始化不同维度矩阵的有趣现象