手记

MyBatisPlus入门教程:快速掌握数据库操作

概述

MyBatisPlus是一个基于MyBatis的增强工具,旨在简化数据库操作并提升开发效率。它提供了多种便捷功能,如CRUD操作、条件构造器、分页插件和代码生成器等。MyBatisPlus不仅保留了MyBatis的所有特性,还增加了许多实用的新功能,使得数据库操作更加简单和高效。

MyBatisPlus简介
什么是MyBatisPlus

MyBatisPlus是基于MyBatis的一个增强工具,旨在简化并提升MyBatis的使用体验。它通过提供一系列简洁的API接口,使得数据库操作更为便捷,同时也支持Lambda表达式,极大地方便了操作。MyBatisPlus保留了MyBatis的所有特性,并新增了更多功能。

MyBatisPlus的优势
  1. 无侵入性:MyBatisPlus不改变MyBatis原有的开源协议,不修改MyBatis的源代码,以插件形式进行扩展。
  2. 简单:提供的CRUD操作更加简单,提供了一系列简洁的API接口,可以大幅度地减少开发人员的工作量。
  3. 增强支持:提供了包括分页插件、性能分析插件等在内的多种插件,使得开发人员可以根据需要选择合适的插件来增强功能。
  4. 支持Lambda表达式:支持Lambda表达式进行数据库操作,使得开发人员可以使用Lambda表达式来操作数据库,提高了开发效率。
  5. 代码生成器:提供了代码生成的功能,可以生成Mapper接口、实体类、Service接口以及Service实现类,使得开发人员可以更加方便地使用MyBatisPlus进行数据库操作。
  6. 性能优化:提供了一系列的性能优化功能,包括缓存、连接池等,使得开发人员可以更加方便地使用MyBatisPlus进行数据库操作。
MyBatisPlus与MyBatis的关系

MyBatisPlus基于MyBatis,提供了大量的扩展功能,如分页插件、性能分析插件等,同时也提供了代码生成器等便捷工具。MyBatisPlus是MyBatis的一个扩展,而不是替代品,它扩展了MyBatis的功能,使得开发人员可以更加方便地使用MyBatis进行数据库操作。

MyBatisPlus环境搭建
引入MyBatisPlus依赖

在使用MyBatisPlus前,需要在项目的pom.xml文件中添加MyBatisPlus的依赖。以下是添加MyBatisPlus依赖的示例代码:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
配置MyBatisPlus相关配置文件

MyBatisPlus支持多种配置方式,包括XML配置文件和Java配置方式。在Spring Boot项目中,我们通常使用Java配置方式来配置MyBatisPlus。以下是一个简单的配置示例:

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
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.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.IdType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.Properties;

public class MyBatisPlusGenerator {
    public static void main(String[] args) {
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL)
            .setDriverName("com.mysql.cj.jdbc.Driver")
            .setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8")
            .setUsername("root")
            .setPassword("password");

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java")
            .setAuthor("yourname")
            .setOpen(false)
            .setFileOverride(true)
            .setIdType(IdType.AUTO)
            .setBaseResultMap(true);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example")
            .setEntity("entity")
            .setMapper("mapper")
            .setXml("mapper/xml")
            .setService("service")
            .setServiceImpl("service/impl")
            .setController("controller");

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setEntityLombokModel(true)
            .setRestControllerStyle(true)
            .setInclude("user")
            .setNaming(NamingStrategy.underline_to_camel)
            .setTablePrefix("t_")
            .setDbColumnUnderline(true);

        // 生成器配置
        AutoGenerator mpg = new AutoGenerator();
        mpg.setDataSource(dsc)
            .setGlobalConfig(gc)
            .setPackageInfo(pc)
            .setStrategy(strategy)
            .setCfg(new CfgConfig().setFileOverride(true));

        mpg.execute();
    }
}
创建数据库连接

