ibatis 参数为数组
<!-- 快速插入Demo --><insert id="sendMailFast" parameterparameteropen="(" close=")">#value[]#</iterate></delete>?这个写法验证无错,但是还是不太明白这个#value[]#,有时上网说是要写成这样:
用迭代来实现,用parameterClass?来接收然后通过<iterate>遍历整个集合
Iterate的属性:
prepend?-?可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property?-?类型为java.util.List的用于遍历的元素(必选)
open?-?整个遍历内容体开始的字符串,用于定义括号(可选)
close?-整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction?-?每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate>?遍?历类型为java.util.List的元素。
例子:?
User.xml
<select?id="getUser"?parameterClass="java.util.Map"?resultClass="userModel">
<![CDATA[?select * from userinfo WHERE (userid in
]]>
??<iterate?property="personList"?open="("?close=")"?conjunction=",">
????#personList[].userId#
<!--$personList[].userId$-->
???????????</iterate>
<![CDATA[
)
]]>
</select>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将?List输出成String。
(#)?使用的是PreparedStatement?机制,生成的SQL字符串中含有很多?,这些?会被动态的添加参数进去查询
($)?中的变量好比字符串直接替换。
Dao.java
public UserModel getUser(UserModel userModel) throws SQLException {??????????????????????
Map<String, Object> map = new HashMap<String, Object>();
List<UserModel> list = new ArrayList<UserModel>();
UserModel userModel1 = new UserModel();
userModel1.setUserId("1");
list.add(userModel1);
UserModel userModel2 = new UserModel();
userModel2.setUserId("lsw");?????????????????????????????????
list.add(userModel2);????
map.put("personList", list);
List sqlUserModelList = getSqlMapClientTemplate().queryForList("getUser", map);
UserModel sqlUserModel = new UserModel();?????????????????????
return sqlUserModel;????}