Mybatis # 和 $ 的区别
来源:互联网 发布:什么是qq群淘宝客 编辑:程序博客网 时间:2024/04/30 10:38
Mybatis # 和 $ 的区别
#{} 是预编译模式,也是占位符 占位符的意义就是作为值的存在,他会自动的把传过来的值加上'' 例如:select * from PROJECT_NAME where name = #{testName,jdbcType}如果testName='小红'预编译后就变成了如下:select * from PROJECT_NAME where name = '小红'但是如果'表名'或者'列名'是动态的话:select * from #{projectName} 如果projectName='PROJECT_NAME '预编译后就变成了如下:select * from 'PROJECT_NAME ' 这是sql是什么鬼?所以当'表名'或者'列名'是动态的话就要使用非预编译模式select * from ${projectName} select * from PROJECT_NAME功能是直接进行字符串拼接。这也是为什么${}不能够防止一般的sql注入攻击。因为它是拼接啊!!。大家注意非预编译是不能加jdbcType的
下面是正确代码
<select id="test" parameterType="map" resultType="com.sgai.qgpam.pd.entity.PdProject"> select * from ${tableName} where PROJECT_NAME = #{projectName}</select>
如上 :我的表名是动态的所以使用$ :${tableName}非预编译模式 但是查找 PROJECT_NAME 还是常用的#{projectName}
这里要注意: 1.非预编译是不能加jdbcType的 2.# $ 可以一起使用 完全没问题 3.尽量使用预编译模式 这样能防止sql注入.
mapper接口:
public List<PdProject> test(Map<String,Object> map);
测试类:
@Test public void test() { Map<String,Object> map = new HashMap<>(); map.put("tableName", "PD_PROJECT"); map.put("projectName", "test2017"); List<PdProject> list = pdProjectMapper.test(map); System.out.println("Size:"+list.size()); }
阅读全文
0 0
- MyBatis #和$ 的区别
- Mybatis #和$ 的区别
- Mybatis #和$的区别
- Mybatis $和#的区别
- mybatis $ 和# 的区别
- MyBatis #{} 和${}的区别
- mybatis:#{}和${}的区别
- MyBatis #{} 和 ${} 的区别
- MyBatis # 和 $的区别
- Mybatis # 和 $ 的区别
- mybatis #和$的区别
- mybatis的#和$的区别
- MyBatis的#和$的区别
- mybatis的#和$的区别
- mybatis的#和$的区别
- MyBatis的#和$的区别
- Mybatis的$和#的区别
- Hibernate和MyBatis的区别
- Java并发编程札记-(一)基础-07volatile详解
- 【java多线程编程核心技术】4.Lock的使用-笔记总结
- Android Recyclerview GridLayoutManager列间距
- Linux下配置软件安装源&更新
- 如何改变swagger请求的url
- Mybatis # 和 $ 的区别
- Akka(37): Http:客户端操作模式
- Source Insight如何改变背景颜色
- NameNode之文件系统目录树
- 24on物流链WMS仓库条码管理系统在企业对仓库的重要意义
- yum install ansible无法直接安装Ansible的解决方法
- 软件测试过程模型特点(V模型 W模型 X模型 H模型)
- TWRCharts实现动画图表
- 为什么版本控制器我坚持使用VSS