MyBatis批量增删改的另外一种思路(推荐)

零、传统拼接SQL语句的弊端

传统上利用Mybatis进行批量操作的方式本质来说是拼接SQL语句,然后交给底层执行,如之前博文而言。

其实这种方式是存在弊端的:

1. SQL语句可能会过长,DB的引擎可能不支持。

2. MyBatis拼接耗费资源不说还容易写错。

一、新思路

使用JDBC底层的batch进行批量操作

1. 先添加如下xml,注册一个batchSession

<!--
        单独配置一个执行JDBC批量操作的session,底层等于sqlSessionFactory.openSession(ExecutorType.BATCH);
        底层使用org.apache.ibatis.executor.BatchExecutor作为执行引擎
-->
<bean id="batchSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory"/>
    <constructor-arg index="1" value="BATCH"/>
</bean>

2. 使用注入

/** 注入批处理SqlSessionTemplate */
    @Autowired
    private SqlSessionTemplate batchSqlSessionTemplate;

    //这里的Transactionl一定要加,底层实现是命中SQL和Statement,必须使用的是同一个Connection
    /**
     * 批量 insert
     * @param models
     * @return
     */
    @Transactional
    public int batchcInsert(List<Model> models){
        int result = 0;
        BaseMapper<Model> modelMapper = (BaseMapper<Model>) batchSqlSessionTemplate.getMapper(mapperClass);
        for (Model model:models) {
            result += modelMapper.insert(model);
        }
        return result;
    }

    //这里的Transactionl一定要加,底层实现是命中SQL和Statement,必须使用的是同一个Connection
    /**
     * 批量update
     * @param models
     * @return
     */
    @Transactional
    public int batchcUpdate(List<Model> models){
        BaseMapper<Model> modelMapper = (BaseMapper<Model>) batchSqlSessionTemplate.getMapper(mapperClass);
        int result = 0;
        for (Model model:models) {
            result += modelMapper.update(model);
        }
        return result;
    }

    // 批量删除delete
时间: 2024-10-02 10:23:29

MyBatis批量增删改的另外一种思路(推荐)的相关文章

MyBatis批量增删改查操作

前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 批量增加操作步骤 1. 在接口UserMapper中添加批量增加方法. /** * 批量增加操作 * @param users */ public void batchInsertUsers(List<User> users); 2.在User.xml中添加批量增加操作的配置. <!-- 批量增

上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。

1.引入依赖 <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> <!-- Mybatis起步依赖 --> <dependency> <groupId>o

entity framework 5 批量增删改效率优化

对于数据的批量增删改最慢的就是操作一条就提交一次事务. 以下是对增删改操作的优化测试 同样的300条数据 批量新增只提交一次事务 用时:10673.5444ms 批量新增只提交一次事务并把context.Configuration.AutoDetectChangesEnabled = false 用时:5284.5425ms 批量修改只提交一次事务 用时:3472.8314ms 批量修改只提交一次事务并把context.Configuration.AutoDetectChangesEnabled

OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当然,可以用代码生成器,不过配套的代码生成器暂时没有):又从网上找了一个封装了泛型方法的OracleHelper类,整合到一起,但貌似数据增删改查依然不方便:于是花了两天时间,在原有基础上对增删改查分页查询操作进行了面向对象的封装,并且对批量增删改操作进行事务封装,写事务代码更方便. 原理: 1.利用

mybatis实现增删改查

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录.    MyBatis的前身是IBatis,也是一个使用很广的持久化框架.和hibernate对比,MyBatis更基础,要求使用者自己控制的东西更多

mybatis之增删改查

一. 简介: Mybatis本是apache的一个开源项目ibatis, 2010年这个项目由apache software foundation迁移到了google code, 并且改名为Mybatis. Mybatis是一个基于Java的持久层框架. 二. 增删改查: 1. 代码结构图: 2. User实体类: /** * User实体类 */ public class User { private String id; private String uname; // 注意: 该字段名称与

MyBatis基本增删改查操作

本文内容主要介绍单条记录的增删改查操作,MyBatis提供了很多完成单条记录的增删改查操作的API.本例主要讲述<UserMapper> UserMapper org.apache.ibatis.session.SqlSession.getMapper(Class<UserMapper> clazz)的使用.使用此API,我们需要创建UserMapper操作接口,函数名和MyBatis的User.xml配置文件中的操作id名对应. [转载使用,请注明出处:http://blog.c

Bmob移动后端云服务平台--Android从零开始--(三)Bmob数据操作((批量)增删改)

Bmob移动后端云服务平台--Android从零开始--(三)Bmob数据操作((批量)增删改) 上篇文章简单的利用Bmob实现了用户注册与登录效果(http://blog.csdn.net/a123demi/article/details/42059621). 在项目中,对数据的操作脱离不了增删改查.Bmob其实也一样,他对数据操作的增删改查做了很好的封装,以及其批量的处理.本文将重点讲解利用Bmob实现Android端与Bmob服务端的数据操作,实现增加.修改.删除以及他们的批量处理. 源码

Hibernate 批量增删改查操作

上文介绍Hibernate基本的增删改查,本例将介绍更实用的批量增删改查的操作的实现.本文中增删改查的操作,仅供参考.如果读者需要应用到实际的应用场景需要的话,需要在此基础上扩展与丰富. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 在学习本例时,需要扩展一下Hibernate中Session的知识.Hibernate中的Session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在.Session可以理解为一个可以操作数据库的对象 具体如何操作