当前位置: 首页 > news >正文

MyBatis-Plus 常用用法总结

本文以实体类 ChatgptSetting为例子

public class ChatgptSetting {private String setting;// 配置项名称private String value;
}

一、基本 CRUD 操作

1. 插入数据

chatgptSettingMapper.insert(chatgptSetting);

  • 自动将非 null 字段插入到对应的数据库字段中

  • 主键自增会自动回填(需实体类加 @TableId(type = IdType.AUTO)


2. 根据主键查询

chatgptSettingMapper.selectById(1);

3. 查询所有数据

List<ChatgptSetting> list = chatgptSettingMapper.selectList(null);


4. 条件查询

List<ChatgptSetting> list = chatgptSettingMapper.selectList( new QueryWrapper<ChatgptSetting>().eq("type", "api") );

  • QueryWrapper 用于构造 WHERE 条件

  • 你也可以链式调用:.like(), .between(), .orderByDesc(), .isNotNull()


5. 更新数据(按主键)

chatgptSettingMapper.updateById(chatgptSetting);

  • 前提是 chatgptSetting.getId() 不为 null

  • 自动更新非 null 字段


6. 条件更新

chatgptSettingMapper.update( chatgptSetting, new UpdateWrapper<ChatgptSetting>().eq("setting", chatgptSetting.getSetting()) );

  • 常用于“非主键”条件更新

  • 如果你还用 .set("value", xxx),优先以 set() 为准


7. 批量删除

chatgptSettingMapper.deleteBatchIds(Arrays.asList(1, 2, 3));

二、Wrapper 用法:QueryWrapper / UpdateWrapper

方法含义示例
.eq("字段", 值)等于eq("type", "api")
.like("字段", 值)模糊匹配like("name", "key")
.in("字段", List)在范围内in("id", ids)
.orderByDesc("字段")倒序排序orderByDesc("create_time")
.set("字段", 值)更新字段set("status", "已更新")

三、常见注解说明

注解说明
@TableName("表名")映射数据库表
@TableId(type = IdType.AUTO)主键自增策略
@TableField("字段名")映射字段名(如果数据库列和实体字段名不一致)
@TableField(exist = false)该字段不参与数据库操作,常用于分页、展示字段等

四、分页查询

需要配置分页插件:

// Spring Boot 配置分页插件(一次配置即可)
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;
}

使用

Page<ChatgptSetting> page = new Page<>(1, 10);
Page<ChatgptSetting> result = chatgptSettingMapper.selectPage(page, queryWrapper);

五、结合使用示例:分页+条件查询

QueryWrapper<ChatgptSetting> wrapper = new QueryWrapper<>();
wrapper.like("type", "api").orderByDesc("create_time");Page<ChatgptSetting> page = new Page<>(1, 10);
Page<ChatgptSetting> result = chatgptSettingMapper.selectPage(page, wrapper);

六、其它实用技巧

✅ 实体类中加分页参数,但不影响数据库操作:

@TableField(exist = false)
private Integer page;@TableField(exist = false)
private Integer size;

七、构造器的使用 

  通常在刚开始使用mybatis-plus时会出现的问题有:什么时候直接用mybatis-plus封装的方法、什么使用在方法中添加构造器**Warpaper<T>。

BaseMapper<T> 封装的方法有:
public interface BaseMapper<T> extends Mapper<T> {int insert(T entity);int deleteById(Serializable id);int deleteByMap(@Param("cm") Map<String, Object> columnMap);int delete(@Param("ew") Wrapper<T> queryWrapper);int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);int updateById(@Param("et") T entity);int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);T selectById(Serializable id);List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);T selectOne(@Param("ew") Wrapper<T> queryWrapper);Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}

根据方法中的参数类型来调用对于的方法。

小编在学习过程中总结出一个小点:

在开发过程中 我们一旦用到关于主键id有关的crud操作 我们可以直接调用方法 不需要使用构造器构造具体sql条件。一但执行的sql操作不是根据主键id执行 那么参数里面就会包含构造器(但不绝对 还是以方法中的参数类型为准)

例如:

chatgptSettingMapper.update(chatgptSetting,new UpdateWrapper<ChatgptSetting>().set("value", chatgptSetting.getValue()).eq("setting", chatgptSetting.getSetting())
);

而不能直接写成:

chatgptSettingMapper.update(chatgptSetting);

✅ 总结一句话:

MyBatis-Plus = 自动化 + 高效 + 函数式链式调用 + 兼容原生 MyBatis,适合中小型项目快速开发。

相关文章:

  • 电脑自带画图工具,提取颜色
  • 软考软件评测师——计算机组成与体系结构(CPU指令系统)
  • 脚本语言Lua
  • std::deque 底层实现结构
  • 组合问题(去重)
  • 【Java】Spring的声明事务在多线程场景中失效问题。
  • 欧拉计划 Project Euler 73(分数有范围计数)题解
  • 第七节第三部分:从JDK8开始接口新增的方法、接口的多继承、注意事项
  • 产品方法论与 AI Agent 技术的深度融合:从决策智能到价值创造
  • 串口共用错误排查指南(2025年5月15日 09:25)
  • AI大模型应用:17个实用场景解锁未来
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷九及详细答案解析
  • 特种设备事故背后,叉车智能监控系统如何筑牢安全防线
  • 深度学习中--模型调试与可视化
  • 【电子通识】热敏纸的静态发色性能和动态发色性能测试方法
  • 考研408《计算机组成原理》复习笔记,第二章(2)数值数据的表示(浮点数篇)
  • Cursor vs VS Code vs Zed
  • leetcode0621. 任务调度器-medium
  • Linux记录
  • 串行接口与并行接口
  • 上海老字号卖黄金,与动漫IP联名两周销售额近亿元
  • 中方是否计划解除或调整稀土出口管制?外交部回应
  • 普京调整俄陆军高层人事任命
  • “AD365特应性皮炎疾病教育项目”启动,助力提升认知与规范诊疗
  • 夜读丨母亲为燕子打开家门
  • 黑龙江省政府副秘书长许振宇,拟任正厅级领导