一起来学Mybatis Plus(一) & 快速入门

前言

目前正在出一个Mybatis Plus系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

之前给大家讲过Mybatis教程,而MyBatis-Plus 是一个 MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。大家需要注意的是它只是一个工具,大家需要掌握和重点学习的依然是Mybatis,在熟练掌握基础的情况下使用MyBatis-Plus会达到事半功倍的效果。

好了, 废话不多说直接开整吧~

简介介绍

MyBatis-Plus 是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 deleteupdate操作智能分析阻断,也可自定义拦截规则,预防误操作

可以看到内置的功能非常的多,很强大

支持数据库

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

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

框架结构

  1. MyBatis-Plus Core:核心模块,提供了对MyBatis的增强和扩展,包括分页、动态SQL、对象映射等功能。
  2. MyBatis-Plus JDBC:JDBC模块,提供了一些实用的方法,如获取数据库连接、执行SQL语句等。
  3. MyBatis-Plus Meta:元数据模块,用于解析数据库的元数据信息,包括数据库表结构、字段信息等。
  4. MyBatis-Plus PageHelper:分页模块,提供分页查询的功能。
  5. MyBatis-Plus Generator:代码生成模块,用于自动生成MyBatis的Mapper接口、XML文件和Java实体类。
  6. MyBatis-Plus Annotations:注解模块,提供了一些自定义的注解,用于简化代码编写。
  7. MyBatis-Plus Extensions:扩展模块,提供了一些实用的扩展功能,如缓存、事务管理等。

快速入门

首先我们新建一张测试表

sql 复制代码
CREATE TABLE `user`
(
    id BIGINT NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT NULL DEFAULT NULL COMMENT '年龄',
    PRIMARY KEY (id)
);

紧接着,开始搭建项目,这里使用的版本大家可以做个参考,我使用的mybatis-plus版本是最新版本

xml 复制代码
 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
    <!--mybatis plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.4.1</version>
</dependency>
<!--集成druid连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
<!-- Mysql驱动包 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-test</artifactId>
</dependency>

启动类:

java 复制代码
@SpringBootApplication
public class MyBatisPlusApp {
    public static void main(String[] args) {
        SpringApplication.run(MyBatisPlusApp.class, args);
    }

}

配置文件application.yml:

yml 复制代码
# DataSource Config
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: xxxxx

mybatis:
  mapper-locations:
    - classpath:mapper/*.xml
    - classpath*:com/**/mapper/*.xml
  configuration:
    cache-enabled: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

配置类:

java 复制代码
@Configuration
@MapperScan("com.springboot.all.mybatisplus.mapper")
public class MyBatisPlusConfig {
}

紧接着定义一个UserMapper,使其继承mybatisplus的接口,这个接口为我们提供了一些基本的crud方法,无需我们手动再编写mapper xml

java 复制代码
package com.springboot.all.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.springboot.all.mybatisplus.model.User;


public interface UserMapper extends BaseMapper<User> {
}

紧接着定义User实体类,指向刚刚建的user表:

java 复制代码
@Builder
@Data
@TableName("`user`")
public class User {
    private Long id;
    private String name;
    private Integer age;
}

下面通过测试用例快速体验一下

java 复制代码
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { MyBatisPlusApp.class})
public class UserTest {

    @Autowired
    private UserMapper userMapper;

    /**
     * 查询测试
     */
    @Test
    public void selectListTest() {
        // select all
        List<User> userList = userMapper.selectList(null);
        Assert.isTrue(5 == userList.size(), "user list size 不等于 5");
    }

    /**
     * 新增测试
     */
    @Test
    public void insertTest() {
        // insert
        userMapper.insert(User.builder().name("xiaohong1").age(21).build());
        userMapper.insert(User.builder().name("xiaohong2").age(22).build());
        userMapper.insert(User.builder().name("xiaohong3").age(23).build());
        userMapper.insert(User.builder().name("xiaohong4").age(24).build());
        userMapper.insert(User.builder().name("xiaohong5").age(25).build());
    }

    /**
     * 更新测试
     */
    @Test
    public void updateTest() {
        // update
        userMapper.updateById(User.builder().id(1731552348286300161L).name("xiaohong1-update").build());
    }


    /**
     * 删除测试
     */
    @Test
    public void deleteTest() {
        // delete
        userMapper.deleteById(User.builder().id(1731552348286300161L).build());
    }
}

以上是基本的CRUD操作,大家也可以通过它的接口类BaseMapper查看一下其它用法,尝试去输出点什么,内部已经帮我们封装了常用的数据操作

结束语

上述是基本的增删改查例子,下节给大家讲解它的一些内置注解

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

往期Nginx教程相关文章

往期Docker教程相关文章

往前Shell脚本编程相关文章

往期Linux相关文章

往期面试题相关文章

项目源码(源码已更新 欢迎star⭐️)

往期设计模式相关文章

设计模式项目源码(源码已更新 欢迎star⭐️)

Kafka 专题学习

项目源码(源码已更新 欢迎star⭐️)

ElasticSearch 专题学习

项目源码(源码已更新 欢迎star⭐️)

往期并发编程内容推荐

推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)

博客(阅读体验较佳)

相关推荐
程序员清风4 分钟前
快手二面:乐观锁是怎么用它来处理多线程问题的?
java·后端·面试
IT_陈寒18 分钟前
《Redis性能翻倍的7个冷门技巧,90%开发者都不知道!》
前端·人工智能·后端
一线大码19 分钟前
SpringBoot 优雅实现接口的多实现类方式
java·spring boot·后端
Q_Q196328847537 分钟前
python+uniapp基于微信小程序的助眠小程序
spring boot·python·小程序·django·flask·uni-app·node.js
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 属性优先级 行内写法 变量选择 笔记42
java·spring boot·笔记
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 总结 热部署 常用配置 笔记44
java·spring boot·笔记
十年小站1 小时前
一、新建一个SpringBoot3项目
java·spring boot
PFinal社区_南丞1 小时前
构建可维护的正则表达式系统-pfinal-regex-center设计与实现
后端·php
Imnobody1 小时前
吴恩达 Prompt 工程课精讲②:写出高可靠 Prompt 的2大黄金法则
后端
yuuki2332331 小时前
【C语言】程序的编译和链接(基础向)
c语言·后端