Integration of MyBatis-Plus with Spring Boot

Table of Contents:

1. Integrating MyBatis Plus with Spring Boot

2. Configuring Multiple Data Sources in MyBatisPlus

3. Summary of Annotations in MyBatisPlus

4. CRUD Operations in MyBatis Plus

5. Condition Builders in MyBatis-Plus

**6. Code Generation Tool in MyBatis-Plus

MyBatis-Plus (opens new window) (abbreviated as MP) serves as an enhanced toolkit for MyBatis (opens new window), aiming to simplify development and improve efficiency by extending MyBatis functionality without altering its core features.

1. Key Features

  • Non-intrusive: Enhances functionality without modifying existing code; integrates seamlessly into projects.
  • Minimal Performance Impact: Automatically injects basic CRUD operations upon startup with no performance degradation, enabling direct object-oriented manipulation.
  • Comprehensive CRUD Support: Comes with built-in universal Mapper and Service interfaces, allowing most single-table CRUD operations through minimal configuration. A powerful condition builder supports diverse query requirements.
  • Lambda Expression Support: Facilitates writing queries using lambda expressions, reducing errors related to field names.
  • Primary Key Auto-generation: Offers four primary key strategies including a distributed unique ID generator (Sequence), customizable for various needs.
  • Active Record Pattern Support: Allows entity classes to inherit from Model for performing extensive CRUD operations.
  • Custom Global Operations: Supports global method injection for reusable code across the application.
  • Built-in Code Generator: Generates Mapper, Model, Service, and Controller layers quickly via code or Maven plugin, with template engine support and extensive customization options.
  • Pagination Plugin: Provides physical pagination based on MyBatis. Once configured, pagination is as simple as regular list queries.
  • Multi-database Compatibility: Supports MySQL, Oracle, PostgreSQL, SQLite, SQL Server, and more.
  • Performance Analysis Plugin: Displays SQL statements along with execution times, useful for identifying slow queries during development and testing.
  • Global Interceptor Plugin: Prevents accidental full-table deletions or updates with intelligent analysis and custom interception rules.

2. Supported Databases

Any database that supports standard SQL and can perform CRUD operations with MyBatis is compatible. Specific support includes:

  • MySQL, Oracle, DB2, H2, HSQL, SQLite, PostgreSQL, SQLServer, Phoenix, Gauss, ClickHouse, Sybase, OceanBase, Firebird, Cubrid, Goldilocks, csiidb, informix, TDengine, redshift
  • Dameng, Xugu, KingbaseES, Nanjing General, Shenzhou, HanGuo, Uxun, Starrege databases

3. Framework Architecture

4. Dependency Setup

Add the Spring Boot parent project:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5+ version</version>
    <relativePath/>
</parent>

Include required dependencies in your project:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>latest version</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

5. Configuration

Configure H2 database settings in application.yml:

# DataSource Config
spring:
  datasource:
    driver-class-name: org.h2.Driver
    username: root
    password: test
  sql:
    init:
      schema-locations: classpath:db/schema-h2.sql
      data-locations: classpath:db/data-h2.sql

Annotate the main Spring Boot class with @MapperScan to scan the mapper package:

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

6. Implementation

Define the entity class User.java (using Lombok for concise code):

@Data
@TableName("`user`")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

Create the UserMapper interface under the mapper package:

public interface UserMapper extends BaseMapper<User> {

}

7. Usage Example

Create a test class to validate functionality:

@SpringBootTest
public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        Assert.isTrue(5 == userList.size(), "");
        userList.forEach(System.out::println);
    }

}

Note

The parameter for selectList() in UserMapper is a Wrapper instance from MP, so passing null results in no filtering.

Console output:

User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

Source: MyBatis-Plus Official Website

Thẻ: MyBatis-Plus Spring Boot Java Databases CRUD

Đăng vào ngày 9 tháng 9 lúc 11:33