激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - mybatis多個接口參數的注解使用方式(@Param)

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

2021-06-03 11:11阿進的寫字臺 Java教程

這篇文章主要介紹了mybatis多個接口參數的注解使用方式(@Param),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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 創建接口方法

?
1
2
3
4
5
6
/**
   * 獲取一段時間內的用戶
   * @param params
   * @return
   */
  list<student> selectbetweencreatedtime(map<string, object> params);

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

2.1.2 配置對應的sql

?
1
2
3
4
5
6
<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 調用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@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();
    }
  }
}

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

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

2.2 @param 方法(推薦)

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

2.2.1 創建接口方法

?
1
2
3
4
5
6
7
/**
 * 獲取指定時間內的對象
 * @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 語句

?
1
2
3
4
5
6
<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 了, 只需要按參數提示傳入對應的實際參數即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@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 的優勢

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

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

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

4 github

相應代碼, 可以訪問 我的github-hellomybatis

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/weixin_37139197/article/details/82975594

延伸 · 閱讀

精彩推薦
1280
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 欧美18一12sex性处hd | 一级免费黄视频 | 黄色网址在线免费播放 | 国产一区视频在线观看免费 | 毛片视频免费观看 | 精品成人免费一区二区三区 | 精品亚洲视频在线 | 玩偶姐姐在线观看免费 | 天天操天天碰 | 国产乱淫a∨片免费视频 | 高清一区二区在线观看 | 欧美黄色大片免费观看 | 日本大片在线播放 | 九九热在线观看视频 | 国产麻豆久久 | 看国产毛片 | 爱福利视频 | 亚洲乱妇19p| 99精品视频99 | 国产99视频精品免视看9 | 国产精品高潮99久久久久久久 | 污版视频在线观看 | 欧美亚洲综合网 | 亚洲白嫩在线观看 | 一区二区久久电影 | 男女隐私免费视频 | 欧美成人免费一级 | av影院在线播放 | 在线一级片 | 成人免费在线视频播放 | 亚洲无线看 | 亚洲网在线观看 | 97中文| 欧美一级三级在线观看 | 99在线啪| 国产1区2区3区中文字幕 | 91福利在线观看 | 一区二区三区播放 | 免费久久久 | 色综合视频 | 成人h视频在线 |