mybatis 中的批量添加、删除、修改

来源:互联网 发布:ubuntu l2tp 编辑:程序博客网 时间:2024/05/19 22:56

现在很多公司和个人开始都会使用到mybatis 框架,而mybatis框架是一个orm框架,所以 数据库的 insert 、update、 delete 那肯定是必须的,但有个问题就是性能的问题。

这么说吧:看到有人在使用mybatis批量删除批量添加的时候还在程序中使用for循环来调用方法,这样是没错,但是性能稍微低一点,所以下面看几个批量处理的例子,相对直接在程序中for循环的效率要高一点:

1、批量添加:

[html] view plain copy
 print?
  1. <insert id="batchInsert" parameterType="java.util.List">  
  2.     INSERT INTO STUDENT (id,name,sex,tel,address)  
  3.     VALUES   
  4.     <foreach collection="list" item="item" index="index" separator="," >  
  5.         (#{item.id},#{item.name},#{item.sex},#{item.tel},#{item.address})  
  6.     </foreach>  
  7. </insert>  

2、批量修改:

[html] view plain copy
 print?
  1. <update id="batchUpdate" parameterType="java.util.List">  
  2.     UPDATE STUDENT SET name = "250" WHERE id IN  
  3.     <foreach collection="list" item="item" index="index" open="(" separator="," close=")" >  
  4.         #{item}  
  5.     </foreach>  
  6. </update>  

3、批量删除:

[html] view plain copy
 print?
  1. <delete id="batchDelete" parameterType="java.util.List">  
  2.     DELETE FROM STUDENT WHERE id IN  
  3.     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   
  4.         #{item}   
  5.     </foreach>  
  6. </delete>  

这种批量插入、修改、删除的方式比程序中for循环调用快原因如下:(1)、网络间传递的数据量少,当然传递的时间就少了很多。(2)、请求数据库服务的次数少,因为连接数据库服务是很耗时的(所以出了数据库连接池)。(3)、mybatis 在执行的时候才会获取Connection ,statement 对象所以想不for循环少创建了很多对象。

(4)、mybatis 的 执行方式有三种即:SIMPLE、REUSE、BATCH 三种方式,如果方便的话设置一下,如果使用SIMPLE 每一次执行都创建Statement对象并执行,如果使用REUSE  则重复使用preparedStatement 对象来执行 而BATCH 就是批量执行了而mybatis默认就是使用 SIMPLE 方式来执行,所以我们要注意最起码是不是应该是REUSE  执行方式。

三种执行方式之前的文章中已介绍过了,这里就不重复。三种执行方式文章地址:点击打开链接