MyBatis-Plus简介和快速入门教程

MyBatis-Plus简介和快速入门教程

简介

MyBatis-Plus是基于MyBatis的增强工具,提供了常用的增删改查、分页、乐观锁、逻辑删除等功能,简化了开发人员的工作,提高了开发效率。同时 MyBatis-Plus 也支持 Lambda 表达式查询、自动代码生成等高级功能。

MyBatis-Plus 的主要特点如下:

  • 支持自动生成代码;
  • 内置通用的增删改查功能;
  • 自带分页插件;
  • 支持 Lambda 表达式查询;
  • 自带性能分析插件,可输出 SQL 语句以及所需时间。

快速入门教程

1. 引入依赖

在 pom.xml 中加入以下依赖:

<!-- MyBatis-Plus 依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.x.x</version>
</dependency>

<!-- MySQL 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

<!-- MyBatis-Plus 分页插件依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.x.x</version>
</dependency>

其中,版本号请自行替换为最新版本。

2. 配置数据源

application.yml 中配置数据源:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

3. 创建实体类

创建一个实体类,例如 User

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("t_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    private String email;
}

@TableName 表示 MySQL 中的表名,@TableId 表示主键自增。

4. 创建 Mapper 接口

创建 UserMapper 接口:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

BaseMapper 是 MyBatis-Plus 内置的通用 Mapper,无需编写 XML。

5. 使用 MyBatis-Plus 进行 CRUD

创建测试类 TestMyBatisPlus

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
public class TestMyBatisPlus {
    @Autowired
    private UserMapper userMapper;

    @org.junit.jupiter.api.Test
    public void testInsert() {
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        user.setEmail("zhangsan@example.com");
        userMapper.insert(user);
    }

    @org.junit.jupiter.api.Test
    public void testSelect() {
        User user = userMapper.selectById(1);
        log.info("user: {}", user);
    }

    @org.junit.jupiter.api.Test
    public void testUpdate() {
        User user = new User();
        user.setId(1);
        user.setName("李四");
        user.setAge(20);
        user.setEmail("lisi@example.com");
        userMapper.updateById(user);
    }

    @org.junit.jupiter.api.Test
    public void testDelete() {
        userMapper.deleteById(1);
    }

    @org.junit.jupiter.api.Test
    public void testSelectPage() {
        Page<User> page = new Page<>(1, 10);
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.lambda().gt(User::getAge, 18);
        page = userMapper.selectPage(page, wrapper);
        page.getRecords().forEach(user -> log.info("user: {}", user));
    }
}

上述代码的作用是:插入一条记录,根据 ID 查询一条记录,更新一条记录,删除一条记录,分页查询记录。

6. 运行测试

运行 TestMyBatisPlus 即可进行测试。

示例

示例1:使用 Lambda 表达式查询

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lambda().gt(User::getAge, 18);
List<User> userList = userMapper.selectList(wrapper);

该示例的作用是:查询年龄大于 18 岁的所有用户。

示例2:自动生成代码

在 pom.xml 中添加以下依赖:

<!-- MyBatis-Plus 自动生成代码依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.x.x</version>
</dependency>

application.yml 中添加以下配置:

mybatis-plus:
  generator:
    # 代码生成器的配置
    global-config:
      output-dir: src/main/java
      file-override: true
      author: MyBatis-Plus
    # 数据源的配置
    datasource:
      url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
    # 策略配置
    strategy:
      naming: underline_to_camel
      column-naming: underline_to_camel
      entity-lombok-model: true
      controller-restful: true
      super-entity-class: com.example.demo.entity.BaseEntity
      # 公共父类
      super-controller-class: com.example.demo.controller.BaseController
      # 公共父类
      include: t_user
      # 要生成的表
    # 包名配置
    package-info:
      parent: com.example.demo
      moduleName: module
    # 模板配置
    template:
      entity: templates/entity.java
      controller: templates/controller.java
      service: templates/service.java
      serviceImpl: templates/serviceImpl.java
      mapper: templates/mapper.java
      xml: templates/xml.java.vm

然后在 src/main/resources 下创建目录 templates,并添加以下模板文件:

  • templates/entity.java
  • templates/controller.java
  • templates/service.java
  • templates/serviceImpl.java
  • templates/mapper.java
  • templates/xml.java.vm

