MyBatis-Plus常用增删改查方法

MP常用方法
方法 作用 对应 SQL
insert(user) 插入数据 INSERT INTO ...
selectById(id) 根据 ID 查询 SELECT * FROM ... WHERE id = ?
selectBatchIds(ids) 批量查询 SELECT * FROM ... WHERE id IN (?, ?, ?)
selectList(wrapper) 条件查询 SELECT * FROM ... WHERE ...
updateById(user) 根据 ID 更新 UPDATE ... SET ... WHERE id = ?
update(null, wrapper) 条件更新 UPDATE ... SET ... WHERE ...
deleteById(id) 根据 ID 删除 DELETE FROM ... WHERE id = ?
delete(wrapper) 条件删除 DELETE FROM ... WHERE ...
selectCount(wrapper) 统计查询 SELECT COUNT(*) FROM ... WHERE ...
selectPage(page, wrapper) 分页查询 SELECT * FROM ... LIMIT ?, ?
selectOne(wrapper) 查询单条记录 SELECT * FROM ... WHERE ... LIMIT 1
selectMaps(wrapper) 查询结果返回 Map SELECT * FROM ... WHERE ...
selectObjs(wrapper) 查询单列数据列表 SELECT column FROM ... WHERE ...
exists(wrapper) 判断是否存在记录 SELECT 1 FROM ... WHERE ... LIMIT 1
insertBatchSomeColumn(list) 批量插入(优化) INSERT INTO ... VALUES (...), (...), (...)
updateBatchById(list) 批量更新 UPDATE ... SET ... WHERE id = ?
deleteBatchIds(ids) 批量删除 DELETE FROM ... WHERE id IN (?, ?, ?)
LambdaQueryWrapper(Lambda 方式构造查询)

示例:

LambdaQueryWrapper<User> lambdaQuery = new LambdaQueryWrapper<>();
lambdaQuery.eq(User::getName, "张三")
           .ge(User::getAge, 18)
           .like(User::getEmail, "gmail")
           .orderByDesc(User::getCreateTime);

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

对应SQL:

SELECT * FROM user 
WHERE name = '张三' 
AND age >= 18 
AND email LIKE '%gmail%' 
ORDER BY create_time DESC;

常见方法:

方法 作用 对应 SQL 示例
eq("column", value) 等于 WHERE column = value
ne("column", value) 不等于 WHERE column <> value
gt("column", value) 大于 WHERE column > value
ge("column", value) 大于等于 WHERE column >= value
lt("column", value) 小于 WHERE column < value
le("column", value) 小于等于 WHERE column <= value
between("column", val1, val2) 区间查询 WHERE column BETWEEN val1 AND val2
like("column", value) 模糊查询(%value%) WHERE column LIKE '%value%'
likeLeft("column", value) 左匹配(%value) WHERE column LIKE '%value'
likeRight("column", value) 右匹配(value%) WHERE column LIKE 'value%'
in("column", collection) IN 查询 WHERE column IN (val1, val2, val3)
notIn("column", collection) NOT IN 查询 WHERE column NOT IN (val1, val2, val3)
isNull("column") 为空 WHERE column IS NULL
isNotNull("column") 不为空 WHERE column IS NOT NULL
orderByAsc("column") 升序排序 ORDER BY column ASC
orderByDesc("column") 降序排序 ORDER BY column DESC
groupBy("column") 分组 GROUP BY column
having("column condition") 过滤分组数据 HAVING COUNT(*) > 1
last("SQL 语句") 追加 SQL 语句(慎用) LIMIT 1
apply("SQL 片段") 拼接 SQL 语句 WHERE column = NOW()
删除:
物理删除:
  • 直接从数据库中删除数据,不可恢复。
  • 执行方法: remove()deleteById()

示例:

// 根据ID删除
userMapper.deleteById(1);

// 根据条件删除
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三");
userMapper.delete(wrapper);

执行的 SQL:

DELETE FROM user WHERE id = 1;
逻辑删除
  • 不会真正删除数据,而是修改数据的状态,通常是修改 deleted 字段(1 表示已删除,0 表示未删除)。

使用:

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("user")
public class User {
    private Long id;
    private String name;
    
    @TableLogic // 加上 @TableLogic 标注逻辑删除字段:
    private Integer deleted;
}
// 逻辑删除,SQL: UPDATE user SET deleted = 1 WHERE id = 1;
userMapper.deleteById(1);

使用逻辑删除后,MP会自动在where语句中加上deleted = 0,过滤"已删除"的数据

查询已删除的数据

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("deleted", 1); // 查询已删除数据
List<User> deletedUsers = userMapper.selectList(wrapper);

你可能感兴趣的:(Java,mybatis,tomcat,spring,boot,笔记,mysql)