《Mybatis学习-7》 # 和 $ 的区别

导读:本篇文章讲解 《Mybatis学习-7》 # 和 $ 的区别,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在mybatis中,sql使用 #{} 和 ${} 都是可以获取map中的值或者pojo对象属性中的值。那么接下来就说明一下他们的区别。

mapper.xml中sql

select * from employee where id =  ${id}  and name =  #{name}

使用log4j将语句输出到控制台:

select * from employee where id = 2 and name = ?

区别:

#{}:是以预编译的形式,将参数设置到sql语句中的;能够防止sql注入;

${}:取出的值直接拼装在sql语句中;会有安全问题;

使用:

大多数情况下,我们都应该使用#{};

但是当原生jdbc不支持占位符的地方我们就应该使用${}来取值

比如:(不止以下两种…)

(1)分表:查找某一年的工资,比如2018_salary,2019_salary这种,我们需要将年份直接拼接在sql语句中

select * from ${year}_salary ;

(2)排序

select * from employee order by ${字段}  ${排序方式}

#{}:更丰富的用法

能够规定参数的一些规则:

比如:javaType,jdbcType,mode,resultMap,jdbcTypeName等

稍微记录一下jdbcType的用法,其他几个我好像没咋用到….

jdbcType通常需要在某种特定的条件下被设置:

在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。比如ORACLE(会报错)

因为在全局配置文件中 :jdbcTypeForNull =OTHER ;导致mybatis对所有的null都映射的是原生jdbc的OTHER类型。但是oracle并不支持这种类型,所以会导致报错。有两种方法解决:

(1)设置全局配置文件:

jdbcTypeForNull  = NULL;修改他的默认处理

(2)规定参数的规则

#{name , jdbcType=NULL};只会影响当前sql数据为null时候的默认处理

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/16877.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!