<!-- 快速插入Demo --> <insert id="sendMailFast" parameterClass="java.util.ArrayList"> insert into mail(sender,reciver,content,type,flag,sendTime,endTime,goodId,msType,msNum) values <iterate conjunction=","> (#value[].sender#,#value[].reciver#,#value[].content#,#value[].type#,#value[].flag#,#value[].sendTime#,#value[].endTime#,#value[].goodId#,#value[].msType#,#value[].msNum#) </iterate> </insert> <!-- 删除指定邮件 --> <delete id="deleteMail" parameterClass="java.util.ArrayList"> delete from mail where id in <iterate conjunction="," open="(" close=")"> #value[]# </iterate> </delete>
这个写法验证无错,但是还是不太明白这个#value[]#,有时上网说是要写成这样:
用迭代来实现,用parameterClass 来接收然后通过<iterate>遍历整个集合 Iterate的属性: 例子: 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; } |