mybatis中#和$的区别

2023-11-10

mybatis中#和$的区别是什么


在mybatis中#和 $ 的主要区别是:#传入的参数在SQL中显示为字符串,#方式能够很大程度防止sql注入, $ 传入的参数在SqL中直接显示为传入的值,$方式无法防止Sql注入。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${};两者都是动态的向sql语句中传入需要的参数。

mybatis中#和$的区别是什么

1、传入的参数在SQL中显示不同

#传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。

例:使用以下SQL

select id,name,age from student where id =#{id}

当我们传递的参数id为 “1” 时,上述 sql 的解析为:

select id,name,age from student where id ="1"

$传入的参数在SqL中直接显示为传入的值

例:使用以下SQL

select id,name,age from student where id =${id}

当我们传递的参数id为 “1” 时,上述 sql 的解析为:

select id,name,age from student where id =1

2、#可以防止SQL注入的风险(语句的拼接);但$无法防止Sql注入。

3、$方式一般用于传入数据库对象,例如传入表名。

4、大多数情况下还是经常使用#,一般能用#的就别用 $ ;但有些情况下必须使用 $ ,例:MyBatis排序时使用order by 动态参数时需要注意,用 $ 而不是#。


本文著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
来源地址:https://www.php.cn/faq/416843.html
来源:php中文网(www.php.cn)
© 版权声明:转载请附上原文链接!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mybatis中#和$的区别 的相关文章

