欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis多個接口參數(shù)的注解使用方式(@Param)

 更新時間:2018年10月09日 11:34:00   作者:阿進(jìn)的寫字臺  
這篇文章主要介紹了mybatis多個接口參數(shù)的注解使用方式(@Param),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1 簡介

1.1 單參數(shù)

在 Mybatis 中, 很多時候, 我們傳入接口的參數(shù)只有一個。 對應(yīng)接口參數(shù)的類型有兩種, 一種是基本的參數(shù)類型, 一種是 JavaBean 。

例如在根據(jù)主鍵獲取對象時, 我們只需要傳入一個主鍵的參數(shù)即可。 而在插入, 更新等操作時, 一般會涉及到很多參數(shù), 我們就使用 JavaBean 。

1.2 多參數(shù)

但是, 在實際的情況中, 我們遇到類似這樣的情況可能:

  1. 接口需要使用的參數(shù)多于一個;
  2. 接口需要使用的參數(shù)又遠(yuǎn)少于對應(yīng) JavaBean 的成員變量, 或者需要多個 JavaBean 對象;
  3. 或者需要使用的參數(shù)對應(yīng) JavaBean 沒有相應(yīng)的成員變量。

比如 獲取一段時間產(chǎn)生的日志信息, 日志對應(yīng)的 JavaBean 只有一個日期, 那我們使用該 JavaBean 就無法滿足我們的要求。

又比如我們進(jìn)行模糊搜索, 搜索條件只有兩個, 但對應(yīng)的 JavaBean 有 50+ 個成員變量, 那創(chuàng)建對應(yīng)的 JavaBean 就過于浪費了。

對此, 我知道的有如下幾種方法

2 多個接口參數(shù)的兩種使用方式

2.1 Map 方法(不推薦)

Map 方法的使用很簡單, 就是將對應(yīng)的參數(shù)以 key-value 的方式存儲, key 對應(yīng) SQL 中的參數(shù)名字, value 對應(yīng)需要傳入的參數(shù)值。

以獲取一段時間內(nèi)存儲的用戶為例

2.1.1 創(chuàng)建接口方法

/**
   * 獲取一段時間內(nèi)的用戶
   * @param params
   * @return
   */
  List<Student> selectBetweenCreatedTime(Map<String, Object> params);

該方法返回的是多個記錄, 因此使用 List 作為返回值。

2.1.2 配置對應(yīng)的SQL

<select id="selectBetweenCreatedTime" parameterType="java.util.Map" resultMap="BaseResultMap">
  select
  <include refid="Base_Column_List" />
  from student
  where gmt_created > #{bTime, jdbcType=TIMESTAMP} and gmt_created < #{eTime, jdbcType=TIMESTAMP}
 </select>

id 與 之前創(chuàng)建的方法名一樣。

2.1.3 調(diào)用

@Test
public void testSelectBtweenCreatedTimeMap() {

  Map<String, Object> params = new HashMap<>();
  Calendar bTime = Calendar.getInstance();
  // month 是從0~11, 所以9月是8
  bTime.set(2018, Calendar.AUGUST, 29);
  params.put("bTime", bTime.getTime());

  Calendar eTime = Calendar.getInstance();
  eTime.set(2018,Calendar.SEPTEMBER,2);
  params.put("eTime", eTime.getTime());
  SqlSession sqlSession = null;
  try {
    sqlSession = sqlSessionFactory.openSession();

    StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class);
    List<Student> students = studentMapper.selectBetweenCreatedTime(params);
    for (int i = 0; i < students.size(); i++) {
      System.out.println(students.get(i));
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    if (sqlSession != null) {
      sqlSession.close();
    }
  }
}

調(diào)用方法很簡單, 傳入相應(yīng)的 Map 參數(shù)即可。 此時, Map 中的 key 對應(yīng)。 因此, 在此例子中傳入的參數(shù)

  1. 傳入一個 key 為 btime 的時間, 作為開始時間;
  2. 傳入一個 key 為 etime 的時間, 作為結(jié)束時間;

2.2 @Param 方法(推薦)

@Param方法就是使用注解的方式,

2.2.1 創(chuàng)建接口方法

/**
 * 獲取指定時間內(nèi)的對象
 * @param pbTime 開始時間
 * @param peTime 結(jié)束時間
 * @return
 */
List<Student> selectBetweenCreatedTimeAnno(@Param("bTime")Date pbTime, @Param("eTime")Date peTime);

@Param(“bTime”)就是告訴 mybatis , 參數(shù) pbTime 在 SQL 語句中用 bTime 作為 key 。

也就是說, mybatis 幫我們完成了調(diào)用時, 類似 params.put(“bTime”, pbTime) 這個過程。

2.2.2 配置 SQL 語句

<select id="selectBetweenCreatedTimeAnno" resultMap="BaseResultMap">
  select
  <include refid="Base_Column_List" />
  from student
  where gmt_created > #{bTime, jdbcType=TIMESTAMP} and gmt_created < #{eTime, jdbcType=TIMESTAMP}
 </select>

此處的 bTime 對應(yīng)** @Param(“bTime”)** 中的 bTime , 需要完全一致。

