政务大厅网站建设管理制度,wordpress百度云下载,微信公众号登录手机版,推进网站建设工作计划前言
动态 sql 是 mybatis 的主要特性之一#xff0c;在 mapper 中定义的参数传到 xml 中之后#xff0c;在查询之前#xff0c; mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法#xff1a;#{}以及${}
提示#xff1a;以下是本篇文章正文内容…前言
动态 sql 是 mybatis 的主要特性之一在 mapper 中定义的参数传到 xml 中之后在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法#{}以及${}
提示以下是本篇文章正文内容下面案例可供参考
一、${}与#{}的区别
1、符号类型
1#{}参数占位符即预编译
2${} 字符串替换符即SQL拼接
2、防注入问题
1#{}很大程度上能防止sql 注入
2${}不能防止sql 注入
3、参数替换位置
DBMS数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件是用于建立、使用和维护数据库简称DBMS。它对数据库进行统一的管理和控制以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据数据库管理员也通过DBMS进行数据库的维护工作。它提供多种功能可使多个应用程序和用户用不同的方法在同时或不同时刻去建立修改和询问数据库。
1#{}变量替换是在DBMS 中
2${}变量替换是在 DBMS 外
4、参数解析
1#{}将传入的数据都当成一个字符串会对传入的变量自动加一个单引号。如user_id #{userId}如果传入的值是111那么解析成sql时的值为user_id ‘111’如果传入的值是id则解析成的sql为user_id ‘id’。
2${}将传入的参数直接显示生成在sql中且不加任何引号。如user_id ${userId}如果传入的值是111那么解析成sql时的值为user_id 111 如果传入的值是id则解析成的sql为user_id id。
5、用$的情况
1MyBatis排序时使用order by 动态参数时需要注意用$而不是#
默认情况下使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值比如?。这样做很安全很迅速也是首选做法有时你只是想直接在SQL语句中插入一个不改变的字符串。比如像ORDER BY你可以这样来使用
ORDER BY ${columnName}这里MyBatis不会修改或转义字符串。
2${}方式一般用于传入数据库对象例如传入表名 Select * from ${tableName} where user_id #{userId} 6、sql执行过程
可参考“二”部分的案例
1#{}编译好SQL后语句再去取值
2${}取值以后再去编译SQL语句
一般能用#的就别用$ 二、SQL解析
1、流程
1#{}动态解析 - 预编译 - 执行
2${}动态解析 - 编译 - 执行
2、案例
根据用户名name查询用户表user数据如果 name 的值为 zhangsan
1SQL编写
#{} select * from user where name ${name}; ${} select * from user where name ${name}; 2预编译中的处理
#{}在预处理时会把参数用一个占位符 ? 代替变成以下SQL select * from user where name ?; ${}只是简单的字符串替换在动态解析时变成以下SQL select * from user where name zhangsan; 当然了最后的解析结果是一样的都是 select * from user where name zhangsan;