Mybatis-Plus在控制台打印SQL语句和#{}, ${}之间的区别

Mybatis-Plus在控制台打印SQL语句和#{}, ${}之间的区别


使用Mybatis-Plus时, 在控制台打印SQL语句
只需要在 application.yml中加入如下的配置即可:

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

效果如下所示:

==>  Preparing: select * from `user` where 1 = 1 and `name` like concat("%", ?, "%");
==> Parameters: w(String)
<==    Columns: id, name, age
<==        Row: 39a773890a1b12b8a072c1be02ff3cdc, w, 12
<==        Row: 3b25fb904548c28b7ac6882d86c7ae5f, w, 12
<==        Row: fad61205ca73fb517ca97cc682bc68b9, w, 12
<==        Row: fd5921bac71d483cb94db02b77a8a33a, w, 12
<==      Total: 4

另外在此次查询中注意到: #{}${} 之间的区别与使用.

默认情况下, 使用 #{} 参数语法时, MyBatis 会创建 PreparedStatement 参数占位符, 并通过占位符安全地设置参数(就像使用 ? 一样). 这样做更安全, 更迅速, 通常也是首选做法.
不过有时你就是想直接在 SQL 语句中直接插入一个不转义的字符串.

这时候可以考虑使用 ${} 来取值, 不过这时候就有可能出现SQL注入的情况. 解决这种情况的其中一种途径是使用SQL中的

concat(str1, str2, ...)

函数, 将取出的值得两侧加上单引号 即可. 如

<select id="findByName" resultType="org.wxmx.mybatis_plus_study.entity.User" parameterType="string">
    select *
    from `user`
    where 1 = 1
    <if test="name != null and name != ''">
        and `name` like concat("%", #{name}, "%");
    </if>
</select>

MybatisLog

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值