为了账号安全,请及时绑定邮箱和手机立即绑定

MyBatis Plus资料详解与入门教程

概述

本文详细介绍了MyBatis Plus资料,包括其功能、优势、安装与环境搭建、基本使用教程以及常用功能介绍。MyBatis Plus是一个强大的MyBatis增强工具,简化了开发过程并提高了效率。文章还提供了实战案例和进阶资源推荐,帮助读者深入了解和应用MyBatis Plus。

MyBatis Plus简介

MyBatis Plus 是一个 MyBatis 的增强工具,旨在简化 MyBatis 的使用,提高开发效率。它提供了大量的开箱即用的功能,包括CRUD操作、分页插件、逻辑删除、自动填充等功能。MyBatis Plus 在 MyBatis 的基础上加入了诸多便捷的功能,使得开发者可以更快速地开发出高质量的代码。

MyBatis Plus是什么

MyBatis Plus 是一个 MyBatis 的增强工具,旨在简化 MyBatis 的使用,提高开发效率。它提供了包括 CRUD、表字段填充、条件构造器、分页插件等功能。它可以大幅度减少代码的编写,提高开发效率,同时保持了 MyBatis 的灵活性和强大的扩展性。

MyBatis Plus相比MyBatis的优势

  1. 简化了CRUD操作:MyBatis Plus 为基本的 CRUD 操作提供了快捷的方法,如 save, updateById, deleteById 等,简化了代码编写。
  2. 条件构造器:提供了一个强大的条件构造器 QueryWrapper,可以方便地构建复杂的查询条件。
  3. 分页插件:内置了分页插件,简化了分页操作。
  4. 逻辑删除:支持逻辑删除,使得删除操作更加灵活。
  5. 自动填充:支持字段自动填充,如自动填充创建时间和更新时间。
安装与环境搭建

项目环境要求

MyBatis Plus 可以运行在任意支持Java的环境中,常见的环境包括 Java SE, Java EE, Spring Boot 等。为了使用 MyBatis Plus,你需要确保项目中已经安装了Java开发环境,并且项目中已经引入了Spring Boot框架。此外,还需确保数据库服务已启动并配置好。

添加依赖

在 Spring Boot 项目中,添加 MyBatis Plus 的依赖非常简单。你需要在项目的 pom.xml 文件中加入 MyBatis Plus 的依赖。

<dependencies>
    <!-- Spring Boot Starter MyBatis Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>

    <!-- MySQL Driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

初始化配置

在 Spring Boot 项目中,你需要在 application.ymlapplication.properties 文件中配置数据库连接信息。

spring:
  datasource:
  url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  username: root
  password: root
  driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
基本使用教程

实体类和数据库表的映射

在 MyBatis Plus 中,实体类需要与数据库表进行映射。实体类通常需要继承 BaseEntity 类,并使用注解 @TableName 来指定表名,使用 @TableId 来指定主键字段,使用 @TableField 来指定其他字段。

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;

@TableName("user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField("name")
    private String name;

    @TableField("age")
    private Integer age;

    @TableField("create_time")
    private Date createTime;
}

CRUD操作详解

MyBatis Plus 提供了丰富的 CRUD 方法,可以直接调用 BaseMapper 接口中的方法进行操作。

增加操作

User user = new User();
user.setName("Zhang San");
user.setAge(20);

userMapper.insert(user);

查询操作

User user = userMapper.selectById(1L);
List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("age", 20));

更新操作

User user = new User();
user.setId(1L);
user.setAge(21);

userMapper.updateById(user);

删除操作

userMapper.deleteById(1L);

条件构造器的使用

MyBatis Plus 提供了一个强大的条件构造器 QueryWrapper,可以方便地构建复杂的查询条件。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 20);
queryWrapper.ge("age", 18);
List<User> users = userMapper.selectList(queryWrapper);
常用功能介绍

分页插件

MyBatis Plus 内置了分页插件,可以通过 Page 类来实现分页查询。

Page<User> page = new Page<>(1, 10);
IPage<User> result = userMapper.selectPage(page, new QueryWrapper<User>());

