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

MybatisPlus入门教程:轻松掌握基础操作

标签:
杂七杂八
概述

MybatisPlus是一款基于Mybatis的增强工具,旨在简化Mybatis的使用并提高开发效率。文章详细讲解了MybatisPlus的CRUD操作、分页查询、条件构造器等基础功能,并展示了其在实际项目中的应用。

MybatisPlus简介

MybatisPlus 是一款基于 Mybatis 的增强工具,旨在简化 Mybatis 的使用并提高开发效率。它通过提供一些预定义的方法和注解,使得 CRUD 操作更加简单,并且增加了许多便捷的功能,如分页、动态数据源等。此外,MybatisPlus 还支持自定义 SQL 语句和 Mapper XML,使得开发人员在需要复杂查询的情况下也能轻松应对。

MybatisPlus是什么

MybatisPlus 是一个 Mybatis 的增强工具,它提供了一系列的封装方法和注解,使得开发人员可以更方便地进行数据库操作。具体来说,MybatisPlus 在 Mybatis 的基础上进行了以下增强:

  • 简化 CRUD 操作:通过提供一系列预定义的方法,MybatisPlus 帮助开发人员处理常见的 CRUD 操作,如插入、更新、删除等。
  • 动态 SQL 生成:提供了条件构造器(Wrapper)等工具,能够动态生成 SQL 语句。
  • 分页功能:内置了分页插件,可以方便地实现分页功能。
  • 逻辑删除:支持逻辑删除而非物理删除,通过提供类似于软删除的功能,提高了数据的可恢复性。
  • 自定义 SQL 支持:可以通过 Mapper XML 文件或者注解来自定义 SQL 语句。
  • 自动填充:支持自动填充某些字段(如创建时间、更新时间等)。
  • 字段填充:自定义字段填充逻辑,如填充默认值等。
MybatisPlus的优势

使用 MybatisPlus 可以带来多个方面的优势:

  • 开发效率:通过使用 MybatisPlus 提供的预定义方法和注解,可以大幅提升开发效率,减少重复代码的编写。
  • 代码简洁:MybatisPlus 的设计使得代码更加简洁易读,降低了维护成本。
  • 功能完善:除了基础的 CRUD 操作外,MybatisPlus 还提供了诸如分页插件、逻辑删除、自动填充等实用的功能,大大方便了开发人员的使用。
  • 兼容性:MybatisPlus 兼容 Mybatis 的所有特性,可以无缝地集成到现有的 Mybatis 项目中。
  • 性能优化:内置了一些性能优化的插件,如分页插件、逻辑删除等,能够提高应用的性能。
MybatisPlus的适用场景

MybatisPlus 适用于任何需要使用 Mybatis 进行数据库操作的场景。它特别适合以下几种场景:

  • 新项目开发:在新的项目中使用 MybatisPlus,可以大幅提升开发效率。特别适合快速开发原型或者中小型项目。
  • 现有 Mybatis 项目迁移:对于已有的 Mybatis 项目,通过引入 MybatisPlus,可以轻松地增强项目的功能,同时不会影响现有的代码结构。
  • 需要复杂查询的项目:对于需要执行较为复杂查询的项目,MybatisPlus 提供的条件构造器和自定义 SQL 功能,可以使得复杂的查询操作更加方便。
  • 对性能有较高要求的项目:MybatisPlus 内置了一些性能优化的插件,如分页插件、逻辑删除等,可以提高应用的性能。
  • 团队协作开发:在团队协作开发的场景下,MybatisPlus 的代码结构清晰,易于理解和维护,可以提高团队开发效率。
MybatisPlus环境搭建

在使用 MybatisPlus 之前,需要先进行环境搭建。以下是具体的步骤:

