专栏首页只喝牛奶的杀手mybatis中#{}和${}的区别

mybatis中#{}和${}的区别

先来回顾一下mybatis 核心概念 :

mapper中使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值

PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,id);

执行SQL:select * from emp where name = #{employeeName}

参数:employeeName=>Smith

解析后执行的SQL(我们打开debug日志控制台可以看到):select * from emp where name =

#方式能够很大程度防止sql注入


有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY $将传入的数据直接显示生成在sql中

  Statement st = conn.createStatement();
  ResultSet rs = st.executeQuery(sql);

执行SQL:select * from emp where name = ${employeeName}

参数:employeeName传入值为:Smith

解析后执行的SQL(我们打开debug日志控制台可以看到):select * from emp where name =Smith

总结:#方式能够很大程度防止sql注入,$方式无法防止Sql注入;$方式一般用于传入数据库对象,使用$要么不允许用户输入这些字段,要么自行转义并检验。一般能用#的就别用$。

再回顾下JDBC执行流程:

  1. 加载JDBC驱动;
  2. 建立并获取数据库连接;
  3. 创建 JDBC Statements 对象;
  4. 设置SQL语句的传入参数;
  5. 执行SQL语句并获得查询结果;
  6. 对查询结果进行转换处理并将处理结果返回;
  7. 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)。

结合JDBC的执行过程,不难发现归根结底的区别是CreateStatement 和 PrepareStatement 的区别。


每周一句:找到做事的准则、模式和反模式。准则:原则应用到实践中;模式:你应该做的;反模式:你不应该做的。

本文分享自微信公众号 - 只喝牛奶的杀手(killerhub),作者:只喝牛奶的杀手

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 开发应该知道的Linux系统分析-CPU篇

    /proc/cpuinfo是可以获取系统CPU信息比如物理CPU的个数 每个CPU的物理核心数量 CPU的型号和主频等信息。

    只喝牛奶的杀手
  • 开发应该知道的Linux系统分析

    一谈到Linux系统分析,大多数开发觉得不了解也没有关系,但是了解了可以帮你走的更远。从开发的角度了解CPU,MEMORY,IO,NETWORK。在日常工作中我...

    只喝牛奶的杀手
  • 缓存端模式

    将数据按需从数据存储加载到缓存中。 这可提升性能,并且有助于在缓存中保存的数据与基础数据存储中的数据之间保持一致性。

    只喝牛奶的杀手
  • dba麻烦终结者之路

    或许你厌倦了朝五晚六的开发工作,开始考ocp;或许你刚走出象牙塔,立志在数据库管理方面大干一场?经过一翻努力,终于有了份dba的工作,忐忑不安地坐在电脑旁,激动...

    Tony老师
  • JDBC增删改查

    葆宁
  • 南京渣硕求职路(网易美团头条百度面经)+Java学习路线(拙见)

    首先自我介绍一下,楼主南京渣硕一枚,秋招主要投递JAVA后台岗位,面过以下公司:网易+美团+头条+百度+华为+中兴,拿下了网易和中兴提前批offer,华为依旧泡...

    Java架构技术
  • 面试必备:基于 Zookeeper 的分布式锁实现【图文并茂 附源码 】

    最近在学习 Zookeeper,在刚开始接触 Zookeeper 的时候,完全不知道 Zookeeper 有什么用。且很多资料都是将 Zookeeper 描述成...

    搜云库技术团队
  • Zookeeper怎么实现分布式锁?

    https://segmentfault.com/a/1190000010895869

    Java技术栈
  • Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

    Oracle Advanced Support系统SQL注入漏洞分析 一年多前我在客户的一个外部环境中执行渗透测试,任何外部环境渗透测试的重要步骤之一就是挖掘出...

    FB客服
  • 基于 Zookeeper 的分布式锁实现

    最近在学习 Zookeeper,在刚开始接触 Zookeeper 的时候,完全不知道 Zookeeper 有什么用。且很多资料都是将 Zookeeper 描述成...

    爱撸猫的杰

扫码关注云+社区

领取腾讯云代金券