自动填充

MyBatis Plus 支持字段自动填充,可以在实体类中使用注解 @TableField(fill = FieldFill.INSERT)@TableField(fill = FieldFill.INSERT_UPDATE) 来指定字段是否在插入或更新时自动填充。

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.FieldFill;

@TableField(fill = FieldFill.INSERT)
private Date createTime;

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

同时,还需要在配置类中注册自动填充的 Bean。

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

逻辑删除

MyBatis Plus 支持逻辑删除,可以在实体类中使用注解 @TableLogic 来指定逻辑删除字段。

import com.baomidou.mybatisplus.annotation.TableLogic;

@TableLogic
private Integer deleted;

同时需要配置逻辑删除的规则。

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantInnerInterceptor;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        interceptor.addInnerInterceptor(new TenantInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
实战案例

实战项目搭建

以一个简单的用户管理系统为例,实现用户信息的增删改查功能。

实体类定义

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;

@TableName("user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField("name")
    private String name;

    @TableField("age")
    private Integer age;

    @TableField("create_time")
    private Date createTime;

    @TableField("update_time")
    private Date updateTime;

    @TableField("deleted")
    @TableLogic
    private Integer deleted;
}

Mapper接口定义

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

Service接口定义

public interface UserService {
    void insertUser(User user);
    User getUserById(Long id);
    void updateUser(User user);
    void deleteUser(Long id);
}

Service实现

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

    @Override
    public void insertUser(User user) {
        userMapper.insert(user);
    }

    @Override
    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void deleteUser(Long id) {
        userMapper.deleteById(id);
    }
}

Controller定义

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/insert")
    public void insertUser(@RequestBody User user) {
        userService.insertUser(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PutMapping("/update")
    public void updateUser(@RequestBody User user) {
        userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

功能实现步骤

  1. 定义实体类:定义用户实体类 User,并使用注解映射数据库表。
  2. 定义Mapper接口:继承 BaseMapper 接口,定义 UserMapper 接口。
  3. 定义Service接口:定义 UserService 接口,包含增删改查方法。
  4. 实现Service接口:实现 UserService 接口,调用 UserMapper 进行数据库操作。
  5. 定义Controller:定义 UserController,提供 RESTful 接口,调用 UserService 进行业务操作。

常见问题解决

问题:查询结果为空

  • 原因:查询条件错误或查询的表结构与实体类不一致。
  • 解决方法:检查查询的条件是否正确,确保实体类中的字段与数据库表的字段一致。

问题:插入数据时主键冲突

  • 原因:在插入数据时,自增主键已经存在。
  • 解决方法:检查插入的数据,确保主键没有重复,或者使用非自增的主键。
小结与进阶资源推荐

MyBatis Plus使用心得

MyBatis Plus 在 MyBatis 的基础上提供了大量的便捷功能,简化了开发过程中的很多操作。特别是在 CRUD 操作方面,MyBatis Plus 通过简单的代码调用即可完成复杂的数据库操作,大大提高了开发效率。同时,MyBatis Plus 的扩展性也非常强,可以根据项目的需求灵活地扩展功能。

进阶资源推荐

  • 官方文档:MyBatis Plus 的官方文档详细介绍了其各个功能的使用方法,是学习和使用 MyBatis Plus 的重要参考。
  • 慕课网课程:慕课网(https://www.imooc.com/)提供了多门关于 MyBatis Plus 和 Spring Boot 的课程,适合不同水平的开发者进行学习。
  • 开源中国论坛:开源中国论坛(https://www.oschina.net/)上有很多关于 MyBatis Plus 的讨论和实践经验分享,是获取更多信息的好地方。
  • GitHub仓库:MyBatis Plus 的 GitHub 仓库提供了最新的代码和示例,可以参考仓库中的示例代码进行实际开发。

通过以上内容的学习,相信你已经掌握了 MyBatis Plus 的基本使用方法和一些高级功能。希望这些内容能够帮助你在实际开发中更加高效地使用 MyBatis Plus。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消