MyBatis-Plus 例程:用户增删改查
目标
展示 MyBatis-Plus 核心:Entity 定义、BaseMapper CRUD、LambdaQueryWrapper 条件查询、分页、逻辑删除。
完整代码
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;
}
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> {
}
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;
}
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;
}
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) ? "删除成功" : "删除失败";
}
}
运行步骤
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
)
mvn spring-boot:run
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)
wrapper.in(User::getId, 1L, 2L, 3L)
wrapper.groupBy(User::getAge)
wrapper.and(w -> w.eq(User::getAge, 18).or().eq(User::getAge, 20))