前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis的#{}和${}的区别以及order by注入问题

mybatis的#{}和${}的区别以及order by注入问题

作者头像
河岸飞流
发布2019-08-08 17:26:03
1.4K0
发布2019-08-08 17:26:03
举报
文章被收录于专栏:开发杂记开发杂记
一、问题

根据前端传过来的表格排序字段和排序方式,后端使用的mybaits

代码语言:javascript
复制
select XXXX from table order by #{column} #{desc}

如上面的形式发现排序没有生效,查看打印的日志发现实际执行的sql为,排序没有生效

代码语言:javascript
复制
select XXXXX from table order by "column" "desc"
二、原因分析

主要还是对mybatis传参形式不了解,官方介绍如下:

By default, using the #{} syntax will cause MyBatis to generate PreparedStatement properties and set the values safely against the PreparedStatement parameters (e.g. ?). While this is safer, faster and almost always preferred, sometimes you just want to directly inject an unmodified string into the SQL Statement. For example, for ORDER BY, you might use something like this: @Select("select * from user where ${column} = #{value}") User findByColumn(@Param("column") String column, @Param("value") String value);

从官方文档中可以看出#{}相当于jdbc中的preparedstatement,进行了预编译,而${}直接是字符串本身,是有意设计成这样,方便拼接成动态sql,但是这样也带来缺点,可能存在注入问题。

参考阅读:http://www.mybatis.org/mybatis-3/sqlmap-xml.html#Parameters

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题
  • 二、原因分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档