一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产最强大片免费视频 | 双性受合不垅腿攻np | 99ri国产在线 | 国内精品视频免费观看 | 俄罗斯一级成人毛片 | 第一福利在线观看永久视频 | 青青青国产精品国产精品久久久久 | 女医学护士一级毛片 | 骚虎tv| 无遮挡免费h肉动漫在线观看 | 久久免费黄色 | free嫩白的12sex性自由 | 色噜噜 男人的天堂在线观看 | 好大好深好舒服 | 丰满岳乱妇在线观看视频国产 | h动态图男女啪啪27报 | 日本免费一区二区三区四区五六区 | 日韩精品中文字幕久久 | 色中色官网 | 91香蕉视频在线观看 | 特黄一级大片 | 2023最新伦理片 | 毛片在线观看网站 | 欧美3p大片在线观看完整版 | 逼逼爱| 亚洲羞羞裸色私人影院 | 亚洲 日韩 自拍 视频一区 | 扒开放荡老师裙子猛烈的进入 | 日朝欧美亚洲精品 | 国产精品原创巨作无遮挡 | 欧美国产在线观看 | 成人永久免费福利视频网站 | 国产第9页 | 午夜福利电影网站鲁片大全 | 美日毛片 | a∨在线观看 | 国产清纯白嫩大学生正在播放 | 四虎影视在线影院在线观看 | 日你逼 | 日韩毛片网 | 和老外3p爽粗大免费视频 |