文档
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))