编程知识 cdmana.com

Give your mybatis plus wings with batch inserts


You have used MyBatis-Plus( abbreviation MP) We all know it's a MyBatis Enhanced tools for , Aimed at MyBatis On the basis of that, we can only enhance it and not change it , To simplify development 、 Increase efficiency .

characteristic

  • No intrusion : Just enhance and don't change , The introduction of it will not affect the existing project , Silky smooth

  • Low loss : Start up will automatically inject basic CURD, No loss in performance , Direct object-oriented operation

  • Powerful CRUD operation : Built in universal Mapper、 Universal Service, Only a small amount of configuration can realize most of the single table CRUD operation , More powerful conditional constructors , Meet all kinds of use needs

  • Support Lambda Form call : adopt Lambda expression , Convenient compilation of various query conditions , No need to worry about wrong field writing

  • Support automatic generation of primary key : Support up to 4 Primary key policies ( Including distributed uniqueness ID generator - Sequence), Freely configurable , Solve the primary key problem perfectly

  • Support ActiveRecord Pattern : Support ActiveRecord Form call , Entity classes only need to inherit Model Class for powerful CRUD operation

  • Support custom global common operations : Support global common method injection ( Write once, use anywhere )

  • Built in code generator : Use code or Maven Plug in can be generated quickly Mapper 、 Model 、 Service 、 Controller Layer code , Support template engine , You can use more customized configurations

  • Built in paging plug-in : be based on MyBatis Physical paging , Developers don't need to worry about specific operations , After the plug-in is configured , Write paging is equivalent to normal List Inquire about

  • Paging plug-ins support multiple databases : Support MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer Etc

  • Built in performance analysis plug-in : Can output Sql Statement and its execution time , It is recommended to enable this feature when developing tests , Can quickly find out the slow query

  • Built in global interception plug-in : Provide full tables delete 、 update Operation intelligence analysis blocking , You can also customize interception rules , Prevent misoperation

Text

In actual project development , We often have the need to save data in batches to the database , People use more or less mybatis-plus It's been done ?

Component dependency

First we have to go through Maven introduce mybatis-plus Open source components , stay pom.xml Add the following code to the file :

<!--mybatis-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!--mybatis plus extension, Contains mybatis plus core-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.0</version>
</dependency>

Discover by looking at the source code API Interface provides the interface for batch insertion :

After starting the service , use Postman debugging , Background printing is as follows :

You can see this so-called batch insert interface , It's really just a for Circular insert ,Oh,My God! It's a nightmare .

It's hard to do it by hand , such ,

INSERT INTO test (a, b, c) VALUES
<foreach collection="list" item="item" separator=",">
    (#{item.a}, #{item.b}, #{item.c})
</foreach>

We read mybatis-plus Source code , stay com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn In fact, there are batch implementation code in the package , I won't post the source code here , Let's track it by ourselves . Let's expand it by hand :

Extension code

Talk is cheap, show me the code. Show the code first . Then I'll take you to explain why this is achieved :

stay MybatisPlusConfig The file is filled with the Bean, The code is as follows :

@Configuration
public class MybatisPlusConfig {
/**
     *  Paging plug-ins 
     *
     * @return PaginationInterceptor
     */
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
    }
@Bean
public EasySqlInjector easySqlInjector() {
return new EasySqlInjector();
    }
}

And expand your own BaseMapper, The code is as follows :

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.Collection;

/**
 *  Extend universal  Mapper, Support batch data insertion 
 *
 * @author  Tiankaiyi thinks 
 */
public interface EasyBaseMapper<T> extends BaseMapper<T> {

/**
     *  Batch insert   Only applicable to mysql
     *
     * @param entityList  An entity list 
     * @return  Number of rows affected 
     */
Integer insertBatchSomeColumn(Collection<T> entityList);
}

In the business class , Implement the following reference , The code is as follows :

/**
 *  Define business mapper Interface , Inheritance just expanded EasyBaseMapper
 *
 * @author  Tiankaiyi thinks 
 */
@Mapper
public interface TestMapper extends EasyBaseMapper<Test> {
}

/**
 *  Business implementation class interface , You can quote 
 *
 * @author  Tiankaiyi thinks 
 */
@Service
public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {

@Override
public Integer testBatch(Collection<Test> testList) {
return baseMapper.insertBatchSomeColumn(testList);
    }

Because in BaseMapper It can't be quoted directly , Why can't we just quote , It is said that it only supports MySql database , So the author doesn't have a built-in reason !

author :ThinkYi

source :https://urlify.cn/FfaaYv

 Recommended reading 


 Code comparison tool , I'll use this 6 individual 

 Share my favorite 5 A free online  SQL  Database environment , It's so convenient !

Spring Boot  A combination of three moves , Hand in hand to teach you to play elegant back-end interface 

MySQL 5.7 vs 8.0, You choose the one ? Net friend : I'm going to stay where I am ~


 Last , I recommend you an interesting and interesting official account : The guy who wrote the code ,7 Old programmers teach you to write bug, reply   interview | resources   Send you a complete set of Development Notes   There's a surprise 

版权声明
本文为[Osc-u ha5lqlkf]所创,转载请带上原文链接,感谢

Scroll to Top