mybatis參數傳參、取值處理等


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

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

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

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

    1. #{屬性名}取出傳入的pojo屬性值
  5. 如果多個參數不是我們我們業務邏輯的模型,沒有對應的pojo,不推薦為了方便,我們可以傳入map

    1. #{key}取出map中對應的值
  6. 如果多個參數不是我們我們業務邏輯的模型,但是經常使用,推薦封裝成一個vo(其實就是一個簡單的javabean,把所有參數封裝到一個java類中)

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

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

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

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

    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"/>
          


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM