溫馨提示×

溫馨提示×

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

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

Mybatis的幾種傳參方式詳解

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

前言

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

單個參數

單個參數的傳參比較簡單,可以是任意形式的,比如#{a}、#或者#{param1},但是為了開發規范,盡量使用和入參時一樣。

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>

多個參數

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

使用索引【不推薦】

  • 多個參數可以使用類似于索引的方式傳值,比如#{param1}對應第一個參數,#{param2}對應第二個參數.......
  • 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>

注意:由于開發規范,此種方式不推薦開發中使用。

使用@Param

@Param這個注解用于指定key,一旦指定了key,在SQL中即可對應的key入參。

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底層就是將入參轉換成Map,入參傳Map當然也行,此時#{key}中的key就對應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【推薦】

多個參數可以使用實體類封裝,此時對應的key就是屬性名稱,注意一定要有get方法。

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>

數組傳參

這種方式類似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>

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女