在Spring Boot项目中,可以通过配置application.yml文件来创建数据库连接。以下是一个简单的数据库连接配置示例:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
    mapper-locations: classpath*:mapper/*Mapper.xml
    type-aliases-package: com.example.entity
    global-config:
        db-config:
            id-type: AUTO
            table-underline: true
基本CRUD操作

MyBatisPlus简化了CRUD操作,使得开发人员可以更加方便地进行数据库操作。接下来,我们将详细介绍插入数据、查询数据、更新数据以及删除数据的操作。

插入数据

插入数据是数据库操作中最基本的操作之一。MyBatisPlus提供了简洁的API接口来插入数据。以下是一个插入数据的示例:

  1. 定义实体类:
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;

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

    // Getters and Setters
}
  1. 定义Mapper接口:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
}
  1. 插入数据:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public void insertUser() {
        User user = new User();
        user.setName("John");
        user.setAge(25);
        userMapper.insert(user);
        System.out.println("插入数据成功");
    }
}
查询数据

查询数据是数据库操作中最常见的操作之一。MyBatisPlus提供了多种查询方法,例如根据主键查询、条件查询等。以下是一个查询数据的示例:

  1. 根据主键查询:
public User getUserById(Long id) {
    return userMapper.selectById(id);
}
  1. 条件查询:
public List<User> getUsersByAge(Integer age) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", age);
    return userMapper.selectList(queryWrapper);
}
更新数据

更新数据是数据库操作中常见的操作之一。MyBatisPlus提供了多种更新方法,例如根据主键更新、条件更新等。以下是一个更新数据的示例:

  1. 根据主键更新:
public void updateUserById(Long id, Integer age) {
    User user = new User();
    user.setId(id);
    user.setAge(age);
    userMapper.updateById(user);
}
  1. 条件更新:
public void updateUserByAge(Integer oldAge, Integer newAge) {
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.eq("age", oldAge).set("age", newAge);
    userMapper.update(null, updateWrapper);
}
删除数据

删除数据是数据库操作中常见的操作之一。MyBatisPlus提供了多种删除方法,例如根据主键删除、条件删除等。以下是一个删除数据的示例:

  1. 根据主键删除:
public void deleteUserById(Long id) {
    userMapper.deleteById(id);
}
  1. 条件删除:
public void deleteUserByAge(Integer age) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", age);
    userMapper.delete(queryWrapper);
}
MyBatisPlus条件构造器

MyBatisPlus提供了条件构造器来构建复杂的查询条件。通过条件构造器,可以方便地构建各种复杂的查询条件,从而提高开发效率。

使用条件构造器构建复杂查询

条件构造器提供了多种方法来构建复杂的查询条件。以下是一个使用条件构造器构建复杂查询的示例:

  1. 构建基本查询条件:
public List<User> getUsersByCondition(Integer age, String name) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", age).like("name", name);
    return userMapper.selectList(queryWrapper);
}
  1. 构建更复杂的查询条件:
public List<User> getUsersByComplexCondition(Integer age, String name, Boolean isActive) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", age)
               .like("name", name)
               .eq("is_active", isActive);
    return userMapper.selectList(queryWrapper);
}
动态SQL的应用

MyBatisPlus支持动态SQL的应用,可以根据条件动态地构建SQL语句。以下是一个使用动态SQL的应用示例:

  1. 定义Mapper接口:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    List<User> selectList(@Param("age") Integer age, @Param("name") String name);
}
  1. 构建动态SQL:
public List<User> getUsersByDynamicCondition(Integer age, String name) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    if (age != null) {
        queryWrapper.eq("age", age);
    }
    if (name != null) {
        queryWrapper.like("name", name);
    }
    return userMapper.selectList(queryWrapper);
}
MyBatisPlus分页插件

MyBatisPlus提供了分页插件,使得开发人员可以更加方便地实现分页查询。通过分页插件,可以简化分页查询的实现过程,提高开发效率。

集成分页插件

在Spring Boot项目中,可以通过配置来集成MyBatisPlus的分页插件。以下是一个简单的配置示例:

  1. 在Spring Boot配置文件中启用分页插件:
mybatis-plus:
  pagination:
    enabled: true
  1. 在Spring Boot启动类中添加分页插件:
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
使用分页插件实现分页查询

MyBatisPlus的分页插件提供了简洁的API接口来实现分页查询。以下是一个使用分页插件实现分页查询的示例:

  1. 定义Mapper接口:
public interface UserMapper extends BaseMapper<User> {
    List<User> selectPage(Page<User> page, QueryWrapper<User> queryWrapper);
}
  1. 实现分页查询:
public List<User> getUsersByPage(Integer currentPage, Integer pageSize) {
    Page<User> page = new Page<>(currentPage, pageSize);
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    List<User> users = userMapper.selectPage(page, queryWrapper);
    return users;
}
MyBatisPlus常用注解

MyBatisPlus提供了一系列的注解来简化数据库操作。以下是一些常用的注解及其使用场景和示例。

常用注解介绍
  1. @TableField:用于定义实体类中的字段与数据库字段的映射关系。
  2. @TableName:用于定义实体类对应的数据库表名。
  3. @TableId:用于定义实体类中的主键字段。
  4. @TableLogic:用于定义逻辑删除字段。
  5. @TableField(exist = false):表示该字段不在数据库中存在,主要用于动态插入字段。
  6. @TableField(fill = FieldFill.INSERT):表示该字段在插入时自动填充,例如插入时自动填充当前时间。
  7. @TableField(fill = FieldFill.INSERT_UPDATE):表示该字段在插入和更新时自动填充。
注解的使用场景与示例
  1. @TableField
import com.baomidou.mybatisplus.annotation.TableField;

public class User {
    private Long id;
    @TableField("user_name")
    private String name;
    private Integer age;

    // Getters and Setters
}
  1. @TableName
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user_info")
public class UserInfo {
    private Long id;
    private String name;
    private Integer age;

    // Getters and Setters
}
  1. @TableId
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

@TableId(value = "user_id", type = IdType.AUTO)
private Long id;
  1. @TableLogic
import com.baomidou.mybatisplus.annotation.TableLogic;

@TableLogic
private Boolean deleted;
  1. @TableField(exist = false)
import com.baomidou.mybatisplus.annotation.TableField;

@TableField(exist = false)
private String token;
  1. @TableField(fill = FieldFill.INSERT)
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;

@TableField(fill = FieldFill.INSERT)
private Date createTime;
  1. @TableField(fill = FieldFill.INSERT_UPDATE)
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;

@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

以上就是关于MyBatisPlus的入门教程,通过本教程,你可以快速掌握MyBatisPlus的基本使用方法,包括环境搭建、CRUD操作、条件构造器、分页插件以及常用注解的使用。希望本教程能够帮助你更好地理解和使用MyBatisPlus。

0人推荐
随时随地看视频
慕课网APP