MyBatis框架动态sql讲解(三)

95 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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>

测试:

image.png

运行结果:

image.png

6.2 批量删除

<!--    批量删除-->

<delete id="deleteBatch" >\
    delete from users where id in\
    <foreach collection="array" item="id" close=")" open="(" separator=",">\
        #{id}\
    </foreach>\
</delete>

测试:

image.png

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>

测试:

image.png

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>

测试类:

image.png