eTime也是一樣。

2.2.3 調(diào)用

在調(diào)用時, 不需要創(chuàng)建 Map 了, 只需要按參數(shù)提示傳入對應(yīng)的實際參數(shù)即可。

@Test
public void testSelectBtweenCreatedTimeAnno() {

  Map<String, Object> params = new HashMap<>();
  Calendar bTime = Calendar.getInstance();
  // month 是從0~11, 所以9月是8
  bTime.set(2018, Calendar.AUGUST, 29);


  Calendar eTime = Calendar.getInstance();
  eTime.set(2018,Calendar.SEPTEMBER,2);

  SqlSession sqlSession = null;
  try {
    sqlSession = sqlSessionFactory.openSession();

    StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class);
    List<Student> students = studentMapper.selectBetweenCreatedTimeAnno(bTime.getTime(), eTime.getTime());
    for (int i = 0; i < students.size(); i++) {
      System.out.println(students.get(i));
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    if (sqlSession != null) {
      sqlSession.close();
    }
  }

}

3 @Param 的優(yōu)勢

Map 方式的缺點就是需要手動創(chuàng)建 Map , 并對 SQL 中的參數(shù)進(jìn)行賦值。其缺點:

  1. 手動創(chuàng)建 Map 這個過程很不簡潔, 看著很繁瑣。
  2. 手動對參數(shù)進(jìn)行賦值, 很容易出錯。 比如本來是要 params.put(“bTime”, bTime) 可能會不小心寫成 params.put(“bime”, bTime) , 但是這個時候編譯器并不會提示。

相比于 Map 方式, 使用 @Param 時, 我們在使用上就像調(diào)用方法一樣, 傳入對應(yīng)的實際參數(shù)即可。 調(diào)用時基本不會出錯。

4 Github

相應(yīng)代碼, 可以訪問 我的Github-helloMybatis

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解springboot中junit回滾

    詳解springboot中junit回滾

    本篇文章主要介紹了springboot中junit回滾,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Spring實戰(zhàn)之Bean的作用域singleton和prototype用法分析

    Spring實戰(zhàn)之Bean的作用域singleton和prototype用法分析

    這篇文章主要介紹了Spring實戰(zhàn)之Bean的作用域singleton和prototype用法,結(jié)合實例形式分析了Bean的作用域singleton和prototype相關(guān)使用方法及操作注意事項,需要的朋友可以參考下
    2019-11-11
  • Spring?JDBC?框架簡介

    Spring?JDBC?框架簡介

    Spring?JDBC?提供幾種方法和數(shù)據(jù)庫中相應(yīng)的不同的類與接口。我將給出使用JdbcTemplate類框架的經(jīng)典和最受歡迎的方法。本文給大家介紹Spring?JDBC?框架的相關(guān)知識,感興趣的朋友一起看看吧
    2021-12-12
  • SpringBoot使用Logback進(jìn)行日志記錄的代碼示例

    SpringBoot使用Logback進(jìn)行日志記錄的代碼示例

    在開發(fā)Web應(yīng)用程序時,日志記錄是非常重要的一部分,在SpringBoot中,我們可以使用Logback進(jìn)行日志記錄,Logback是一款高性能、靈活的日志框架,它可以滿足各種不同的日志需求,在本文中,我們介紹了如何在SpringBoot中使用Logback進(jìn)行日志記錄
    2023-06-06
  • Java開發(fā)中的OOM內(nèi)存溢出問題詳解

    Java開發(fā)中的OOM內(nèi)存溢出問題詳解

    這篇文章主要介紹了Java開發(fā)中的OOM內(nèi)存溢出問題詳解,OOM,全稱?Out?Of?Memory,意思是內(nèi)存耗盡或內(nèi)存溢出,當(dāng)JVM因為沒有足夠的內(nèi)存來為對象分配空間并且垃圾回收器也已經(jīng)沒有空間可回收時,就會拋出這個?error,需要的朋友可以參考下
    2023-08-08
  • Java通過正則表達(dá)式捕獲組中的文本

    Java通過正則表達(dá)式捕獲組中的文本

    這篇文章主要給大家介紹了關(guān)于利用Java如何通過正則表達(dá)式捕獲組中文本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧下
    2019-09-09
  • springboot實現(xiàn)后臺上傳圖片(工具類)

    springboot實現(xiàn)后臺上傳圖片(工具類)

    這篇文章主要為大家詳細(xì)介紹了springboot實現(xiàn)后臺上傳圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決

    jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決

    這篇文章主要介紹了jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java實現(xiàn)獲取安卓設(shè)備里已安裝的軟件包

    java實現(xiàn)獲取安卓設(shè)備里已安裝的軟件包

    本文給大家介紹的是如何獲取設(shè)備中已經(jīng)安裝的應(yīng)用軟件包的代碼,其核心方法原理很簡單,我們通過Android中提供的PackageManager類,來獲取手機(jī)中安裝的應(yīng)用程序信息
    2015-10-10
  • springboot中使用雪花算法生成雪花ID

    springboot中使用雪花算法生成雪花ID

    本文主要介紹了springboot中使用雪花算法生成雪花ID,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論