mybatis-plus超详细使用说明,从0到1实战

MyBatis-Plus 超详细使用指南:从 0 到 1 实战

1. MyBatis-Plus 简介

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

1.1 核心特性

  • 无侵入:只做增强不做改变,引入它不会对现有项目产生影响
  • CRUD 操作:内置通用 Mapper、通用 Service,仅需少量配置即可实现单表 CRUD 操作
  • 条件构造器:强大的 Wrapper 条件构造器,使查询条件更加灵活
  • 代码生成器:可快速生成实体类、Mapper、Mapper XML、Service、Controller 等各类代码
  • 分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作
  • 性能分析:可输出 SQL 语句及其执行时间,便于开发者进行分析和优化

2. 环境搭建

2.1 创建 Spring Boot 项目

首先,我们使用 Spring Initializr 创建一个 Spring Boot 项目,选择以下依赖:

  • Spring Web
  • MySQL Driver
  • Spring Data JPA (可选)

2.2 添加 MyBatis-Plus 依赖

pom.xml 中添加 MyBatis-Plus 依赖:

<!-- MyBatis Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3</version>
</dependency>

<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- Lombok 简化代码 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2.3 配置数据库连接

application.yml 中配置数据库连接:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp_demo?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志
  global-config:
    db-config:
      id-type: auto # 全局默认主键类型设置为自增
      table-prefix: tbl_ # 表名前缀

2.4 创建数据库和表

CREATE DATABASE mp_demo;
USE mp_demo;

CREATE TABLE tbl_user (
    id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    create_time DATETIME NULL DEFAULT NULL COMMENT '创建时间',
    update_time DATETIME NULL DEFAULT NULL COMMENT '更新时间',
    deleted INT(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(0-未删除,1-已删除)',
    version INT(11) NULL DEFAULT 1 COMMENT '乐观锁版本号',
    PRIMARY KEY (id)
);

-- 插入测试数据
INSERT INTO tbl_user (name, age, email, create_time) VALUES 
('张三', 18, 'zhangsan@example.com', NOW()),
('李四', 20, 'lisi@example.com', NOW()),
('王五', 28, 'wangwu@example.com', NOW()),
('赵六', 21, 'zhaoliu@example.com', NOW()),
('田七', 24, 'tianqi@example.com', NOW());

2.5 配置 Spring Boot 启动类

@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 扫描 Mapper 接口
public class MpDemoApplication {
   
   
    public static void main(String[] args) {
   
   
        SpringApplication.run(MpDemoApplication.class, args);
    }
}

3. 基本使用

3.1 创建实体类

@Data
@TableName("tbl_user") // 对应数据库表名
public class User {
   
   
    
    @TableId(type = IdType.AUTO) // 指定主键策略
    private Long id;
    
    private String name;
    
    private Integer age;
    
    private String email;
    
    @TableField(fill = FieldFill.INSERT) // 插入时自动填充
    private LocalDateTime createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新时自动填充
    private LocalDateTime updateTime;
    
    @TableLogic // 逻辑删除
    private Integer deleted;
    
    @Version // 乐观锁
    private Integer version;
}

3.2 创建 Mapper 接口

public interface UserMapper extends BaseMapper<User> {
   
   
    // 继承 BaseMapper 后即可获得各种 CRUD 方法
    // 无需编写任何 SQL,即可实现基本的增删改查操作
}

3.3 创建 Service 接口和实现类

// Service 接口
public interface UserService extends IService<User> {
   
   
    // 继承 IService 获得更多批量操作方法
}

// Service 实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
   
   
    // 继承 ServiceImpl 提供的方法,无需编写基础实现代码
}

3.4 创建自动填充处理器

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

    @Override
    public void updateFill(MetaObject metaObject) {
   
   
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}

3.5 创建 Controller

@RestController
@RequestMapping("/users")
public class UserController {
   
   
    
    @Autowired
    private UserService userService;
    
    @GetMapping
    public List<User> list() {
   
   
        return userService.list();
    }
    
    @GetMapping("/{id}")
    public User getById(@PathVariable Long id) {
   
   
        return userService.getById(id);
    }
    
    @PostMapping
    public boolean save(@RequestBody User user) {
   
   
        return userService.save(user);
    }
    
    @PutMapping
    public boolean update(@RequestBody User user) {
   
   
        return userService.updateById(user);
    }
    
    @DeleteMapping("/{id}")
    public boolean delete(@PathVariable Long id) {
   
   
        return userService.removeById(id);
    }
}

4. CRUD 操作详解

4.1 插入操作

// 单条插入
User user = new User();
user.setName("小明");
user.setAge(22);
user.setEmail("xiaoming@example.com");
userMapper.insert(user);
// 插入后会自动回填主键 ID
System.out.println("插入后的ID: " + user.getId());

// 批量插入
List<User> users = Arrays.asList(
    new 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qzw1210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值