<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
大家平時在做業務時肯定會遇到會向表中批次新增資料的方法,那麼這種方法mybatis-plus給我們提供了嗎?
首先baseMapper中肯定沒有提供,如下:只是新增單個實體的
但是IService貌似給我們提供了一個批次新增的方法:saveBatch(Collection<T> entityList)
那我們就拿這個方法來測試一下
@Test public void testInsertMore(){ //批次新增 //INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? ) List<User> list = new ArrayList<>(); for (int i = 1; i <= 10; i++) { User user = new User(); user.setName("ybc"+i); user.setAge(20+i); list.add(user); } boolean b = userService.saveBatch(list); System.out.println(b); }
插入成功後:以下是列印出的sql語句
可以發現:雖然saveBatch(Collection<T> entityList)這個方法我們程式碼中只是一行程式碼,但是底層其實還是單條插入的。
但是這樣批次插入的速度有時其實是很慢的,那麼有沒有真正的批次插入方法呢?
其實mybatis-plus給我們預留了一個真正批次插入的擴充套件外掛InsertBatchSomeColumn
引入如下相關依賴
<!--mybatis-plus啟動器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.5.1</version> </dependency>
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; import java.util.List; public class EasySqlInjector extends DefaultSqlInjector { @Override public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) { // 注意:此SQL隱碼攻擊器繼承了DefaultSqlInjector(預設注入器),呼叫了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自帶方法 List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo); methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE)); return methodList; } }
@Configuration public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //新增分頁外掛 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //新增樂觀鎖外掛 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } @Bean public EasySqlInjector easySqlInjector() { return new EasySqlInjector(); } }
public interface EasyBaseMapper<T> extends BaseMapper<T> { /** * 批次插入 僅適用於mysql * * @param entityList 實體列表 * @return 影響行數 */ Integer insertBatchSomeColumn(Collection<T> entityList); }
@Repository public interface UserMapper<T> extends EasyBaseMapper<User> { }
@SpringBootApplication @MapperScan("com.atguigu.mybatisplus.mapper") public class MybatisplusApplication { public static void main(String[] args) { SpringApplication.run(MybatisplusApplication.class, args); } }
@SpringBootTest public class MyBatisPlusServiceTest { @Autowired private UserMapper userMapper; @Test public void testInsertMore(){ //批次新增 //INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? ) List<User> list = new ArrayList<>(); for (int i = 1; i <= 10; i++) { User user = new User(); user.setName("ybc"+i); user.setAge(20+i); list.add(user); } userMapper.insertBatchSomeColumn(list); } }
測試結果:
==> Preparing: INSERT INTO t_user (user_name,age,email,sex,is_deleted) VALUES (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?)
==> Parameters: ybc1(String), 21(Integer), null, null, null, ybc2(String), 22(Integer), null, null, null, ybc3(String), 23(Integer), null, null, null, ybc4(String), 24(Integer), null, null, null, ybc5(String), 25(Integer), null, null, null, ybc6(String), 26(Integer), null, null, null, ybc7(String), 27(Integer), null, null, null, ybc8(String), 28(Integer), null, null, null, ybc9(String), 29(Integer), null, null, null, ybc10(String), 30(Integer), null, null, null
<== Updates: 10
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@496a31da]
可以看到只執行了一條sql語句。
採坑點:希望自己注意自己的目錄結構(圖左)
我之前採用的是右邊的目錄結構導致一直報錯:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.atguigu.mybatisplus.mapper.UserMapper<com.atguigu.mybatisplus.pojo.User>' available: expected single matching bean but found 2: easyBaseMapper,userMapper
一直不知道原因出在什麼地方,後來考慮到可能是mapper檔案掃描時出現了問題,於是進行了修改,就OK了。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45