接下来,让我们跟着源码看一下,究竟是如何基于这些ID策略做id自增的,本文主要以ID_WORKER(3)策略id来追踪。 先从插入insert方法开始。 基于前文创建的UserInfo类,我们写一个test的方法,用于追踪insert方法—— @Testpublicvoidtest(){UserInfouserInfo=newUserInfo();userInfo.setUserName("用户名");userInfo.setAge(...
(2)NONE:无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)。 (3)INPUT:insert前自行set主键值,即我们插入前,需要手动设置id。 (4)ASSIGN_ID:分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花...
而当我们继续阅读mybatis-plus的源码可以发现,在com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn包中已经为我们实现了真正意义上的批量插入方法,这里就不贴实现的源码了,有兴趣的可以去看看。 因此,我们需要做的就是生效该批量了插入方法,从而可以让我们通过Mapper来调用它。 二、实现批量插入...
userInfoMapper.insert(userInfo); } 可以看到,此时的id=0,还没有任何值—— 执行到insert的时候,底层会执行一个动态代理,最终通过动态代理,执行DefaultSqlSession类的insert方法,可以看到,insert方法里,最终调用的是一个update方法。 在mybatis中,无论是新增insert或者更新update,其底层都是统一调用DefaultSqlSession的up...
并且还带着大家看了内部实现的源码,这种方式比起自己for循环一条一条INSERT插入数据性能要更高,原因是在会话这块做了优化,虽然实际执行并不是真的批量插入。 利用SQL 注入器实现真的批量插入 接下来,小哈就手把手带你通过 Mybatis Plus 框架的 SQL 注入器实现一个真的批量插入。
1. insert用法 1.1 简单的insert方法 假如现在我们想新增一个用户,该如何操作呢? 首先,在接口SysUserMapper中添加如下方法。 /** * 新增用户 * * @param sysUser * @return */ int insert(SysUser sysUser); /** * 新增用户 * * @param sysUser ...
insert(user); } 这样,当调用addUser方法时,Mybatis-Plus就会自动将user对象插入到数据库中。 三、insert方法的源码分析 虽然使用insert方法非常简单,但是了解其背后的实现原理对于更深入的理解Mybatis-Plus非常有帮助。下面我们将简要分析insert方法的源码实现。 Mybatis-Plus的insert方法最终会调用Mybatis的SqlSession...
我点进去看了下源码,感觉有点不太对劲: 我继续追踪了下,从这个代码来看,确实是 for 循环一条一条执行了sqlSession.insert,下面的 consumer 执行的就是上面的sqlSession.insert: 然后累计一定数量后,一批 flush。 从这点来看,这个 saveBach 的性能肯定比直接一条一条 insert 快。
packagecom.lanran.transactional.config;importcom.baomidou.mybatisplus.core.injector.AbstractMethod;importcom.baomidou.mybatisplus.core.injector.DefaultSqlInjector;importcom.baomidou.mybatisplus.core.metadata.TableInfo;importcom.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;importjava.util...