MyBatis-parameterType 取出入參值


SQL 映射文件的幾種入參情況

 

一、單個基本類型參數

public MyUser selectMyUser(Integer id);
<!-- #{參數名或任意名}:取出參數值 -->
<select id="selectMyUser" resultType="myUser" parameterType="integer">
  select * from myuser where id = #{id}
</select>

 

二、多個基本類型參數

多個參數會被封裝成 一個Map,Key 為 param1...paramN,或者參數的索引 (0開始):arg0...argN,Value 為傳入的參數值

public MyUser selectMyUserIdAndAge(Integer id,Integer age);
<!-- #{arg0}/#{param1}:取出參數值 -->
<select id="selectMyUserIdAndAge" resultType="myUser">
  select * from myuser where id = #{param1} and age = #{arg1}
</select>

使用 @Param 注解

public MyUser selectMyUserIdAndAge(@Param("id") Integer id, @Param("age") Integer age);
<!-- #{@Param標識值}:取出參數值 -->
<select id="selectMyUserIdAndAge" resultType="myUser">
  select * from myuser where id = #{id} and age = #{age}
</select>

封裝成 Map 對象

public MyUser selectMyUserIdAndAgeOfMap(Map<String,Object> map);
<!-- #{key}:取出map中對應的值 -->
<select id="selectMyUserIdAndAgeOfMap" resultType="myUser">
  select * from myuser where id = #{id} and age = #{age}
</select>

封裝成一個類,例直接使用 POJO 對象

public Integer updateMyUser(MyUser user);
<!-- #{屬性名}:取出傳入pojo的屬性值 -->
<update id="updateMyUser" parameterType="myUser">
    update myuser set name=#{name},age=#{age} where id=#{id}
</update>

 

三、Collection 集合類型

public MyUser selectMyUserByList(List<Integer> ids);
<!-- #{collection[0]}:取出參數值,若為 List 還可使用 #{list[0]} -->
<select id="selectMyUserByList" resultType="myUser">
  select * from myuser where id = #{list[0]}
</select>

 

四、Array 數組類型

public MyUser selectMyUserByArray(Integer[] integers);
<!-- #{array[0]}:取出參數值 -->
<select id="selectMyUserByArray" resultType="myUser">
  select * from myuser where id = #{array[0]}
</select>

 

五、多種參數類型

public MyUser selectMyUserIdAndAge(Integer id, @Param("user") MyUser user);
<select id="selectMyUserIdAndAge" resultType="myUser">
  select * from myuser where id = #{arg0} and age = #{user.age}
</select>

 

附上 MyBatis 封裝集合的方法

org.apache.ibatis.session.defaults.DefaultSqlSession

public class DefaultSqlSession implements SqlSession {

    private Object wrapCollection(final Object object) {
        if (object instanceof Collection) {
            StrictMap<Object> map = new StrictMap<>();
            map.put("collection", object);
            if (object instanceof List) {
                map.put("list", object);
            }
            return map;
        } else if (object != null && object.getClass().isArray()) {
            StrictMap<Object> map = new StrictMap<>();
            map.put("array", object);
            return map;
        }
        return object;
    }

 


 

如果傳入的是 Collection(List、Set)集合類型或者是 Array 數組類型,會把傳入的 Collection 集合或者 Array 數組封裝在 Map 中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM