Mybatis学习第三弹

今天正好学到#{}和${}取值,想到之前面试的时候面试官问 Mybatis 里面的占位符是什么,自己傻傻地说了一个 % ,希望你看完以后不要再犯跟我一样的错误了

1、#{} 是Mybatia 中的占位符,它是以预编译(PrepareStatement)的形式,将参数用特定值(“?”)设置到SQL语句中,同时能有效的防止SQL注入;

2、${} 是Mybatis中的拼接符,采用直接将取出的值拼装到SQL语句中的方式,这种方式会有SQL注入的风险;

在大多数情况下,我们都应该采用#{}的方式来取值,但是在原始JDBC不支持占位符的时候,我们就需要采用${}的方式取值,比如取分表表名、排序字段,按照年份分表拆分:

 select * from ${year}_salary where xxx

 select * from tbl_employee order by ${f_name} ${order}

此外,#{}还具有更丰富的用法,比如规定传入参数的一些规则;这些规则包括:javaType mode(存储过程) numericScale resultMap  typeHandler jdbcTypeName expression(未来支持)

 例如jdbc在某些特定情况下需要被设置,当数据为 null 时,有些数据库可能无法识别Mybatis 对 null 的默认处理,比如 oracle 数据库;由于 Mybatis 默认对所有的 null 都映射为原生 jdbc 的 OTHER 类型,但 oracle 并不支持这种类型,所以此时需要通过明确指定 jdbcType=null 或修改 Mybatis 全局配置文件 jdbcTypeForNull=null(在使用多个数据库厂商的产品时不推荐使用此方法,单一使用 oracle 时推荐使用此方法)来让 oracle 能识别 null 值。

关注微信公众号:Javall咖啡屋
每天更新各种技术学习心得体会

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值