最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 簡(jiǎn)介

1.1 單參數(shù)

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

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

1.2 多參數(shù)

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

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

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

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

對(duì)此, 我知道的有如下幾種方法

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

2.1 Map 方法(不推薦)

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

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

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

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

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

2.1.2 配置對(duì)應(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)用方法很簡(jiǎn)單, 傳入相應(yīng)的 Map 參數(shù)即可。 此時(shí), Map 中的 key 對(duì)應(yīng)。 因此, 在此例子中傳入的參數(shù)

  1. 傳入一個(gè) key 為 btime 的時(shí)間, 作為開(kāi)始時(shí)間;
  2. 傳入一個(gè) key 為 etime 的時(shí)間, 作為結(jié)束時(shí)間;

2.2 @Param 方法(推薦)

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

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

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

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

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

2.2.2 配置 SQL 語(yǔ)句

<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 對(duì)應(yīng)** @Param(“bTime”)** 中的 bTime , 需要完全一致。

eTime也是一樣。

2.2.3 調(diào)用

在調(diào)用時(shí), 不需要?jiǎng)?chuàng)建 Map 了, 只需要按參數(shù)提示傳入對(duì)應(yīng)的實(shí)際參數(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)勢(shì)

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

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

相比于 Map 方式, 使用 @Param 時(shí), 我們?cè)谑褂蒙暇拖裾{(diào)用方法一樣, 傳入對(duì)應(yīng)的實(shí)際參數(shù)即可。 調(diào)用時(shí)基本不會(huì)出錯(cuò)。

4 Github

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

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

相關(guān)文章

  • Java關(guān)于MyBatis緩存詳解

    Java關(guān)于MyBatis緩存詳解

    緩存的重要性是不言而喻的,使用緩存,我們可以避免頻繁的與數(shù)據(jù)庫(kù)進(jìn)行交互,尤其是在查詢?cè)蕉?、緩存命中率越高的情況下,使用緩存對(duì)性能的提高更明顯。本文將給大家詳細(xì)的介紹,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2021-09-09
  • Java(TM) Platform SE binary 打開(kāi)jar文件的操作

    Java(TM) Platform SE binary 打開(kāi)jar文件的操作

    這篇文章主要介紹了Java(TM) Platform SE binary 打開(kāi)jar文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 濫用@PathVariable導(dǎo)致bug原因分析解決

    濫用@PathVariable導(dǎo)致bug原因分析解決

    這篇文章主要為大家介紹了濫用@PathVariable導(dǎo)致bug原因分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • SpringBoot使用easy-captcha 實(shí)現(xiàn)驗(yàn)證碼登錄功能(解決思路)

    SpringBoot使用easy-captcha 實(shí)現(xiàn)驗(yàn)證碼登錄功能(解決思路)

    文章介紹了如何使用Spring Boot和Easy-Captcha實(shí)現(xiàn)驗(yàn)證碼登錄功能,后端通過(guò)Easy-Captcha生成驗(yàn)證碼并存儲(chǔ)在Redis中,前端獲取驗(yàn)證碼并顯示給用戶,登錄時(shí),前端將用戶輸入的驗(yàn)證碼和標(biāo)識(shí)符發(fā)送到后端進(jìn)行驗(yàn)證,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • springboot2.6.7集成springfox3.0.0的示例代碼

    springboot2.6.7集成springfox3.0.0的示例代碼

    這篇文章主要介紹了springboot2.6.7集成springfox3.0.0的示例代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Java String初始化String域例題解析

    Java String初始化String域例題解析

    這篇文章主要介紹了Java String初始化String域例題解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Spring中ContextLoaderListener監(jiān)聽(tīng)詳解

    Spring中ContextLoaderListener監(jiān)聽(tīng)詳解

    這篇文章主要介紹了Spring中ContextLoaderListener監(jiān)聽(tīng)詳解,SpringMVC啟動(dòng)時(shí)會(huì)啟動(dòng)WebApplicationContext類型的容器,并且會(huì)調(diào)用之前分析的refresh方法,需要的朋友可以參考下
    2024-01-01
  • SpringBoot項(xiàng)目War包部署無(wú)法注冊(cè)到Nacos中的解決

    SpringBoot項(xiàng)目War包部署無(wú)法注冊(cè)到Nacos中的解決

    這篇文章主要介紹了SpringBoot項(xiàng)目War包部署無(wú)法注冊(cè)到Nacos中的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

    Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

    下面小編就為大家?guī)?lái)一篇Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • idea亂碼修改bin目錄下的idea.exe.vmoptions無(wú)效問(wèn)題

    idea亂碼修改bin目錄下的idea.exe.vmoptions無(wú)效問(wèn)題

    這篇文章主要介紹了idea亂碼修改bin目錄下的idea.exe.vmoptions無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

黄石市| 乐至县| 阜阳市| 攀枝花市| 咸宁市| 江都市| 三河市| 浦北县| 新化县| 商河县| 临漳县| 封开县| 中方县| 谢通门县| 四子王旗| 神木县| 金阳县| 张家口市| 德江县| 三江| 方城县| 蚌埠市| 宁都县| 山阴县| 绵竹市| 扎囊县| 白银市| 调兵山市| 水城县| 张掖市| 姚安县| 屏山县| 会宁县| 平果县| 綦江县| 青岛市| 手游| 礼泉县| 远安县| 宜兰市| 柳州市|