项目环境准备
  1. 创建一个 Spring Boot 项目:使用 Spring Initializr 创建一个新的 Spring Boot 项目。选择合适的依赖(如 Spring Web、Spring Data JPA、Mybatis)。
  2. 添加 MybatisPlus 依赖:在项目的 pom.xml 文件中添加 MybatisPlus 的依赖。具体代码如下:

    <dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter</artifactId>
       <version>3.4.3</version>
    </dependency>
  3. 配置数据源:在 src/main/resources 目录下的 application.yml 文件中,配置数据源信息。这里假设使用的是 MySQL 数据库。示例代码如下:

    spring:
     datasource:
       url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
       username: root
       password: password
       driver-class-name: com.mysql.cj.jdbc.Driver
配置MybatisPlus

配置 MybatisPlus 包括设置 MybatisPlus 的配置文件和数据源等。

  1. 配置 MybatisPlus:在 application.yml 文件中增加 MybatisPlus 的相关配置。示例代码如下:

    mybatis-plus:
     configuration:
       log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     mapper-locations: classpath*:mapper/*.xml
  2. 设置数据源:在 application.yml 文件中配置数据源信息,如下所示:

    spring:
     datasource:
       url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
       username: root
       password: password
       driver-class-name: com.mysql.cj.jdbc.Driver
  3. 验证配置:运行项目,确保数据库连接正常并能正确读取配置信息。
MybatisPlus基本使用

MybatisPlus 提供了一系列的基本操作,包括 CRUD 操作、分页查询、条件构造器等。本节主要介绍这些基础功能的使用方法。

CRUD操作

MybatisPlus 提供了一系列方法来简化 CRUD 操作。

插入数据

插入数据可以使用 insertinsertOrUpdate 方法。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mybatisplus.model.User;
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) {
        userMapper.insert(user);
    }
}

更新数据

更新数据可以使用 updateupdateById 方法。

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

查询数据

查询数据可以使用 selectselectById 方法。

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

删除数据

删除数据可以使用 deleteByIddelete 方法。

public void deleteUser(Long id) {
    userMapper.deleteById(id);
}
分页查询

MybatisPlus 提供了内置的分页插件,可以方便地实现分页功能。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public Page<User> getUserPage(int currentPage, int pageSize) {
    Page<User> page = new Page<>(currentPage, pageSize);
    return userMapper.selectPage(page, new QueryWrapper<User>());
}
条件构造器的使用

MybatisPlus 提供了条件构造器 QueryWrapperUpdateWrapper,可以方便地构造复杂的查询条件。

查询示例

public List<User> getUsersByAge(int age) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", age);
    return userMapper.selectList(queryWrapper);
}

更新示例

public void updateUsersByAge(int age, String newName) {
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.eq("age", age).set("name", newName);
    userMapper.update(null, updateWrapper);
}
MybatisPlus自定义SQL

MybatisPlus 支持自定义 SQL 语句,可以使用 Mapper XML 文件或注解来实现。

自定义SQL语句

自定义 SQL 语句可以通过 Mapper XML 文件实现。

创建 Mapper XML 文件

resources 目录下创建一个 mapper 文件夹,然后在其中创建一个 UserMapper.xml 文件。示例代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisplus.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.mybatisplus.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

在 Mapper 接口中声明方法

UserMapper 接口中声明相应的方法。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
    User selectUserById(Long id);
}

调用自定义 SQL

public User getUserByIdUsingCustomSql(Long id) {
    return userMapper.selectUserById(id);
}
Mapper XML的使用

Mapper XML 文件的使用包括定义 SQL 语句和在 Mapper 接口中声明相应的方法。

定义 SQL 语句

UserMapper.xml 文件中定义 SQL 语句。示例代码如下:

<update id="updateUser" parameterType="com.example.mybatisplus.model.User">
    UPDATE user
    SET name = #{name}, age = #{age}
    WHERE id = #{id}
</update>

声明方法

UserMapper 接口中声明相应的方法。

public interface UserMapper extends BaseMapper<User> {
    int updateUser(User user);
}

调用自定义 SQL

public void updateUserUsingCustomSql(User user) {
    userMapper.updateUser(user);
}
批量操作

MybatisPlus 支持批量插入、更新和删除操作。

批量插入

public void batchInsert(List<User> users) {
    userMapper.insertBatchSomeColumn(users);
}

批量更新

public void batchUpdate(List<User> users) {
    userMapper.updateBatchById(users);
}

批量删除

public void batchDelete(List<Long> ids) {
    userMapper.deleteBatchIds(ids);
}
MybatisPlus插件介绍

MybatisPlus 提供了一些内置插件,可以方便地实现一些常用的功能,如分页、逻辑删除等。

插件简介

MybatisPlus 的插件主要包括以下几种:

  • 分页插件:内置的分页插件,可以方便地实现分页功能。
  • 逻辑删除插件:提供逻辑删除功能,支持软删除。
  • 自定义 SQL 插件:提供自定义 SQL 的功能,可以使用 Mapper XML 文件或注解进行自定义。
插件安装与使用

安装和使用这些插件通常只需要引入相应的配置即可。

分页插件

分页插件默认已集成,在 application.yml 中配置即可使用。

逻辑删除插件

逻辑删除插件可以通过在实体类中使用 @TableField 注解来启用逻辑删除功能。

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

public class User {
    @TableField(fill = FieldFill.INSERT)
    @TableLogic
    private boolean deleted;
}

自定义 SQL 插件

自定义 SQL 插件可以通过 Mapper XML 文件或注解来实现,具体操作参见前面章节。

常用插件示例

分页插件示例

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

逻辑删除插件示例

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

自定义 SQL 插件示例

public void batchInsert(List<User> users) {
    userMapper.insertBatchSomeColumn(users);
}
MybatisPlus进阶技巧

除了基本的 CRUD 操作和自定义 SQL 之外,MybatisPlus 还提供了其他一些进阶技巧,如动态数据源配置、逻辑删除、自动填充等。

动态数据源配置

MybatisPlus 支持动态数据源配置,可以方便地实现多数据源切换。

配置动态数据源

import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesBuilder;
import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBean;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanWrapper;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisPlusConfig {

    @Bean
    public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(MybatisPlusProperties properties) throws Exception {
        MybatisSqlSessionFactoryBeanWrapper wrapper = new MybatisSqlSessionFactoryBeanWrapper();
        wrapper.setDataSource(dataSource());
        wrapper.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
        wrapper.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        wrapper.setPlugins(MybatisPlusPropertiesBuilder.getPlugins(properties));
        return wrapper.getObject();
    }

    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    // 配置数据源
    @Bean
.“master”, masterDataSource());
        dataSource.setTargetDataSources(targetDataSources);
        dataSource.setDefaultTargetDataSource(masterDataSource());
        return dataSource;
    }

    @Bean
    public DataSource masterDataSource() {
        // 配置主数据源
        return DataSourceBuilder.create().build();
    }

    @Bean
    public DataSource slaveDataSource() {
        // 配置从数据源
        return DataSourceBuilder.create().build();
    }
}

使用动态数据源

public void switchDataSource(String dataSource) {
    DynamicDataSourceContextHolder.setDataSource(dataSource);
    // 执行数据库操作
}
逻辑删除

逻辑删除允许通过一个状态字段来标记记录为已删除,而不是物理删除记录。这样可以方便地恢复数据。

开启逻辑删除

在实体类中使用 @TableLogic 注解来启用逻辑删除功能。

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

public class User {
    @TableField(fill = FieldFill.INSERT)
    @TableLogic
    private boolean deleted;
}

示例代码

public void deleteUserById(Long id) {
    User user = new User();
    user.setId(id);
    user.setDeleted(true);
    userMapper.updateById(user);
}
自动填充与更新时间处理

MybatisPlus 支持自动填充某些字段的功能,如创建时间、更新时间等。

自动填充配置

配置自动填充的规则,如下所示:

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

public class User {
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

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

    @TableField(fill = FieldFill.INSERT_UPDATE)
    @TableLogic
    private boolean deleted;
}

示例代码

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

public void updateUser(User user) {
    userMapper.updateById(user);
}
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消