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 中。