持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
6.1 循环遍历参数集合
<select id="getByIds" resultType="users">\
select <include refid="columns"></include>\
from users\
where id in\
<foreach collection="list" item="id" separator="," open="(" close=")">\
#{id}\
</foreach>\
</select>
测试:
运行结果:
6.2 批量删除
<!-- 批量删除-->
<delete id="deleteBatch" >\
delete from users where id in\
<foreach collection="array" item="id" close=")" open="(" separator=",">\
#{id}\
</foreach>\
</delete>
测试:
6.3 批量增加
<!-- 批量增加-->\
<insert id="insertBatch" >\
insert into users(username,birthday,sex,address) values\
<foreach collection="list" separator="," item="u">\
(#{u.userName},#{u.birthday},#{u.sex},#{u.address})\
</foreach>\
</insert>
测试:
6.4 批量更新****
<!-- 有选择的批量更新,至少更新一列-->\
<update id="updateSet" >\
<foreach collection="list" item="u" separator=";">\
update users\
<set>\
<if test="u.userName != null and u.userName != ''">\
username=#{u.userName},\
</if>\
<if test="u.birthday != null">\
birthday = #{u.birthday},\
</if>\
<if test="u.sex != null and u.sex != ''">\
sex = #{u.sex},\
</if>\
<if test="u.address != null and u.address != ''">\
address = #{u.address}\
</if>\
</set>\
where id = #{u.id}\
</foreach>\
</update>
测试
@Test\
public void testUpdateBatch()throws Exception{\
List<Users> list = new ArrayList<>();\
Users u1 = new Users(3,"张1167",new SimpleDateFormat("yyyy-MM-dd").parse("1997-02-03"),"2","北京大兴亦庄1111");\
Users u2 = new Users(4,"李2267",new SimpleDateFormat("yyyy-MM-dd").parse("1998-02-03"),"1","北京大兴亦庄2333");\
Users u3 = new Users(5,"王3367",new SimpleDateFormat("yyyy-MM-dd").parse("1999-02-03"),"2","北京大兴亦庄122");\
list.add(u1);\
list.add(u2);\
list.add(u3);\
int num = mapper.updateSet(list);\
session.commit();\
System.*out*.println(num);\
}
注意:要使用批量更新,必须在jdbc.properties属性文件中的url中添加&allowMultiQueries=true,允许多行操作。
7. 指定参数位置
可以不使用对象的属性名进行参数值绑定,使用下标值。 mybatis-3.3 版本和之前的版本使用#{0},#{1}方式, 从 mybatis3.4 开始使用#{arg0}方式。
UsersMapper.java接口中:
//查询指定日期范围内的用户信息,实体类的成员变量无法包含条件了,所以散给条件
List<Users> getByBirthday(Date begin **,** Date end) **;**
UsersMapper.xml文件中:
<select id="getByBirthday" resultType="users">\
select * from users where birthday between #{arg0} and #{arg1}\
</select>
测试类: