您的位置:首页 > 其它

mybatis $ 和# 的区别

2017-09-09 21:01 239 查看
${}和#{}

相同点:都可以获取map的值或pojo中对象属性的值。

不同点:#{}以预编译的形式,将参数设置在sql中,类似PrepareStatement。在sql中会是一个问号。可防止sql注入。

              ${}将值取出直接拼装在sql语句中。

一般表名动态(分表),或排序字段为动态时(按某个字段排序),使用${}

例如:select id,last_name lastName,email,gender from tbl_employee where id=${id} and last_name=#{lastName}

解析后:select id,last_name lastName,email,gender from tbl_employee where id=2 and last_name=?

#{}还有更丰富的用法就是可以传参数:

        javaType、 jdbcType、 mode(存储过程)、 numericScale、
resultMap、 typeHandler、 jdbcTypeName、 expression(未来准备支持的功能);

jdbcType通常需要在某种特定的条件下被设置:
在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。比如Oracle(报错);

JdbcType OTHER:无效的类型;因为mybatis对所有的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理;

由于全局配置中:jdbcTypeForNull=OTHER;oracle不支持;两种办法
1、#{email,jdbcType=NULL};
2、jdbcTypeForNull=NULL
<setting name="jdbcTypeForNull" value="NULL"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: