最近做了一个项目用到了mybatis,针对mysql数据库的批量查询与批量更新,现在项目做完了,记下来。
1、批量插入
这是mapper接口
int insertAll(@Param("list") ArrayList<Question> list, @Param("m_id") Integer m_id);
由于我要做的是一个多对一的关联,所以接口中传入了一个集合和一个Integer类型,当然要用@param 注解加于区分他们的名字。
对应的mapper配置
<!-- 批量 插入 -->
<insert id="insertAll">
insert into t_result(m_id,q_id)
values
<foreach collection="list" item="item" index="index"
separator=",">
(#{m_id,jdbcType=INTEGER},#{item.id,jdbcType=INTEGER})
</foreach>
</insert>
对应上面代码应该很好看出怎么做
2、批量更新
这个是接口
int updateResluts(ArrayList<Result> list);
由于这里只有一个list集合所以可以不用@param注解,但是这里的形参必须为list,当然这是在没有用@param注解的前提下。
<!-- 批量更新答案 -->
<update id="updateResluts" parameterType="java.util.ArrayList">
<foreach collection="list" item="item" index="index" open=""
close="" separator=";">
update t_result
<set>
result = #{item.result,jdbcType=VARCHAR}
</set>
where m_id = #{item.m_id,jdbcType=INTEGER} and q_id =
#{item.q_id,jdbcType=INTEGER}
</foreach>
</update>
在进行批量更新测试前,必须在jdbc配置文件链接上加上
allowMultiQueries=true
完整的如下
jdbc.url=jdbc:mysql://ip:3306/xxx?characterEncoding=UTF-8&allowMultiQueries=true
好了,现在可以测试了