Mybatis通配符

在mybatis中的$与#都是在sql中动态的传入参数。

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

这个name是动态的,可变的。当你传入什么样的值,就会根据你传入的值执行sql语句。

1. MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型等

2.在xml写SQL都是用#,如#{param}。但是有时会看到用$的时候,如${param}

3. 那么$ 和 # ,有什么区别呢?

1) 通配符 "#" 是将传入的值当做字符串的形式,如:

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

当前端把id值1,传入到后台的时候,就相当于 (#{} 传入值时,sql解析时,参数是带引号的)

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

2)通配符 "$" 是将传入的数据直接显示生成sql语句,如:

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

当前端把id值1,传入到后台的时候,就相当于 (${}穿入值,sql解析时,参数是不带引号的)

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

3) 使用 "#" 可以很大程度上防止sql注入。(语句的拼接)

#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。

${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

eg:  select id,name,age from student where name=#{name}   -- name='cy'

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

4)  但是如果使用在order by 中就需要使用 "$".

5)  在大多数情况下还是经常使用"#",但在不同情况下必须使用"$".

Mybatis通配符相关推荐

  1. SSM项目使用junit单元测试时Mybatis通配符加载Mapper不能正常加载

    问题描述:项目使用maven build 以及tomcat run能够正常运行,但是使用junit单元测试时却报错误 Caused by: java.lang.IllegalArgumentExcep ...

  2. MyBatis常规CURD详解及拓展~

    目录 1. insert(增) 2. delete(删) 3. update(改) 4. select(查) SQL优化:Map传参 示例:插入一个用户 map传参优点 各种传参对比 补充:模糊查询 ...

  3. MyBatis常见面试题汇总

    文章目录 概述 简介 优点 缺点 适用场景 MyBatis与Hibernate有什么不同? ORM是什么 传统JDBC开发存在什么问题? JDBC编程有哪些不足之处,MyBatis 是如何解决的? M ...

  4. 第一个 Mybatis 程序(CURD操作)

    步骤 (1)搭建环境 1.搭建数据库 -- 创建数据库mybatis CREATE DATABASE `mybatis`; USE mybatis;-- 新建表 user CREATE TABLE ` ...

  5. Mybatis常见的面试题总结

    2019独角兽企业重金招聘Python工程师标准>>> 什么是Mybatis? 1. mybatis是一个半ORM框架,它内部封装了JDBC,开发时只需要关乎sql语句本身,不需要花 ...

  6. Mybatis知识(4)

    1.当实体类中的属性名和表中的字段名不一样  解决办法①:  通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致  <select id="selectord ...

  7. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  8. Mybatis 通用 Mapper 使用 ①

    简介 官网链接:https://mapperhelper.github.io/docs/ 通用Mapper都可以极大的方便开发人员.可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方 ...

  9. 2.MyBatis 动态SQL

    动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...

  10. Spring Boot项目利用MyBatis Generator进行数据层代码自动生成

    概 述 MyBatis Generator (简称 MBG) 是一个用于 MyBatis和 iBATIS的代码生成器.它可以为 MyBatis的所有版本以及 2.2.0之后的 iBATIS版本自动生成 ...

最新文章

  1. 非常实用的 Python 技巧
  2. Java小工具:TimingTools
  3. Entity相互关系
  4. python怎么读取列表-详解Python如何获取列表(List)的中位数
  5. 解决iIntelliJ IDEA中新建servlet后,报错cannot resolve symbol ‘HttpServletRequest‘的问题
  6. 黄仁勋登上《时代周刊》2021年度全球具影响力人物
  7. android action bar 风格,自定义ActionBar的风格
  8. 当Python的lambda表达式遇上变量作用域
  9. 【算法导论】贪心算法,递归算法,动态规划算法总结
  10. Unable to read TLD META-INF/c.tld from JAR file
  11. H.265编码和H.264编码的区别
  12. 从三流本科到北京985高校研究生,这是我走过的四年
  13. 17. Window confirm() 方法
  14. 检测制定代码部分的profiler
  15. 有关BT5破解wifi密码的流程及当中经历问题的总结——从寻找ISO镜像到破解wifi密码
  16. Archlinux 安装软件(更新系统)报错
  17. 成为优秀的技术管理者: 先从改变思维做起
  18. matlab怎么改变程序字体大小,matlab怎么把程序字体变大
  19. 几款免费ssh客户端软件--替代xshell选型
  20. 基于FaceX-Zoo实现的Face Mask Adding人脸戴口罩

热门文章

  1. linux中 . .bash_profile是什么意思
  2. 为什么Multi-DRM如此重要?
  3. 计算机怎么打出钱的符号,人民币符号怎么打,教您电脑怎么打人民币符号
  4. android 程序到手机,安卓手机怎么从电脑安装应用到手机
  5. 柳传志二十年驭人成就柳氏联想
  6. opencv-python 银行卡卡号识别
  7. 视频目标分割数据集DAVIS(Denly-Annotated VIdeo Segmentation)解读
  8. C语言中终端一直有光标闪烁,word里光标一直闪
  9. Flutter 中TextField的hintText不居中与光标位置不一致
  10. ffmpeg去除视频黑边命令