Mybatisplus教学

Mybatisplus官网:简介 | MyBatis-Plus (baomidou.com)

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

使用步骤

1. 导入依赖

XML 复制代码
 <!--  mybatisplus依赖    -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!--     数据库驱动   -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

2. 必备配置

2.1 扫描Mapper包

java 复制代码
// 替换为您的 Mapper 接口包路径
// 通常加在启动类
@MapperScan("com.itheima.mp.mapper")  

2.2 配置数据源

XML 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root

2.3 常见配置

java 复制代码
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 打印 SQL 日志
  global-config:
    db-config:
      id-type: auto  # 主键类型

2.4 分页拦截器

java 复制代码
package com.itheima.mp.config;

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;

/**
 * MyBatis Plus 配置类
 * 
 * 该配置类用于配置 MyBatis Plus 的各种插件,包括分页拦截器。
 */
@Configuration
public class MyBatisPlusConfig {

    /**
     * 创建 MyBatis Plus 拦截器 Bean
     * 
     * @return MybatisPlusInterceptor 实例
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        // 创建 MyBatis Plus 拦截器实例
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 添加分页拦截器
        // 分页拦截器用于处理 MyBatis Plus 的分页查询逻辑
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());

        // 返回配置好的拦截器实例
        return interceptor;
    }
}

3. 自定义Mapper接口需要继承BaseMapper

java 复制代码
public interface UserMapper extends BaseMapper<User> 

BaseMapper提供的方法:

  • 新增
    1. int insert(T entity):插入一条记录。
  • 删除
    1. int deleteById(Serializable id) :根据 ID 删除记录。
    2. int deleteByMap(@Param("cm") Map<String, Object> columnMap) :根据列名和值进行删除。
    3. int delete(@Param("ew") Wrapper<T> wrapper):根据条件构造器进行删除。
    4. int deleteByIds(@Param("coll") Collection<? extends Serializable> idList):根据 ID 列表批量删除。
  • 更新
    1.int updateById(@Param("et") T entity):根据 ID 更新记录。
    2. int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper):根据条件构造器进行更新。
  • 查找
    1. T selectById(Serializable id):根据 ID 查询单条记录。
    2. List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList) :根据 ID 列表批量查询。
    3. List<T> selectByMap(@Param("cm") Map<String, Object> columnMap):根据列名和值进行查询。
    4. T selectOne(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询单条记录。
    5. Integer selectCount(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询记录数。
    6. List<T> selectList(@Param("ew") Wrapper<T> queryWrapper) :根据条件构造器查询列表。
    7. List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询列表,返回 Map 集合。
    8. List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询列表,返回单列数据集合。
  • 分页查询
    1. IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper):分页查询。
    2. IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper):分页查询,返回 Map 集合。

4. 定义Service接口和实现类

java 复制代码
public interface UserService extends IService<User> 

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService
  • ServiceImpl 是 MyBatis-Plus 提供的一个基础服务实现类,它继承了 IService 接口并实现了其中的大部分方法。
  • ServiceImpl 提供了许多常用的 CRUD 操作方法,这些方法可以直接在你的服务实现类中使用。

ServiceImpl提供的方法:

  • 新增
    1. boolean save(T entity):保存一个实体,自动填充创建时间和更新时间。
    2. boolean saveOrUpdate(T entity):保存或更新一个实体,自动填充创建时间和更新时间。
    3. boolean saveBatch(Collection<T> entityList):批量保存实体。
    4. boolean saveOrUpdateBatch(Collection<T> entityList):批量保存或更新实体
  • 删除
    1. boolean removeById(Serializable id):根据 ID 删除记录。
    2. boolean removeByMap(Map<String, Object> columnMap) :根据列名和值进行删除。
    3. boolean remove(Wrapper<T> queryWrapper):根据条件构造器进行删除。
    4. boolean removeByIds(Collection<? extends Serializable> idList):根据 ID 列表批量删除。
  • 修改
    1. boolean updateById(T entity) :根据 ID 更新记录。
    2. boolean update(T entity, Wrapper<T> updateWrapper):根据条件构造器进行更新。
    3. boolean updateBatchById(Collection<T> entityList) :批量更新记录。
    4. boolean updateBatchById(Collection<T> entityList, int batchSize):批量更新记录,指定每次更新的记录数。
  • 查找
    1. T getById(Serializable id) :根据 ID 查询实体对象。
    2. List<T> listByIds(Collection<? extends Serializable> idList):根据多个 ID 查询实体对象。
    3. List<T> listByMap(Map<String, Object> columnMap):根据 Map 条件查询实体对象。
    4. T getOne(Wrapper<T> queryWrapper, boolean throwEx) :根据条件查询单个实体对象。
    5. List<T> list(Wrapper<T> queryWrapper):根据条件查询实体对象列表。
    6. long count(Wrapper<T> queryWrapper):根据条件查询记录总数。
  • 分页
    1. IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper) :分页查询实体对象列表。

5. 常用注解

  • Mapper接口
    @Mapper: 标识这是一个 MyBatis 的 Mapper 接口。
    extends BaseMapper<User>: 继承 BaseMapper,提供了基本的 CRUD 操作方法。
    @Select: 定义查询方法。
    @Insert : 定义插入方法。
    @Update : 定义更新方法。
    @Delete : 定义删除方法。
    @Options: 指定插入操作的选项,如主键生成策略
  • 实体类
    @TableName("user"): 指定实体类对应的数据库表名为 user。
    @TableId(type = IdType.AUTO) : 指定 id 字段为主键,并且使用自增策略。
    @TableField("user_name") : 指定 name 字段对应数据库中的 user_name 列。
    @TableField("user_email"): 指定 email 字段对应数据库中的 user_email 列。

6. 总结

相关推荐
Bunny021226 分钟前
SpringMVC笔记
java·redis·笔记
BinaryBardC1 小时前
Swift语言的网络编程
开发语言·后端·golang
feng_blog66881 小时前
【docker-1】快速入门docker
java·docker·eureka
code_shenbing1 小时前
基于 WPF 平台使用纯 C# 制作流体动画
开发语言·c#·wpf
邓熙榆1 小时前
Haskell语言的正则表达式
开发语言·后端·golang
ac-er88882 小时前
Yii框架中的队列:如何实现异步操作
android·开发语言·php
马船长2 小时前
青少年CTF练习平台 PHP的后门
开发语言·php
枫叶落雨2222 小时前
04JavaWeb——Maven-SpringBootWeb入门
java·maven
m0_748232393 小时前
SpringMVC新版本踩坑[已解决]
java
码农小灰3 小时前
Spring MVC中HandlerInterceptor和Filter的区别
java·spring·mvc