MyBatis中#和$的区别

  • Post author:
  • Post category:其他


MyBatis中#和$的区别

1.占位符:#.

1.1 使用PrepareStatement 对象执行sql 语句, #{}代替 sql 语句中的“?”。这样做更安全,更迅速,通常也是首选做法;

1.2 使用的PrepareStatement对象,效率高(sql语句只需要编译一次即可),且能避免sql注入,sql语句执行更安全;

1.3 #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个单引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by ‘111’, 如果传入的值是id,则解析成的sql为order by ‘id’。

2.占位符:$.

2.1 告诉mybatis 使用${}包含的“字符串”替换所在位置。效果是:把sql 语句和${}里面的内容拼接起来。主要用在替换表名,列名,排序等操作;

2.2 使用Statement对象,执行sql语句,效率低,因为每次执行前sql语句都要先编译一次;

2.3 ${}占位符的值,因为使用的字符串连接方式,有sql注入的风险,存在代码安全的问题;

2.4 在能保证数据安全的情况下可以选择使用${},例如传入表名或者列名、排序等操作。

2.5 $将传入的数据原样显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by 111,  如果传入的值是id,则解析成的sql为order by id.



版权声明:本文为m0_67514201原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。