当前位置: 首页 > news >正文

MybatisPlus从入门到精通

一、MyBatis-Plus核心特性

  1. 无侵入性
    在MyBatis基础上增强,无需修改原有代码即可使用。
  2. 自动化CRUD
    内置通用Mapper和Service,减少80%单表操作代码。
  3. Lambda表达式
    支持Lambda形式的条件构造,避免字段名硬编码错误。
  4. 主键策略
    支持雪花算法(ASSIGN_ID)、UUID(ASSIGN_UUID)、自增(AUTO)等主键生成方式。

二、快速入门案例

1. 数据库准备

DROP TABLE IF EXISTS sys_user;

CREATE TABLE sys_user
(
	id BIGINT NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);
DELETE FROM sys_user;

INSERT INTO sys_user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

2. Spring Boot配置

pom.xml依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-annotation</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.3</version>
        </dependency>

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
    username: root
    password: root

3. 实体类与Mapper

package com.awei.mybatismodel.entity;

import lombok.Data;

@Data
public class SysUser {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

package com.awei.mybatismodel.mapper;


import com.awei.mybatismodel.entity.SysUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface SysUserMapper extends BaseMapper<SysUser> {

}

4.启动类

package com.awei.mybatismodel;

import org.springframework.boot.SpringApplication;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.awei.mybatismodel.mapper")
public class MybatisModelApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisModelApplication.class, args);
    }

}

5.测试

package com.awei.mybatismodel;

import com.awei.mybatismodel.entity.SysUser;
import com.awei.mybatismodel.mapper.SysUserMapper;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class QuickStartTest {

    @Autowired
    private SysUserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        List<SysUser> userList = userMapper.selectList(null);
        Assertions.assertEquals(5, userList.size());
        userList.forEach(System.out::println);
    }
}

在这里插入图片描述

三、核心注解详解

注解作用示例
@TableName指定实体类对应的表名@TableName("sys_user")
@TableId标识主键字段@TableId(type = IdType.AUTO)
@TableField字段与列映射/自动填充策略@TableField(value = "email", fill = FieldFill.INSERT_UPDATE)

主键策略示例

public enum IdType {
    AUTO,        // 数据库自增
    ASSIGN_ID,   // 雪花算法(默认)
    ASSIGN_UUID  // UUID生成
}

四、CRUD操作

1. 基础操作

// 插入
User user = new User();
user.setName("Tom");
userMapper.insert(user);

// 查询
User user = userMapper.selectById(1L);

// 更新
user.setAge(30);
userMapper.updateById(user);

// 删除
userMapper.deleteById(2L);

2. 条件构造器(Wrapper)

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, "J")      // 模糊查询
       .ge(User::getAge, 18)          // 年龄>=18
       .orderByDesc(User::getCreateTime);

List<User> users = userMapper.selectList(wrapper);

生成SQL:

SELECT * FROM user WHERE name LIKE '%J%' AND age >= 18 ORDER BY create_time DESC

五、分页查询

1. 配置分页插件

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

2. 分页查询代码

Page<User> page = new Page<>(1, 10);  // 第1页,每页10条
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 20);

IPage<User> userPage = userMapper.selectPage(page, wrapper);
System.out.println("总记录数:" + userPage.getTotal());

六、高级功能

1. 逻辑删除

表字段

ALTER TABLE user ADD is_deleted TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标记';

配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDeleted  # 逻辑删除字段名
      logic-delete-value: 1          # 删除标记值
      logic-not-delete-value: 0      # 未删除标记值

2. 自动填充

public class MetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
    }
}

更新中----

相关文章:

  • 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
  • Linux--基础命令3
  • 解决docker认证问题 failed to authorize: failed to fetch oauth token
  • 【Office-Word】如何自动生成中英文目录
  • 决策树(Decision Tree):机器学习中的经典算法
  • 用vscode开发微信云函数一键打包cloudfunctions(vite创建)
  • for循环相关(循环的过程中对数据进行删除会踩坑)
  • wxWidgets长图浏览控件实现,不区分图片类型加载
  • 低空监视-无人机专用ADS-B应答机
  • CSS设置文字渐变色样式(附带动画效果)
  • Vue.js事件处理
  • 利用python开发自己的小工具
  • c++线程池的实现
  • 计算机毕业设计SpringBoot+Vue.js客户关系管理系统CRM(源码+文档+PPT+讲解)
  • 【区块链 + 绿色低碳】郑州数据交易中心双碳数据服务专区 | FISCO BCOS 应用案例
  • HashMap 的底层结构详解:原理、put和get示例
  • PMP项目管理—资源管理篇—3.获取资源
  • 文本处理Bert面试内容整理-BERT的基本原理是什么?
  • 03.购物单
  • IO进程思维导图和练习题
  • 温州网站优化定制/百度一下的网址
  • 网校系统搭建/seo详细教程
  • appcms程序怎么做网站/网络推广的基本方法有哪些
  • 电商网站建设规划/百度竞价软件哪个好
  • 邯郸市人力资源和社会保障局/宁波seo推广优化公司
  • dede医院网站模板下载/seo黑帽技术有哪些