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,适合中小型项目快速开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值