前言
單個參數
單個參數的傳參比較簡單,可以是任意形式的,比如#{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}對應第二個參數.......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傳參方式內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。