單個參數:mybatis不會作特殊處理java
多個參數:mybatis會作特殊處理,即把多個參數封裝成一個map ,key:param1....paramN,value:傳入的參數值,#{}就是就是從map中獲取指定的key的value,即#{param1},#{param2}等sql
多個參數處理:自定義封裝參數的key數據庫
若是多個參數正好是咱們業務邏輯的數據模型(能夠只是模型的部分數據)就能夠直接傳入pojoexpress
若是多個參數不是咱們咱們業務邏輯的模型,沒有對應的pojo,不推薦爲了方便,咱們能夠傳入map數組
若是多個參數不是咱們咱們業務邏輯的模型,可是常用,推薦封裝成一個vo(其實就是一個簡單的javabean,把全部參數封裝到一個java類中)安全
若是形參只有一個,可是形參的類型是集合(collection,list,set)或者數組,也會作特殊處理,把它們封裝到map中mybatis
#{}取值和${}取值的區別oracle
#{}更豐富的用法code
規定參數的一下規則:javaType、 jdbcType、 mode(存儲過程)、 numericScale、
resultMap、 typeHandler、 jdbcTypeName、 expression(將來準備支持的功能)xml
jdbcType:數據庫類型:一般須要在某種特定的條件下被設置:
在咱們數據爲null的時候,有些數據庫可能不能識別mybatis對null的默認處理。好比Oracle(報錯);
JdbcType OTHER:無效的類型;由於mybatis對全部的null都映射的是原生Jdbc的OTHER類型,oracle不能正確處理;
因爲全局配置中:jdbcTypeForNull=OTHER;oracle不支持;兩種辦法
#{email,jdbcType=OTHER};
jdbcTypeForNull=NULL
<setting name="jdbcTypeForNull" value="NULL"/>