用户 CRUD——BaseMapper 与条件构造器

知识库
知识库文档
/tech-stacks/mybatis-plus/examples/用户 CRUD——BaseMapper 与条件构造器.md

文档

MyBatis-Plus 例程:用户增删改查

目标

展示 MyBatis-Plus 核心:Entity 定义、BaseMapper CRUD、LambdaQueryWrapper 条件查询、分页、逻辑删除。

完整代码

// ── User.java (Entity) ──
package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import lombok.Data;

@Data
@TableName("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;
}
// ── UserMapper.java ──
package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper,自动拥有 CRUD 方法!
    // 自定义 SQL 可在这里声明,XML 实现
}
// ── UserService.java ──
package com.example.demo.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

@Service
public class UserService {

    @Resource
    private UserMapper userMapper;

    // 插入
    public User create(String name, Integer age, String email) {
        User user = new User();
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        userMapper.insert(user);
        return user;
    }

    // 条件查询:Lambda 链式写法(类型安全,防字段拼写错误)
    public List<User> findByAgeRange(Integer minAge, Integer maxAge) {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.between(User::getAge, minAge, maxAge)
               .orderByDesc(User::getId);
        return userMapper.selectList(wrapper);
    }

    // 分页查询
    public Page<User> page(int pageNum, int pageSize) {
        Page<User> page = new Page<>(pageNum, pageSize);
        return userMapper.selectPage(page, null);
    }

    // 更新
    public boolean updateEmail(Long id, String email) {
        User user = new User();
        user.setId(id);
        user.setEmail(email);
        return userMapper.updateById(user) > 0;
    }

    // 逻辑删除(自动转为 UPDATE SET deleted=1)
    public boolean delete(Long id) {
        return userMapper.deleteById(id) > 0;
    }
}
// ── 控制器 ──
package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Resource
    private UserService userService;

    @PostMapping
    public User create(@RequestParam String name,
                       @RequestParam Integer age,
                       @RequestParam String email) {
        return userService.create(name, age, email);
    }

    @GetMapping
    public List<User> list(@RequestParam(defaultValue = "0") Integer minAge,
                           @RequestParam(defaultValue = "100") Integer maxAge) {
        return userService.findByAgeRange(minAge, maxAge);
    }

    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id) {
        return userService.delete(id) ? "删除成功" : "删除失败";
    }
}

运行步骤

# 1. 数据库建表
CREATE TABLE user (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    email VARCHAR(100),
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    deleted INT DEFAULT 0
);

# 2. 启动 Spring Boot
mvn spring-boot:run

# 3. 测试
curl -X POST "http://localhost:8080/users?name=张三&age=25&email=zhangsan@example.com"
curl "http://localhost:8080/users"

常用条件构造器速查

// 等值
wrapper.eq(User::getName, "张三")
// 模糊
wrapper.like(User::getEmail, "@gmail.com")
// 范围
wrapper.between(User::getAge, 20, 30)
// IN
wrapper.in(User::getId, 1L, 2L, 3L)
// 分组
wrapper.groupBy(User::getAge)
// 复杂 AND/OR
wrapper.and(w -> w.eq(User::getAge, 18).or().eq(User::getAge, 20))

信息

路径
/tech-stacks/mybatis-plus/examples/用户 CRUD——BaseMapper 与条件构造器.md
更新时间
2026/5/31