mybatis源码阅读之5:mybatis底层参数封装过程

上节讲了mybatis对各种参数的封装,本节说说mybatis底层是如何对参数进行特殊处理来封装参数的。

先补充一个点:

#{}与${}取值有什么不同?

#{}:是以预编译的方式将参数设置到sql中,具有防止sql注入的功能,即具有PreparedStatement防注入的功能

#{}更丰富的用法:

制定参数规则:javaType,jdbcType,mode(存储过程),numericScale,resultMap,typeHandler,jdbcTypeNamed等

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

${}:取出值直接拼装在sql中

总结:

大多数情况下,我们都用#{}取值,

但是针对分库分表时查询的表名时,以后通过${}获取表名去查询指定表中数据,例如

select * from ${tableName} order by ${orderby1},${orderby1}

下面开始说本文的重点:参数封装

猜你喜欢

转载自blog.csdn.net/licwzy/article/details/86699935
今日推荐