在MyBatis中使用 # 和 $ 书写占位符的区别说明

#将传入的数据都当成一个字符串,会对传入的数据自动加上引号;

$将传入的数据直接显示生成在SQL中

注意:使用 $ 占位符可能会导致SQL注入攻击,能用#的地方就不要使用 $

写order by 子句的时候应该用 $ 而不是#

补充知识:mybatis 中生成的字段不带引号 #{}和${}

最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下,

比如说用#{},和 ${}传参的区别,

使用#传入参数是,sql语句解析是会加上"",比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是

select * from table where name = ‘小李',就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果你传入的参数为 单引号',那么如果使用${},这种方式 那么是会报错的,

另外一种场景是,如果你要做动态的排序,比如 order by column,这个时候务必要用${},因为如果你使用了#{},那么打印出来的将会是

select * from table order by 'name' ,这样是没用,

目前来看,能用#就不要用$,

以上这篇在MyBatis中使用 # 和 $ 书写占位符的区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis-plus 返回部分字段的解决方式

    mybatis-plus的代码生成器会在实体类中生成数据库所有字段,我们去用mapper接口查询时,会返回数据库所有的字段. 但有些字段不是我们想要的,比如:deleted,所以我们可以在不需要的字段上面加@JsonIgnore注解,返回给前端的时候会自动把这个字段去除. 补充知识:Mybatis-Plus只查询特定字段与创建子类方法 Mybatis-Plus查询特定字段例子: Seal seal = sealService.selectOne( new EntityWrapper<Seal>

  • Mybatis打印替换占位符后的完整Sql教程

    利用mybtis插件打印完整的sql,将占位符?替换成实际值 import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.Paramete

  • mybatis 通过拦截器打印完整的sql语句以及执行结果操作

    开发过程中,如果使用mybatis做为ORM框架,经常需要打印出完整的sql语句以及执行的结果做为参考. 虽然mybatis结合日志框架可以做到,但打印出来的通常都是sql和参数分开的. 有时我们需要调试这条sql的时候,就需要把参数填进去,这样未免有些浪费时间. 此时我们可以通过实现mybatis拦截器来做到打印带参数的完整的sql,以及结果通过json输出到控制台. 直接看代码和使用方法吧: MyBatis拦截器打印不带问号的完整sql语句拦截器 import java.text.DateF

  • Mybatis在sqlite中无法读写byte[]类问题的解决办法

    开发环境: springboot + mybatis plus 场景:在DAO的bean中有byte[]类时,写入可以成功,但是读取不行.从错误栈中可以看到原因是:sqlite的driver中,JDBC4ResultSet没有实现以下接口: public Blob getBlob(int col) throws SQLException { throw unused(); } public Blob getBlob(String col) throws SQLException { throw

  • Mybatis如何实现延迟加载及缓存

    一.延迟加载 1.在mybatis.xml配置文件中,开启延迟加载 <settings> <!--开启延迟加载--> <setting name="lazyLoadingEnabled" value="true"></setting> <setting name="aggressiveLazyLoading" value="false"></setting>

  • MyBatis中$和#的深入讲解

    这是一次代码优化过程中发现的问题,在功能优化后发现部分数据查不到出来了,问题就在于一条sql上的#和$. 下图为两条sql: 从图上可以看出 wwlr.LabelId in(${showLabels}) 和 wwlr.LabelId in(#{showLabels}),其中showLabels是传进来一个字符串类型的参数,参数的样子是这样的"4,44,514",问题就出在这个参数传进来后#和$处理的方式是不一样的. 1.#{ }是预编译处理,MyBatis在处理#{ }时,它会将sql

  • 在MyBatis中使用 # 和 $ 书写占位符的区别说明

    #将传入的数据都当成一个字符串,会对传入的数据自动加上引号: $将传入的数据直接显示生成在SQL中 注意:使用 $ 占位符可能会导致SQL注入攻击,能用#的地方就不要使用 $ 写order by 子句的时候应该用 $ 而不是# 补充知识:mybatis 中生成的字段不带引号 #{}和${} 最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"",比如 sel

  • Mybatis日志参数快速替换占位符工具的详细步骤

    Mybatis log printf工具网页地址: http://www.feedme.ltd/log.html Mybatis执行的sql的打印格式为: 2020-08-04 09:16:44 -DEBUG - [io-8888-exec-5] .mapper.operation.OperationMapper.insert.        debug 145 : ==>  Preparing: INSERT INTO tulu.t_log_operation (id, module, mod

  • python中的十大%占位符对应的格式化的使用方法

    字符串格式化里的符号很多,本文详细的介绍一下,以便随时查找. %s :字符串的格式化,也是最常用的%d :格式化整数,也比较常用%c :格式化字符及ASCII码%u :格式化无符号整型%f :格式化浮点数,可以指定小数后面的精度%e :使用科学计数法格式化浮点数%o :格式化无符号八进制数%x :格式化无符号十六进制数%p :十六进制数格式化变量地址%g :%e和%f的简写 演示一下各个占位符格式化使用时的效果 '''格式化字符串''' var_s = '%s' % '我是一个字符串' prin

  • vue中的文本空格占位符说明

    目录 vue文本空格占位符使用 下面是几个普通html常用字符 vue中空格表示 vue @占位符的代码提示 vue文本空格占位符使用 下面是几个普通html常用字符   空格 & & < < > > " " vue中空格表示 三种空格unicode(\u00A0,\u0020,\u3000)表示的区别 1.不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ; 2.半角空格(英

  • java字符串中${}或者{}等的占位符替换工具类

    正如标题所述,这是一个替换java字符串中${}或者{}等占位符的工具类,其处理性能比较令人满意.该类主要通过简单的改写myatis框架中的GenericTokenParser类得到.在日常开发过程中,可以将该类进行简单的改进或封装,就可以用在需要打印日志的场景中,现在张贴出来给有需要的人,使用方式参考main方法,不再赘述! public class Parser { /** * 将字符串text中由openToken和closeToken组成的占位符依次替换为args数组中的值 * @par

  • vue中v-model和.sync修饰符的区别

    目录 前言 一.v-model 1. 作用 2.v-model的本质 3. v-model的特殊用法 二..sync修饰符 1. .sync修饰符作用 2. .sync修饰符本质 总结 .sync与v-model区别是 前言 在日常开发的过程中,v-model指令是经常用到的,一般来说 v-model 指令在表单及元素上创建双向数据绑定,但 v-model 本质是语法糖.但提到语法糖,这里就不得不提另一个与v-model有相似功能的双向绑定语法糖了,这就是 .sync修饰符.在这里就两者的使用进

  • Java字符串格式化,{}占位符根据名字替换实例

    我就废话不多说了,大家还是直接看代码吧~ import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringFormatUtil { private static

  • Java实现占位符名称替换值

    目录 前言 代码 原理 前言 占位符现在应该说是比较流行的动态赋值,方法有String.format(),通过%s或其他来赋值:或者MessageFormat.format(),通过{0}来赋值,参数名都不可定义 项目中有个需求,根据一串带着参数名占位符的url,替换掉对应参数名的值,由此有了以下的工具类. 代码 import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public

  • Mybatis中like搭配concat的写法详解

    目录 Mybatis like搭配concat写法 在Mybatis中的写法 Mybatis concat()函数模糊查询 Mybatis like搭配concat写法 在Mybatis中的写法  <!--concat Mysql和 Oracle区别 ,不存在sql注入-->   <select id="findUserByLikeName3" parameterType="java.lang.String" resultMap="use

  • MyBatis中#{}占位符与${}拼接符的用法说明

    1.关于#{}占位符 先来看以下的示例,该示例是MyBatis中的SQL映射配置文件(Mapper配置文件),在该配置中使用了#{}占位符. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mappe

随机推荐