`
m635674608
  • 浏览: 5028361 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Mybatis的批量更新 bug

 
阅读更多

Mybatis的批量更新

      Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/。目前想批量更新,如果update的值是相同的话,很简单,组织
update table set column='...' where id in (1,2,3)l
这样的sql就可以了。Mybatis中这样写就行
<update id="batchUpdateStudentWithMap" parameterType="java.util.Map" >
    UPDATE STUDENT SET name = #{name} WHERE id IN
    <foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
</update>
      但是这样的需求很少,一般是有个集合,每个元素中的值是不一样的,然后需要一次性更新。一般的处理方式是使用for循环。这样的效率较低,当数据量大时,期望有种一次性插入的操作。如果使用的是mysql,有
insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) on duplicate key update
replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc) 
两种方式可以处理。
      当前数据库是oracle,可以使用case when来拼成一长串sql处理
UPDATE mytable
    SET myfield = CASE id
        WHEN 1 THEN 'value'
        WHEN 2 THEN 'value'
        WHEN 3 THEN 'value'
    END
WHERE id IN (1,2,3)
实际上这种方式对于mysql也有效。
      最开始的时候,想着写一系列并列的更新语句就可以了
<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";"
  open="" close="">
  update REGION_CODE set
    CODE=#{item.Code,jdbcType=VARCHAR},
    NAME=#{item.Name,jdbcType=VARCHAR}
    where ID = #{item.id,jdbcType=DECIMAL}
</foreach>
</update>
这样直接报错,因为Mybatis映射文件中的sql语句不允许 ; 符号。按照可行的case when处理方式,Mybatis映射文件书写方式如下:
<update id="updateBatch" parameterType="java.util.List">
  update REGION_CODE set
    CODE=
  <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
      when #{item.id,jdbcType=DECIMAL} then #{item.Code,jdbcType=VARCHAR}
  </foreach>
  ,NAME=
  <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
      when #{item.id,jdbcType=DECIMAL} then #{item.Name,jdbcType=VARCHAR}
  </foreach>
  where ID in
  <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
      #{item.id,jdbcType=DECIMAL}
  </foreach>
</update>
      至此,批量更新功能完成。
 
 总结:批量更新的时候,用;号结束不行。
 
http://ljhzzyx.blog.163.com/blog/static/38380312201482434852742/
分享到:
评论

相关推荐

    Mybatis增强工具包(Mybatis plus) v3.5.3.2.zip

    Mybatis Plus v3.5.3.2 版本可能包含了性能优化、Bug修复以及新的特性,使用这个版本可以确保享受到最新的功能和改进。在实际项目中,结合 Mybatis Plus 可以让数据库操作变得更加便捷高效,同时保持代码的整洁和可...

    mybatis-3.4.5开发jar包

    - 对MyBatis的文档进行了更新,为开发者提供了更详尽的使用指南。 在使用mybatis-3.4.5.jar包时,开发人员需要注意以下几点: 1. 配置MyBatis的全局配置文件(mybatis-config.xml),设置数据源、事务管理器等相关...

    mybatis3.5.6zip

    1. **版本更新**:MyBatis 3.5.6是MyBatis的一个稳定版本,它可能会包含对前一版本的bug修复、性能优化以及新的功能添加。了解这个版本的变更日志,可以帮助开发者更好地利用新特性,避免已知问题。 2. **XML配置与...

    mybatis-3.4.5.zip(jar包)

    MyBatis的每个版本都可能包含一些新功能、性能优化或者bug修复,因此升级到最新版本有助于提高项目的稳定性和兼容性。 描述中的"mybatis-3.4.5.zip和mybatis-3.4.5的资源文件统一下载"表明,除了核心库的jar包外,...

    MybatisX-1.5.7

    3. **增强型Mapper接口**:在原有Mybatis的基础上,MybatisX添加了一些便捷的方法,如分页查询、批量插入、批量更新等,使Mapper接口功能更加强大。 4. **数据权限控制**:MybatisX支持基于角色的数据权限控制,...

    mybatis-3.5.4.zip

    它有简单执行器、复用执行器和批量执行器三种类型,分别适用于不同的场景。 7. **ParameterHandler**: ParameterHandler负责处理SQL参数,将Java对象转化为数据库能理解的格式。 8. **ResultSetHandler**: ...

    MyBatis-3.5.4使用手册(超高清中文版)

    7. **MyBatis-Plus**:这是一个基于MyBatis的增强工具,简化了常见的CRUD操作,提供了丰富的API,包括条件构造器、批量操作、分页查询等,让开发更加便捷。 MyBatis 3.5.4可能包含以下更新和改进: - 性能优化:...

    Mybatis讲义laodu

    MyBatis提供了插入(Insert)、删除(Delete)、更新(Update)和查询(Select)的功能,支持单条和多条数据的操作。查询分为查询一条数据和查询多条数据。 **4. MyBatis核心配置文件详解** 核心配置文件包括...

    mybatis-1.3.3.zip 增强版本

    10. **兼容性和稳定性**:1.3.3版本在保持对老版本API兼容的同时,修复了已知的bug,增强了框架的稳定性和兼容性,确保在不同环境下都能稳定运行。 总之,MyBatis-1.3.3增强版本是Java开发者处理数据库操作的强大...

    mybatis中的sqlsession--executor实现.zip

    - **BatchExecutor**:批量执行器,支持批处理操作,对于多条插入、更新操作,它会一次性提交所有SQL,显著提升效率。 Executor的工作流程如下: 1. **预处理SQL**:根据SQL语句和参数,创建PreparedStatement对象...

    mybatis-source:mybatis原始调试

    3. **SqlSession**:SqlSession对象是MyBatis的会话,负责与数据库进行交互,包括查询、插入、更新和删除等操作。 4. **Executor(执行器)**:执行器是MyBatis内部处理SQL的组件,它负责执行SQL语句并返回结果。 ...

    Mybatis-plus(Mybatis增强工具包) v3.3.2

    【自动生成Entity Mapper Service文件】Mybatis-plus(Mybatis增强工具包) v3.3.2更新日志分页参数提取,单元测试用例修复 达梦数据库代码生成器表过滤支持 微软数据库代码生成器表过滤支持 修复代码生成器属性...

    mybatis mysql delete in操作只能删除第一条数据的方法

    出现的Bug 如图,我开始复制delete语句和参数到数据库执行,删除两条数据,但是后台执行...mybatis中的代码 &lt;!-- 批量删除--&gt; []&gt; &lt;![CDATA[ DELETE FROM p_customer WHERE customerId in ]]&gt; &lt;for

    通用Mapper

    4. 批量操作:支持批量插入、更新和删除,提高数据库操作性能。 5. 自定义Mapper扩展:如果通用Mapper提供的功能不能满足需求,可以通过自定义Mapper进行扩展。 三、通用Mapper的使用步骤 1. 引入依赖:在项目的pom...

    java高频面试题2/java二年开发常问面试题

    - 使用MyBatis时,可利用批处理注解如`@InsertProvider`或`@UpdateProvider`实现批量操作。 6. **AOP(面向切面编程)的应用**: - AOP广泛用于日志记录、权限控制、缓存管理、异常处理、性能优化等多个场景,...

    jdbc工具类-DBUtils1.6版jar包-正式版下载

    - **批量更新支持**:通过`batch()`方法可以方便地实现SQL语句的批量执行,显著提升执行效率。 - **查询结果转换**:支持将查询结果转换为不同的数据结构(如List、Map等),便于进一步处理。 - **错误处理改进**:...

    基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v5.8.0版_JAR)

    一直以来根据数据库表...5、MyBatis配置界面新增根据所有字段条件查询数据的选项。 6、新增TableGo使用说明书。 7、更新数据库驱动版本,新版的驱动可能不支持JDK8以下的版本。 8、修复了大量的Bug并进行了一些优化。

    基于springboot的毕业设计成绩管理系统源码数据库.zip

    3. MyBatis动态SQL:利用MyBatis的动态SQL功能,实现灵活的数据查询和更新。 4. JWT(JSON Web Token)认证:实现用户身份验证,提高安全性。 5. 异步处理:使用SpringBoot的Async注解,实现异步任务,提高系统响应...

    springboot+mybatisplus的旅游网站

    - 批量操作:支持单表或多表的批量插入、更新、删除。 **6. 旅游网站功能模块** - 用户模块:用户注册、登录、个人信息管理。 - 旅游线路模块:展示旅游线路,包括线路详情、图片、价格等信息。 - 预订模块:用户...

    SpringJdbcTemplate封装工具类

    "更新记录.docx"文件可能是项目开发过程中对SpringJdbcTemplate封装工具类的修改日志,记录了每次更新的功能改进、bug修复或性能优化等内容,这对于版本管理和问题排查非常有帮助。 通过上述分析,我们可以看到...

Global site tag (gtag.js) - Google Analytics