最后,使用以下代码生成器类生成代码:

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class CodeGenerator {
    public static void main(String[] args){

        AutoGenerator autoGenerator = new AutoGenerator();

        autoGenerator.setGlobalConfig(new GlobalConfig()
                .setAuthor("MyBatis-Plus")
                .setOutputDir("src/main/java")
                .setFileOverride(true));

        autoGenerator.setPackageInfo(new PackageConfig()
                .setModuleName("module")
                .setParent("com.example.demo"));

        autoGenerator.setStrategy(new StrategyConfig()
                .setCapitalMode(true)
                .setNaming(NamingStrategy.underline_to_camel)
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setEntityLombokModel(true)
                .setRestControllerStyle(true)
                .setSuperEntityClass("com.example.demo.entity.BaseEntity")
                .setSuperControllerClass("com.example.demo.controller.BaseController")
                .setInclude("t_user")
                .setTablePrefix("t_"));

        autoGenerator.setTemplate(new TemplateConfig()
                .setEntity("templates/entity.java")
                .setController("templates/controller.java")
                .setService("templates/service.java")
                .setServiceImpl("templates/serviceImpl.java")
                .setMapper("templates/mapper.java")
                .setXml(null));

        autoGenerator.execute();
    }
}

该示例的作用是:自动生成实体类、Mapper 接口、业务接口、业务实现类和控制器类,无需手动编写。

以上就是 MyBatis-Plus 的简介和快速入门教程,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis-Plus简介和快速入门教程 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring零基础到进阶之使用方法详解

    Spring零基础到进阶之使用方法详解 什么是Spring Spring 是一个开放源代码的设计层面框架,它解决的是业务层和其他各层的耦合问题,使得整个系统架构清晰、易于维护、扩展性强。 Spring框架的模块 Spring框架分为20多个模块,其中最常用的是Core Container、Data Access/Integration、Web、AOP,下面分…

    Java 2023年5月19日
    00
  • Spring Boot中的SpringSecurity基础教程

    下面是“Spring Boot中的SpringSecurity基础教程”的完整攻略,包含两个示例。 1. Spring Security简介 Spring Security是一个基于Spring框架的安全框架,用于处理身份验证和授权问题。Spring Security的功能包括: 身份验证 授权 WEB安全 记住我 CSRF防范 Session管理 安全Ht…

    Java 2023年5月15日
    00
  • Spring Boot web项目的TDD流程

    SpringBoot Web项目的TDD流程 TDD(Test-Driven Development)是一种软件开发方法,它强调在编写代码之前先编写测试用例,并通过测试用例来驱动代码的开发。在SpringBoot Web项目中,TDD可以帮助我们提高代码质量和可维护性,减少代码缺陷和重构成本。以下是一个完整的SpringBoot Web项目的TDD流程: 1…

    Java 2023年5月15日
    00
  • Java基于JDBC连接数据库及显示数据操作示例

    Java基于JDBC连接数据库及显示数据操作示例 简介 JDBC(Java Database Connectivity)是一组用于操作数据库的接口。它允许Java应用程序与各种类型的关系型数据库进行通信并执行与数据库相关的操作(如查询、更新和删除数据等)。 在Java中,可以通过JDBC API建立Java应用程序与数据库之间的连接。本文将介绍如何使用JDB…

    Java 2023年5月19日
    00
  • JavaScript实现留言板添加删除留言

    下面是“JavaScript实现留言板添加删除留言”的完整攻略: 1. 创建HTML页面结构 首先创建一个HTML文件,结构如下: <!DOCTYPE html> <html> <head> <title>留言板</title> </head> <body> <h1&g…

    Java 2023年6月15日
    00
  • 如何解决java压缩文件乱码问题

    针对Java压缩文件乱码问题,这里提供一份解决方案。 第一步:查找乱码原因 首先我们需要确定压缩文件存在乱码的原因。一般情况下,乱码的原因可能是: 压缩文件编码格式不正确(例如使用GBK编码打包的文件在使用UTF-8进行解压时会出现乱码) 解压程序的编码格式不正确 压缩文件本身存在编码问题 第二步:使用正确的编码格式 针对第一种情况,我们可以在压缩文件时指定…

    Java 2023年5月20日
    00
  • Jaspersoft Studio添加mysql数据库配置步骤

    下面我来详细讲解“Jaspersoft Studio添加mysql数据库配置步骤”的完整攻略,过程中我将会包含两条示例说明。 1. 下载MySQL JDBC驱动程序 Jaspersoft Studio需要通过JDBC连接到MySQL数据库,因此需要下载MySQL JDBC驱动程序。在MySQL官网下载页面(https://dev.mysql.com/down…

    Java 2023年6月16日
    00
  • skywalking自定义插件开发

    skywalking是使用字节码操作技术和AOP概念拦截Java类方法的方式来追踪链路的,由于skywalking已经打包了字节码操作技术和链路追踪的上下文传播,因此只需定义拦截点即可。 这里以skywalking-8.7.0版本为例。关于插件拦截的原理,可以看我的另一篇文章:skywalking插件工作原理剖析 1. 创建插件模块 在 apm-sniffe…

    Java 2023年4月25日
    00
合作推广
合作推广
分享本页
返回顶部