亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

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

2024-07-14 08:42:28
字體:
來源:轉載
供稿:網友

1 簡介

1.1 單參數

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

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

1.2 多參數

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

  1. 接口需要使用的參數多于一個;
  2. 接口需要使用的參數又遠少于對應 JavaBean 的成員變量, 或者需要多個 JavaBean 對象;
  3. 或者需要使用的參數對應 JavaBean 沒有相應的成員變量。

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

又比如我們進行模糊搜索, 搜索條件只有兩個, 但對應的 JavaBean 有 50+ 個成員變量, 那創建對應的 JavaBean 就過于浪費了。

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

2 多個接口參數的兩種使用方式

2.1 Map 方法(不推薦)

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

以獲取一段時間內存儲的用戶為例

2.1.1 創建接口方法

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

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

2.1.2 配置對應的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 與 之前創建的方法名一樣。

2.1.3 調用

@Testpublic 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();    }  }}

調用方法很簡單, 傳入相應的 Map 參數即可。 此時, Map 中的 key 對應。 因此, 在此例子中傳入的參數

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

2.2 @Param 方法(推薦)

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

2.2.1 創建接口方法

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

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

也就是說, mybatis 幫我們完成了調用時, 類似 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 對應** @Param(“bTime”)** 中的 bTime , 需要完全一致。

eTime也是一樣。

2.2.3 調用

在調用時, 不需要創建 Map 了, 只需要按參數提示傳入對應的實際參數即可。

@Testpublic 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 的優勢

Map 方式的缺點就是需要手動創建 Map , 并對 SQL 中的參數進行賦值。其缺點:

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

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

4 Github

相應代碼, 可以訪問 我的Github-helloMybatis 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品视频久久久| 91欧美精品午夜性色福利在线| 欧美日韩综合视频网址| 国产精品自拍小视频| 国产98色在线| 91久久精品国产91性色| 精品成人乱色一区二区| 亚洲午夜激情免费视频| 亚洲欧洲在线播放| 欧美日韩黄色大片| 91精品国产综合久久香蕉最新版| 91免费福利视频| 国产精欧美一区二区三区| 亚洲欧洲日产国码av系列天堂| 26uuu另类亚洲欧美日本一| 色播久久人人爽人人爽人人片视av| 在线看福利67194| 久久精品小视频| 国产高清在线不卡| 欧美国产一区二区三区| 国产精品视频中文字幕91| 中文字幕九色91在线| 久久这里只有精品99| 日韩免费av在线| 欧美午夜激情在线| 日韩欧美精品网址| 91精品视频在线看| 国产精品视频大全| 成人在线视频福利| 自拍视频国产精品| 亚洲自拍欧美色图| 日韩av免费在线播放| 免费97视频在线精品国自产拍| 亚洲一区二区自拍| 亚洲男人天堂手机在线| 2019最新中文字幕| 97国产精品免费视频| 欧美成人在线网站| 日韩电影在线观看永久视频免费网站| 亚洲精选在线观看| 亚洲一区二区国产| 日韩欧美中文第一页| 亚洲国产99精品国自产| 91在线视频导航| 最新69国产成人精品视频免费| 色偷偷888欧美精品久久久| 欧美巨乳在线观看| 久久精品亚洲热| 538国产精品视频一区二区| 性欧美长视频免费观看不卡| 亚洲成人网久久久| 欧美精品在线看| 国产精品久久久久久影视| 欧美日韩久久久久| 国产精品久久久久av免费| 国产成人拍精品视频午夜网站| 日韩电影第一页| 精品亚洲夜色av98在线观看| 精品伊人久久97| 亚洲第一网站男人都懂| 成人精品一区二区三区电影黑人| 亚洲国产欧美一区二区丝袜黑人| 久久精品91久久香蕉加勒比| 97在线视频免费观看| 亚洲xxxx妇黄裸体| 亚洲天堂久久av| 成人做爰www免费看视频网站| 欧美成年人视频| 亚洲石原莉奈一区二区在线观看| 久久不射电影网| 综合网日日天干夜夜久久| 成人福利在线观看| 国产999在线| 久久久久久久国产| 亚洲第一精品电影| 一本一本久久a久久精品综合小说| 色偷偷偷综合中文字幕;dd| 91久久国产精品91久久性色| 欧美猛男性生活免费| 国产精品欧美在线| 国产精品网红福利| 欧美精品日韩三级| 久久伊人色综合| 日韩精品有码在线观看| 日韩欧美高清视频| 欧美大秀在线观看| 亚洲少妇中文在线| 97在线看福利| 黄色精品一区二区| 亚洲一区二区在线播放| 久久久视频在线| 亚洲国产精品字幕| 欧美特级www| 久久免费在线观看| 九九热精品视频国产| 欧美激情精品久久久久久变态| 91啪国产在线| 日韩中文第一页| 国产一区二区三区三区在线观看| 亚洲成色777777女色窝| 欧美午夜影院在线视频| 日韩av在线影视| 欧美亚洲激情视频| 亚洲iv一区二区三区| 欧美亚州一区二区三区| 欧美大尺度电影在线观看| 国产网站欧美日韩免费精品在线观看| 中文字幕亚洲二区| 色av吧综合网| 日韩欧美国产中文字幕| 伊人精品在线观看| 久久资源免费视频| 欧洲永久精品大片ww免费漫画| 亚洲成人激情在线| 欧美最猛黑人xxxx黑人猛叫黄| 久久免费视频这里只有精品| 日韩中文字在线| 国模精品系列视频| 亚洲中国色老太| 久久精品在线播放| 97精品国产aⅴ7777| 欧美大全免费观看电视剧大泉洋| 色综合影院在线| 久久香蕉国产线看观看网| 亚洲无亚洲人成网站77777| 九九精品在线播放| 亚洲国产精品系列| 国产精品69久久| 国产小视频国产精品| 欧美激情视频在线免费观看 欧美视频免费一| 日韩国产欧美精品在线| 欧美精品免费在线观看| 色哟哟入口国产精品| 在线观看中文字幕亚洲| 亚洲黄页网在线观看| 97热在线精品视频在线观看| 日韩在线观看你懂的| 成人国产在线激情| 在线电影欧美日韩一区二区私密| 亚洲自拍偷拍视频| 亚洲精品国产欧美| 成人国产精品一区| 欧洲亚洲免费视频| 亚洲奶大毛多的老太婆| 亚洲欧美日韩成人| 欧美成人一区二区三区电影| 欧美极品美女视频网站在线观看免费| 亚洲最大av在线| 91久久精品一区| 欧美日韩中文字幕在线| 亚洲三级黄色在线观看| 亚洲精品久久久久久久久| 国产美女被下药99| 国产日韩欧美夫妻视频在线观看| 欧美二区乱c黑人| 国产一区视频在线播放| 不卡伊人av在线播放| 中文字幕成人在线| 亚洲国产成人久久| 久久精品中文字幕| 亚洲成人黄色在线观看| 成人欧美在线观看| 日韩在线小视频| 中文字幕av日韩|