随机推荐

  • css将文字置于图片上的方法

    我们在开发的时候 有大量的场景需要将文字至于图片之上 如图 以上是将 空山新雨后 天气晚来秋 加在图片之上 对于大多数情况 我们都可以将图片作为背景图引入 但有些时候不能将图片作为背景图引入 这个时候就要用到其他的方法 以下我们提供三种方法
  • MyBatis的lazy-loading是什么?

    MyBatis的lazy loading是什么 MyBatis的lazy loading 延迟加载 是一种数据查询策略 它允许仅在需要时才从数据库中获取相关联的数据 这是通过创建 Java 代理对象来实现的 该代理对象在真正需要相关对象时将
  • linux命令——man

    Shell 也称为终端或壳 用户与 Linux 系统的交互 常见执行Linux命令的格式是这样的 命令名称 命令参数 命令对象 注意 命令名称 命令参数 命令对象之间请用空格键分隔 命令对象一般是指要处理的文件 目录 用户等资源 而命令参数
  • Linux下搭建第一个区块链网络(FISCO BCOS)

    Linux下搭建第一个区块链网络 FISCO BCOS 概述 搭建单群组FISCO BCOS联盟链 配置及使用控制台 部署及调用HelloWorld合约 概述 FISCO BCOS是由国内企业主导研发 对外开源 安全可控的企业级金融联盟链底
  • Error:JAVA_HOME is not set and could not be found 解决般的法

    很多人按照网上的各类教程搭建hadoop 但经常在安装好了后 启动hadoop时出现各类的错误 本文就 Error JAVA HOME is not set and could not be found 这一错误提出解决办法 针对这个错误
  • 10.1~10.3国庆节技术沉淀

    国庆节没怎么学习 玩了一天 宿舍玩游戏两天 一次循环完成百钱白鸡 关键就在于先人工化简一下两个方程式 23456789的各位之和怎么求 现在也不会 好吧 现在会了 不太理解 求整数各位之和 author zlb date 10 3 impo
  • 2020年“金九银十”的面试宝典:腾讯,字节等大厂面试真题汇总

    前言 职场的金九银十跳槽季火热进行中 不同的是 今年的竞争比往年会更加激烈一些 形式更加严峻一些 对于求职者来说 面试是一道坎 很多人会恐惧面试 即使是工作很多年的老鸟 也可能存在面试焦虑 大家多多少少可能都听到或看到一些信息 就是好多公司
  • Spring Boot初识-2

    Spring Boot初识 2 1 整合Redis Spring传统的整合Redis 导入jedis包 利用IoC和DI帮你实现Jedis连接实例的管理 原本 JedisPool JedisPoolConfig 主机地址 数据库索引 密码
  • 操作系统(03)- 操作系统的运行机制和体系结构

    操作系统的运行机制和体系结构 计算机指令系统是计算机硬件的语言系统 也叫机器语言 它是软件和硬件的主要界面 从系统结构的角度看 它是系统程序员看到的计算机的主要属性 我们使用高级语言编写程序 最终都会被编译为机器语言 计算机才能识别 不清楚
  • 数据结构 之 栈【图文详解】

    栈是一种操作受限的线性表只允许从一端插入和删除数据 栈有两种存储方式 即线性存储和链接存储 链表 栈的一个最重要的特征就是栈的插入和删除只能在栈顶进行 所以每次删除的元素都是最后进栈的元素 故栈也被称为后进先出 LIFO 表 每个栈都有一个
  • 版本分支 第九届蓝桥杯国赛真题 第五题 java

    标题 版本分支 小明负责维护公司一个奇怪的项目 这个项目的代码一直在不断分支 branch 但是从未发生过合并 merge 现在这个项目的代码一共有N个版本 编号1 N 其中1号版本是最初的版本 除了1号版本之外 其他版本的代码都恰好有一个
  • 蓝桥杯2023年第十四届省赛-飞机降落

    题目描述 N 架飞机准备降落到某个只有一条跑道的机场 其中第 i 架飞机在 Ti 时刻到达机场上空 到达时它的剩余油料还可以继续盘旋 Di 个单位时间 即它最早 可以于 Ti 时刻开始降落 最晚可以于 Ti Di 时刻开始降落 降落过程需要
  • 企业微信可信域名个人配置方法,个人添加企业微信可信IP方法

    2022年12月14日 2 0版本方法已经发布 2 0版本可信域名配置 截止2022年12月11日 目前方法已经失效 目前2 0版本测试可用 来都来了点个赞可好 各平台累计浏览量13W左右 估计微信都想不到突然之间怎么这么多人用企业微信 之
  • linux fb设备驱动,Linux FB 驱动讲解

    基本原理 通过 framebuffer 应用程序用 mmap 把显存映射到应用程序虚拟地址空间 将要显示的数据写入这个内存空间就可以在屏幕上显示出来 驱动程序分配系统内存作为显存 实现 file operations 结构中的接口 为应用程
  • 性能检测标准

    性能检测标准 1 超时概率 超时概率如何看 利用断言持续时间 约定的响应时间 超出了这个时间就会在聚合报告中产生错误率 这个错误率就是超时概率 2 错误率 聚合报告中的错误率 3 TPS 每秒处理事务数 包括请求 处理 返回三个阶段 用户数
  • kubectl常用删除命令

    1 强制删除 pvc kubectl patch pvc pvc name p metadata finalizers null n namespace 2 强制删除 pod kubectl delete pod PODNAME force
  • vue @cli3.0和@cli2.0的区别及项目的搭建

    3 0 新加入了 TypeScript 以及 PWA 的支持 部分命令发生了变化 下载安装 npm install g vue cli 删除了vue list 创建项目 vue create 启动项目 npm run serve 默认项目目
  • 数据仓库架构详解

    学习目录 一 基本概念 二 核心框架 三 数仓大数据架构详解 流程 一 基本概念 数据仓库 Data Warehouse 是一个为数据分析而设计的企业级数据管理系统 数据仓库可集中 整合多个信息源的大量数据 借助数据仓库的分析能力 为企业指
  • Jmeter生成HTML性能测试报告

    目录 1 前言 2 生成报告 2 1 方式一 2 2 方式二 3 查看报告 3 1 Dashboard 仪表板 3 2 Charts 图表 3 3 Customs Graphs 定制图表 1 前言 使用 Jmeter 进行性能压测时 跑完全
  • mybatis中#和$的区别

    mybatis中 和 的区别是什么 在mybatis中 和 的主要区别是 传入的参数在SQL中显示为字符串 方式能够很大程度防止sql注入 传入的参数在SqL中直接显示为传入的值 方式无法防止Sql注入 MyBatis 是一款优秀的持久层框