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 list = chatgptSettingMapper.selectList(null);


4. 条件查询

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

  • QueryWrapper 用于构造 WHERE 条件

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


5. 更新数据(按主键)

chatgptSettingMapper.updateById(chatgptSetting);

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

  • 自动更新非 null 字段


6. 条件更新

chatgptSettingMapper.update( chatgptSetting, new UpdateWrapper().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 page = new Page<>(1, 10);
Page result = chatgptSettingMapper.selectPage(page, queryWrapper);

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

QueryWrapper wrapper = new QueryWrapper<>();
wrapper.like("type", "api").orderByDesc("create_time");

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

六、其它实用技巧

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

@TableField(exist = false)
private Integer page;

@TableField(exist = false)
private Integer size;

七、构造器的使用 

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

BaseMapper 封装的方法有:
public interface BaseMapper extends Mapper {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteByMap(@Param("cm") Map columnMap);

    int delete(@Param("ew") Wrapper queryWrapper);

    int deleteBatchIds(@Param("coll") Collection idList);

    int updateById(@Param("et") T entity);

    int update(@Param("et") T entity, @Param("ew") Wrapper updateWrapper);

    T selectById(Serializable id);

    List selectBatchIds(@Param("coll") Collection idList);

    List selectByMap(@Param("cm") Map columnMap);

    T selectOne(@Param("ew") Wrapper queryWrapper);

    Integer selectCount(@Param("ew") Wrapper queryWrapper);

    List selectList(@Param("ew") Wrapper queryWrapper);

    List> selectMaps(@Param("ew") Wrapper queryWrapper);

    List selectObjs(@Param("ew") Wrapper queryWrapper);

    > E selectPage(E page, @Param("ew") Wrapper queryWrapper);

    >> E selectMapsPage(E page, @Param("ew") Wrapper queryWrapper);
}
 
  

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

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

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

例如:

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

而不能直接写成:

chatgptSettingMapper.update(chatgptSetting);

✅ 总结一句话:

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

你可能感兴趣的:(mybatis,tomcat,windows)