mybatis參數傳參、取值處理等

  1. 單個參數:mybatis不會作特殊處理java

    1. 取值方式:#{參數名} 這裏參數名沒必要與方法的形參名稱一致,能夠用任意參數名來接受實參
    2. 例子:方法:update(Integer id) sql映射文件取值#{a},這樣也能夠取到值
  2. 多個參數:mybatis會作特殊處理,即把多個參數封裝成一個map ,key:param1....paramN,value:傳入的參數值,#{}就是就是從map中獲取指定的key的value,即#{param1},#{param2}等sql

  3. 多個參數處理:自定義封裝參數的key數據庫

    1. 方法 get(@Param("id") Integer id,@Param("name") String name) key使用@Param註解指定的值
    2. 取值:#{id},#{name} #{自定的key}取出對應的值
  4. 若是多個參數正好是咱們業務邏輯的數據模型(能夠只是模型的部分數據)就能夠直接傳入pojoexpress

    1. #{屬性名}取出傳入的pojo屬性值
  5. 若是多個參數不是咱們咱們業務邏輯的模型,沒有對應的pojo,不推薦爲了方便,咱們能夠傳入map數組

    1. #{key}取出map中對應的值
  6. 若是多個參數不是咱們咱們業務邏輯的模型,可是常用,推薦封裝成一個vo(其實就是一個簡單的javabean,把全部參數封裝到一個java類中)安全

  7. 若是形參只有一個,可是形參的類型是集合(collection,list,set)或者數組,也會作特殊處理,把它們封裝到map中mybatis

    1. 若是形參是collection,那麼map的key是collection
    2. 若是是collection中的list,那麼map的key是list,取值#{list[0]},表示取出list中第一個元素
    3. 若是是數組,那麼map的key是array,取值#{array}
  8. #{}取值和${}取值的區別oracle

    1. #{}是以預編譯的形式,將參數設置到sql中 ,利用preparedStatement,防止sql注入
    2. ${},取出的值直接拼在sql中,有安全問題
    3. 原生jdbc不支持佔位符的地方zhi能用${}取值,好比分表、排序等
  9. #{}更豐富的用法code

    1. 規定參數的一下規則:javaType、 jdbcType、 mode(存儲過程)、 numericScale、
      resultMap、 typeHandler、 jdbcTypeName、 expression(將來準備支持的功能)xml

    2. jdbcType:數據庫類型:一般須要在某種特定的條件下被設置:

      1. 在咱們數據爲null的時候,有些數據庫可能不能識別mybatis對null的默認處理。好比Oracle(報錯);

      2. JdbcType OTHER:無效的類型;由於mybatis對全部的null都映射的是原生Jdbc的OTHER類型,oracle不能正確處理;

      3. 因爲全局配置中:jdbcTypeForNull=OTHER;oracle不支持;兩種辦法

        1. #{email,jdbcType=OTHER};

        2. jdbcTypeForNull=NULL

          <setting name="jdbcTypeForNull" value="NULL"/>
相關文章
相關標籤/搜索