溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mybatis的幾種傳參方式詳解

發(fā)布時間:2020-10-08 08:04:45 來源:腳本之家 閱讀:196 作者:愛撒謊的男孩 欄目:開發(fā)技術(shù)

前言

  • 前幾天恰好面試一個應(yīng)屆生,問了一個很簡單的問題:你了解過Mybatis中有幾種傳參方式嗎?
  • 沒想到其他問題回答的很好,唯獨(dú)這個問題一知半解,勉強(qiáng)回答了其中兩種方式。
  • 于是這篇文章就來說一說Mybatis傳參的幾種常見方式,給正在面試或者準(zhǔn)備面試的朋友鞏固一下。

單個參數(shù)

單個參數(shù)的傳參比較簡單,可以是任意形式的,比如#{a}、#或者#{param1},但是為了開發(fā)規(guī)范,盡量使用和入?yún)r一樣。

Mapper如下:

UserInfo selectByUserId(String userId);

XML如下:

<select id="selectByUserId" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=1
 </select>

多個參數(shù)

多個參數(shù)的情況下有很多種傳參的方式,下面一一介紹。

使用索引【不推薦】

  • 多個參數(shù)可以使用類似于索引的方式傳值,比如#{param1}對應(yīng)第一個參數(shù),#{param2}對應(yīng)第二個參數(shù).......
  • Mapper方法如下:
UserInfo selectByUserIdAndStatus(String userId,Integer status);

XML如下:

<select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{param1} and status=#{param2}
 </select>

注意:由于開發(fā)規(guī)范,此種方式不推薦開發(fā)中使用。

使用@Param

@Param這個注解用于指定key,一旦指定了key,在SQL中即可對應(yīng)的key入?yún)ⅰ?/p>

Mapper方法如下:

UserInfo selectByUserIdAndStatus(@Param("userId") String userId,@Param("status") Integer status);

XML如下:

<select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

使用Map

Mybatis底層就是將入?yún)⑥D(zhuǎn)換成Map,入?yún)鱉ap當(dāng)然也行,此時#{key}中的key就對應(yīng)Map中的key。

Mapper中的方法如下:

UserInfo selectByUserIdAndStatusMap(Map<String,Object> map);

XML如下:

<select id="selectByUserIdAndStatusMap" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

測試如下:

@Test
 void contextLoads() {
  Map<String,Object> map=new HashMap<>();
  map.put("userId","1222");
  map.put("status",1);
  UserInfo userInfo = userMapper.selectByUserIdAndStatusMap(map);
  System.out.println(userInfo);
 }

POJO【推薦】

多個參數(shù)可以使用實體類封裝,此時對應(yīng)的key就是屬性名稱,注意一定要有g(shù)et方法。

Mapper方法如下:

UserInfo selectByEntity(UserInfoReq userInfoReq);

XML如下:

<select id="selectByEntity" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

實體類如下:

@Data
public class UserInfoReq {
 private String userId;
 private Integer status;
}

List傳參

List傳參也是比較常見的,通常是SQL中的in。

Mapper方法如下:

List<UserInfo> selectList( List<String> userIds);

XML如下:

<select id="selectList" resultMap="userResultMap">
  select * from user_info where status=1
  and user_id in
  <foreach collection="list" item="item" open="(" separator="," close=")" >
   #{item}
  </foreach>
 </select>

數(shù)組傳參

這種方式類似List傳參,依舊使用foreach語法。

Mapper方法如下:

List<UserInfo> selectList( String[] userIds);

XML如下:

<select id="selectList" resultMap="userResultMap">
  select * from user_info where status=1
  and user_id in
  <foreach collection="array" item="item" open="(" separator="," close=")" >
   #{item}
  </foreach>
 </select>

總結(jié)

到此這篇關(guān)于Mybatis的幾種傳參方式詳解的文章就介紹到這了,更多相關(guān)Mybatis傳參方式內(nèi)容請搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI