飞道的博客

MyBatis-Plus详细讲解(整合spring Boot)

618人阅读  评论(0)

哈喽,大家好,今天带大家了解的是MyBatis-Plus(简称 MP),是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

首先说一下MyBatis-Plus的愿景是什么?

MyBatis-Plus的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

一、特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便地编写各类查询条件,无需再担心字段写错

  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

二、支持的数据库

任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下。

MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb

达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库

三、框架结构

img

四、快速开始

我们将通过一个简单的 Demo 来阐述 MyBatis-Plus 的强大功能,在此之前,我们假设您已经:

  • 拥有 Java 开发环境以及相应 IDE

  • 熟悉 Spring Boot

  • 熟悉 Maven


现有一张 User 表,其表结构如下:

id

name

age

email

1

Jone

18

test1@baomidou.com

2

Jack

20

test2@baomidou.com

3

Tom

28

test3@baomidou.com

4

Sandy

21

test4@baomidou.com

5

Billie

24

test5@baomidou.com

其对应的数据库 Schema 脚本如下:


   
  1. DROP TABLE IF EXISTS user;
  2. CREATE TABLE user
  3. (
  4. id BIGINT( 20) NOT NULL COMMENT '主键ID',
  5. name VARCHAR( 30) NULL DEFAULT NULL COMMENT '姓名',
  6. age INT( 11) NULL DEFAULT NULL COMMENT '年龄',
  7. email VARCHAR( 50) NULL DEFAULT NULL COMMENT '邮箱',
  8. PRIMARY KEY (id)
  9. );

其对应的数据库 Data 脚本如下:


   
  1. DELETE FROM user;
  2. INSERT INTO user (id, name, age, email) VALUES
  3. ( 1, 'Jone', 18, 'test1@baomidou.com'),
  4. ( 2, 'Jack', 20, 'test2@baomidou.com'),
  5. ( 3, 'Tom', 28, 'test3@baomidou.com'),
  6. ( 4, 'Sandy', 21, 'test4@baomidou.com'),
  7. ( 5, 'Billie', 24, 'test5@baomidou.com');

Question

如果从零开始用 MyBatis-Plus 来实现该表的增删改查我们需要做什么呢?

1.初始化工程

创建一个空的 Spring Boot 工程(工程将以 H2 作为默认数据库进行演示)

可以使用 [Spring Initializer](https://start.spring.io/)快速初始化一个 Spring Boot 工程

2.添加依赖

引入 Spring Boot Starter 父工程:


   
  1. <parent>
  2. <groupId>org.springframework.boot </groupId>
  3. <artifactId>spring-boot-starter-parent </artifactId>
  4. <version>latest-springboot-version </version>
  5. <relativePath/>
  6. </parent>

引入 spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter、h2 依赖:


   
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot </groupId>
  4. <artifactId>spring-boot-starter </artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot </groupId>
  8. <artifactId>spring-boot-starter-test </artifactId>
  9. <scope>test </scope>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.baomidou </groupId>
  13. <artifactId>mybatis-plus-boot-starter </artifactId>
  14. <version>latest-version </version>
  15. </dependency>
  16. <dependency>
  17. <groupId>com.h2database </groupId>
  18. <artifactId>h2 </artifactId>
  19. <scope>runtime </scope>
  20. </dependency>
  21. </dependencies>

3.配置

在 application.yml 配置文件中添加 H2 数据库的相关配置:


   
  1. # DataSource Config
  2. spring:
  3. datasource:
  4. driver-class-name: org.h2.Driver
  5. schema: classpath:db/schema-h2.sql
  6. data: classpath:db/data-h2.sql
  7. url: jdbc:h2:mem:test
  8. username: root
  9. password: test

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:


   
  1. @SpringBootApplication
  2. @MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
  3. public class Application {
  4. public static void main (String[] args) {
  5. SpringApplication.run(Application.class, args);
  6. }
  7. }

4.编码

编写实体类 User.java(此处使用了 Lombok (opens new window)简化代码)


   
  1. @Data
  2. public class User {
  3. private Long id;
  4. private String name;
  5. private Integer age;
  6. private String email;
  7. }

编写 Mapper 包下的 UserMapper接口


   
  1. public interface UserMapper extends BaseMapper<User> {
  2. }

5.开始使用

添加测试类,进行功能测试:


   
  1. @SpringBootTest
  2. public class SampleTest {
  3. @Autowired
  4. private UserMapper userMapper;
  5. @Test
  6. public void testSelect () {
  7. System.out.println(( "----- selectAll method test ------"));
  8. List<User> userList = userMapper.selectList( null);
  9. Assert.assertEquals( 5, userList.size());
  10. userList.forEach(System.out::println);
  11. }
  12. }

UserMapper 中的 `selectList()` 方法的参数为 MP 内置的条件封装器 `Wrapper`,所以不填写就是无任何条件

控制台输出:


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

完整的代码示例请移步:https://github.com/baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-quickstart

五、有话说

通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

从以上步骤中,我们可以看到集成MyBatis-Plus非常的简单,只需要引入 starter 工程,并配置 mapper 扫描路径即可。

但 MyBatis-Plus 的强大远不止这些功能,想要详细了解 MyBatis-Plus 的强大功能?那就继续往下看吧!


转载:https://blog.csdn.net/qq_42003636/article/details/129108621
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场