ibatis 中#和 $ 符号的区别
- 1、数据类型匹配
- #:会进行预编译,而且进行类型匹配(自动确定数据类型);
- $:不进行数据类型匹配。
- 2、实现方式:
- # 用于变量替换(先生成一个占位符,然后替换)
- select * from users where name = #name#
- 等效于
- prepareStement=stmt.createPrepareStement("select * from users where name = ?")
- prepareStement.setString (1,' 张三 ');
- $ 的作用实际上是字符串拼接()
- select * from users where name= $name$
- 等效于
- StringBuffer sb = newStringBuffer(256);
- sb.append("select * from userswhere name=").append(name);
- sb.toString();
- # 用于变量替换(先生成一个占位符,然后替换)
- 3、使用场景
- -#主要用于变量的传递。# 是用 prepareStement,提升效率。#方式一般用于传入添加 / 修改的值或查询 / 删除的 where 条件
- $ 只是简单的字符拼接而已,对于非变量部分, 只能使用 $。$ 方式一般用于传入数据库对象。例如传入表名,select * from $tableName$ 对于不同的表执行统一的查询
- 4、为什么会出现SQL注入?
- $没有预编译,只是字符串替换,所以语句可能被注入,传给数据库时是多条语句;
- 而#会先预编译,验证SQL语句,预防了问题的出现。
- 5、关于预编译的理解:
- 为什么需要预编译
- JDBC 中使用对象 PreparedStatement 来抽象预编译语句,使用预编译
- 预编译阶段可以优化 sql 的执行。
- 预编译之后的 sql 多数情况下可以直接执行,DBMS 不需要再次编译,越复杂的 sql,编译的复杂度将越大,预编译阶段可以合并多次操作为一个操作。
- 预编译语句对象可以重复利用。
- 把一个 sql 预编译后产生的 PreparedStatement 对象缓存下来,下次对于同一个 sql,可以直接使用这个缓存的 PreparedState 对象。
- mybatis 默认情况下,将对所有的 sql 进行预编译。
- 参考附录:
- 说明下,就是$时传给DBMS的时一个Statement对象,该对象会被DBMS先编译后执行;
- 而#时传给DBMS的时一个PrepareStatement 对象,该对象会直接传给DBMS进行编译,DBMS执行时会直接执行编译后的语句。
- 为什么需要预编译
- 6、参考:
- ibatis 中#和 $ 符号的区别 - geyouchao 的专栏 - CSDN 博客 https://blog.csdn.net/geyouchao/article/details/51817747
注:文章主体来源。 - Ibatis 的#和 $ 的区别 - Huangmoumou - 博客园 https://www.cnblogs.com/juanzila/p/8691860.html
- mybatis 之 # 与 $ 区别以及 sql 预编译 - 每一步成长都与你分享 - CSDN 博客 https://blog.csdn.net/wo541075754/article/details/54292751
注:详细解释了预编译,为什么要预编译,以及SQL注入的问题。 - 什么是预编译语句 - 网络改变中国 - CSDN 博客 https://blog.csdn.net/hehe520347/article/details/8956750
注:对预编译的详细说明。
- ibatis 中#和 $ 符号的区别 - geyouchao 的专栏 - CSDN 博客 https://blog.csdn.net/geyouchao/article/details/51817747
ibatis 中#和 $ 符号的区别的更多相关文章
- ibatis中的符号#跟$区别
昨天一个项目中在写ibatis中的sql语句时,order by #field#, 运行时总是报错,后来上网查了查,才知道这里不该用#,而应该用$,随即查了下#与$的区别. 总结如下: 1.#是把 ...
- ibatis中的$和#的区别
介绍 在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型匹配,而$不进行数据类型匹配,例如: select * fr ...
- ibatis2.3中#和$符号的区别(转)
在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型匹配,而$不进行数据类型匹配,例如: select * from ...
- ibatis 中的 $和#的区别
在sql配置中比如in(#rewr#) 与in ($rewr$) 在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型 ...
- mybatis中#和$符号的区别
mybatis做为一个轻量级ORM框架在许多项目中使用,因其简单的入门受到了广大开发者的热爱.在近期项目中再做一个相关的开发,碰到了#.$符号这样的问题,之前没怎么注意过,通过学习之后,有了点感悟,分 ...
- mybatis中#和$符号的区别(转)
mybatis做为一个轻量级ORM框架在许多项目中使用,因其简单的入门受到了广大开发者的热爱.在近期项目中再做一个相关的开发,碰到了#.$符号这样的问题,之前没怎么注意过,通过学习之后,有了点感悟,分 ...
- mybatis.xml文件中#与$符号的区别以及数学符号的处理
1.#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入. #{}可以接收简单类型值或po ...
- MyBatis 中#和$符号的区别
#相当于对数据 加上 双引号,$相当于直接显示数据 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sq ...
- ibatis中isNotNull与isNotEmpty区别
isNotNull:参数不能为null,空的可以的 isNotEmpty:参数不能为null和空 那什么是空?比如String类型 String a = ""; a就是空
随机推荐
- 使用什么工具连接MySQL Server
字符界面:命令行终端(需MySQL Client) GUI界面:Navicat.MySQL Workbench 开发语言:使用相应语言的MySQL数据库驱动包或模块连接MySQL 我一般用的是命令行, ...
- Android camera 竖直拍照 获取竖直方向照片
竖直拍照 if (Integer.parseInt(Build.VERSION.SDK) >= 8) { camera.setDisplayOrientation(90); } else ...
- 给网站添加X-UA-Compatible标签
给网站添加X-UA-Compatible标签 方法一:<meta http-equiv="X-UA-Compatible" content="IE=EmulateI ...
- 【Java面试题】1 Java中使用switch-case的用法及注意事项超全总结
今天在用到switch的时候,这种设计到最基本的内容,可能忘记它的一些基本语法,出现了一些错误,所以即兴从各种资料查询总结了下面的内容,希望可以帮助那些正在困扰switch错误和各种细节问题的朋友! ...
- 【Java 线程的深入研究3】最简单实例说明wait、notify、notifyAll的使用方法
wait().notify().notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态. 这三个方法最终调用的都是jvm级的native方法.随着jvm运行平台的不同可能有些 ...
- .net FrameWork各个版本之间的发展[转]
上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET FrameWork,身为一个NET程序员,里面大概的区别自己还是知道的,但是自己要说出个所以然来了,发现还是有点力不 ...
- 关于NoSQL与SQL的区别
简单说来:sql是关系型数据库的结构化查询语言,而nosql,一般代指菲关系型数据库,sql语句就不能用来,不过有些有leisql的查询语言,且nosql数据库没有统一的查询语言. 相关参考文章阅读: ...
- mongodb查询内嵌文档
mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{& ...
- JavaScript实现禁用键盘和鼠标的点击事件
编写自己定义的JavaScript函数maskingKeyboard()和rightKey(); maskingKeyboard():禁用键盘 rightKey():禁用鼠标右键 <script ...
- ios 读取各种类型文件
1.如何读取UTF-8编码的文本文件? 2.如何读取GB2312(中文)的文本文件? 3.如何读取其它编码文件? 首先解决第一个问题, 1.如何读取UTF-8编码的文本文件? NSString *fi ...