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 的简介和快速入门教程,希望对你有所帮助!

阅读剩余 83%

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

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

相关文章

  • Java基础之Bean的创建、定位和使用

    Java基础之Bean的创建、定位和使用 在Java开发中,Bean是非常常用的一种Java类。Bean是一种被特殊编写的Java类,通常用于封装和传输数据,它拥有以下几个特点: 具有无参构造器 具有getter/setter方法 实现序列化接口 下面我们将对Bean的创建、定位和使用进行详细讲解。 Bean的创建 JavaBean的创建需要满足上述特点,以…

    Java 2023年5月26日
    00
  • C#中Request.Cookies 和 Response.Cookies 的区别分析

    下面是详细的攻略: Request.Cookies 和 Response.Cookies 的区别分析 在C#中,Request.Cookies和Response.Cookies都是用来操作HttpCookie的。但它们分别代表了不同的Http上下文,有着不同的作用。下面我们详细分析一下它们的区别。 Request.Cookies Request.Cookie…

    Java 2023年6月15日
    00
  • java中Socket设置超时时间的两种方式

    下面我将为您讲解Java中Socket设置超时时间的两种方式。 方式一:使用setSoTimeout()方法设置超时时间 在Java中,Socket提供了一个setSoTimeout()方法,该方法可用于设置Socket的超时时间。具体步骤如下: 建立Socket连接 获取Socket的输入流和输出流 使用setSoTimeout()方法设置超时时间,单位为…

    Java 2023年5月20日
    00
  • 面试官问如何启动Java 线程

    启动Java线程有两种方式:继承Thread类和实现Runnable接口。下面分别讲解这两种方式的启动步骤。 继承Thread类启动线程 步骤 继承Thread类并重写其run()方法 创建Thread类的实例对象 调用start()方法启动线程 示例 下面是一个继承Thread类的简单示例: public class MyThread extends Th…

    Java 2023年5月27日
    00
  • 关于SpringMVC在Controller层方法的参数解析详解

    关于SpringMVC在Controller层方法的参数解析详解 在SpringMVC中,Controller层是处理请求的核心部分。在Controller层的方法中,我们需要对请求参数进行解析,以便正确地处理请求。本文将详细介绍SpringMVC在Controller层方法中的参数解析方法,并提供两个示例来说明这些方法的使用。 方法一:使用@Request…

    Java 2023年5月17日
    00
  • java多线程实现同步锁卖票实战项目

    当多个线程同时对共享资源进行访问时,可能会引发数据竞争和错误的结果。Java 提供了多种同步机制来避免这种情况,其中最常用的是互斥锁。在这个实战项目中,我们将实现一个卖票系统,并使用 Java 多线程和同步锁来确保多个线程同时访问同一资源的正确性。 需求描述 我们要实现一种买票系统,共有三个窗口,每个窗口可以同时售卖 100 张票。当所有的票都售出后,系统应…

    Java 2023年5月18日
    00
  • Java的Struts框架报错“ChainProcessorException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NoSuchModuleException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 模块错误:如果模块不正确,则可能会出现此错误。在这种情况下,需要检查模块以解决此问题。 以下是两个实例: 例 1 如果配置文件中没…

    Java 2023年5月5日
    00
  • java的Builder原理和实现详解

    Java的Builder模式原理和实现详解 什么是Builder模式? Builder模式是Java中的一种设计模式,它允许您创建复杂对象而无需了解其内部细节。此模式外部提供一种访问内部对象的流畅界面。 为什么需要Builder模式? 在Java中,创建具有多个属性的对象是一项常见的任务。然而,当您的对象有大量的属性时,创建对象的代码变得非常冗长和难以维护。…

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