手记

MybatisPlus资料详解:初学者入门指南

概述

MybatisPlus是一款强大的Mybatis增强工具,提供了丰富的数据库操作功能和便捷的API,简化了开发人员的工作。本文将详细介绍MybatisPlus的各项特性和使用方法,帮助读者快速上手。文章涵盖了从依赖配置、实体类创建到基本CRUD操作、动态SQL使用及自定义扩展等内容,提供了详尽的示例代码和说明。

MybatisPlus简介

1.1 MybatisPlus是什么

MybatisPlus是一个Mybatis的增强工具,它在Mybatis的基础上提供了大量的便捷功能,简化了开发人员的编码工作。MybatisPlus追求简单、快速、优雅的开发体验,旨在快速、更优雅地完成CRUD操作。它内置了常用的数据库操作方法,支持Lambda语法,支持分页、动态SQL等特性。

1.2 MybatisPlus的优点

  • 简单易用:MybatisPlus提供了大量的便捷方法,使得数据库操作变得简单且优雅。
  • 高扩展性:MybatisPlus支持自定义逻辑删除、自定义填充策略等扩展功能,可以根据项目需求进行定制。
  • 高性能:MybatisPlus使用了缓存、分页等特性,能够提高数据库操作的性能。
  • 丰富的功能:支持多表联查、动态SQL、自定义SQL等高级功能。
  • 强大的插件生态:MybatisPlus拥有丰富的插件和扩展,可以方便地集成第三方工具和服务。

1.3 MybatisPlus与Mybatis的区别

MybatisPlus是基于Mybatis的一套增强工具,而Mybatis是一个持久层框架,它支持自定义SQL、存储过程等数据库操作,提供了强大的灵活性和可配置性。MybatisPlus在Mybatis的基础上,提供了更加便捷的操作方式,例如:

  • 内置的CRUD操作:MybatisPlus提供了大量的内置方法,如save()updateById()deleteById()等,使得数据库操作变得更加方便。
  • 动态SQL:MybatisPlus支持动态SQL的构造,可以通过条件构造器轻松生成复杂的SQL语句。
  • 分页插件:MybatisPlus内置了分页插件,可以方便地实现分页查询,而Mybatis则需要手动实现分页逻辑。
  • 自定义扩展:MybatisPlus支持自定义逻辑删除、自定义填充策略等功能,而Mybatis则需要自行实现这些功能。
  • 缓存:MybatisPlus提供了缓存功能,可以提高查询效率,而Mybatis则需要自行配置和管理缓存。

MybatisPlus快速入门

2.1 添加依赖

要使用MybatisPlus,首先需要在项目中添加相应的依赖。以下是Maven项目中的依赖配置:

<dependencies>
    <!-- MybatisPlus依赖 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>
    <!-- MySQL驱动依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
    <!-- Spring Boot依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2.2 配置MybatisPlus

接下来需要在Spring Boot的配置文件application.yml中配置数据库连接信息和MybatisPlus相关配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
    mapper-locations: classpath*:mapper/*.xml
    type-aliases-package: com.example.demo.entity  # 实体类所在的包名

2.3 创建实体类

实体类是MybatisPlus进行数据库操作的基础。以下是一个简单的实体类示例:

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

@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;

    // 省略getters和setters方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

基本CRUD操作

3.1 新增数据

MybatisPlus提供了save()方法用于新增数据。以下是一个示例代码:

@Autowired
private UserMapper userMapper;

public void insertUser() {
    User user = new User();
    user.setName("张三");
    user.setAge(25);
    userMapper.insert(user);
}

3.2 查询数据

MybatisPlus提供了selectById()方法用于查询单条数据。以下是一个示例代码:

@Autowired
private UserMapper userMapper;

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

3.3 更新数据

MybatisPlus提供了updateById()方法用于更新数据。以下是一个示例代码:

@Autowired
private UserMapper userMapper;

public void updateUser() {
    User user = userMapper.selectById(1L);
    user.setName("李四");
    user.setAge(30);
    userMapper.updateById(user);
}

3.4 删除数据

MybatisPlus提供了deleteById()方法用于删除数据。以下是一个示例代码:

@Autowired
private UserMapper userMapper;

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

动态SQL使用

4.1 条件构造器

条件构造器允许你通过代码动态构建SQL语句。以下是一个使用条件构造器的示例:

@Autowired
private UserMapper userMapper;

public List<User> getUsersByCondition(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);
}

4.2 多表查询

MybatisPlus支持多表查询,可以使用select()方法实现。以下是一个多表联查的示例:

@Autowired
private UserMapper userMapper;

public List<User> getUsersWithRoles() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.select("user.id", "user.name", "user.age", "role.name as roleName")
                .leftJoin("role", "role")
                .on("user.id = role.user_id");
    return userMapper.selectList(queryWrapper);
}

4.3 分页查询

MybatisPlus内置了分页插件,可以方便地实现分页查询。以下是一个分页查询的示例:

@Autowired
private UserMapper userMapper;

public Page<User> getUsersPage(Integer currentPage, Integer pageSize) {
    Page<User> page = new Page<>(currentPage, pageSize);
    return userMapper.selectPage(page, new QueryWrapper<User>());
}

MybatisPlus自定义扩展

5.1 自定义逻辑删除

MybatisPlus支持自定义逻辑删除字段,可以通过@TableField注解来指定逻辑删除的字段。以下是一个示例:

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

@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    @TableField(fill = FieldFill.INSERT)
    @TableLogic
    private Boolean deleted;

    // 省略getters和setters方法
}

5.2 自定义填充策略

MybatisPlus提供了MetaObjectHandler接口,可以通过实现该接口来自定义填充策略。以下是一个示例:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        metaObject.setValue("createUser", "admin");
        metaObject.setValue("createTime", new Date());
        metaObject.setValue("updateUser", "admin");
        metaObject.setValue("updateTime", new Date());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        metaObject.setValue("updateUser", "admin");
        metaObject.setValue("updateTime", new Date());
    }
}

5.3 自定义SQL注解

MybatisPlus支持自定义SQL注解,可以通过@Select@Update等注解来自定义SQL语句。以下是一个示例:


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT * FROM user WHERE name LIKE %${name}%")
    List<User> selectByName(String name);
}
``

通过上述示例,你可以看到MybatisPlus提供了丰富的功能和便捷的API,大大简化了数据库操作的开发工作。希望这些内容能够帮助你快速入门并掌握MybatisPlus的使用方法。如有进一步需求,可以参考官方文档或查看相关课程进行更深入的学习。
0人推荐
随时随地看视频
慕课网APP