发布于2026-07-12 阅读(0)
扫一扫,手机访问
说起Mybatis-Plus的查询,最基础也是最常用的就是那几招。甭管是根据ID单查、批量查,还是按条件过滤,MP都封装得很干净。咱们直接上代码看效果。
先看根据ID查询——单条记录,最常见不过了。
//测试根据ID查询
@Test
public void testSelectById(){
User user = userMapper.selectById(2L);
System.out.println(user);
}
测试结果一目了然:

如果要查一批ID对应的记录,直接传个列表就行:
//测试批量查询
@Test
public void testSelectByBatchIds(){
List users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
users.forEach(System.out::println);
}
结果如下:

再来看按条件查询——用Map来组装条件,简单粗暴:
//按条件查询之使用map操作
@Test
public void testSelectByMap(){
Map map = new HashMap();
map.put("name","哈利油");
map.put("age",18);
List list = userMapper.selectByMap(map);
list.forEach(System.out::println);
}
结果也是预期的那样:

分页几乎是每个项目的标配。以前用PageHelper或者手写limit,现在MP直接提供了分页插件,省事不少。用法分两步:注册插件 + 调用Page对象。
在配置类里加一个Bean:

//注册分页插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
传参:当前页和每页大小,还能顺便指定排序字段。
@Test
public void testPage(){
//参数1:当前页,参数2:页面大小
Page page = new Page<>(1,5);
//用于排序
page.setDesc("id");
IPage userIPage = userMapper.selectPage(page, null);
userIPage.getRecords().forEach(System.out::println);
System.out.println(userIPage.getTotal());
}
分页效果如下:

注意getTotal()能拿到总记录数,做分页组件的数据源再合适不过。
物理删除就是真的从表里删掉记录,最直接。MP同样提供了三种常见方式。
根据ID删除:
//测试删除
@Test
public void testDeleteById(){
userMapper.deleteById(1L);
}
结果:

批量删除(传ID列表):
//通过id批量删除
@Test
public void testDeleteBatchId(){
userMapper.deleteBatchIds(Arrays.asList(2L,3L));
}
效果:

按Map条件删除:
@Test
public void testDeleteMap(){
Map map = new HashMap();
map.put("name","哈利油");
userMapper.deleteByMap(map);
}
删除后:

实际项目中,很多场景是不允许真正删数据的——比如用户误操作后需要恢复,或者管理员要查看已删除记录。逻辑删除的本质就是加一个标记字段(比如deleted),0表示未删,1表示已删。MP对逻辑删除支持很完善,配置步骤也不复杂。
在表里加一个整数字段,比如deleted,默认0。

在对应的属性上标记:

在配置类里加一个Bean:

//注册逻辑删除组件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
告诉MP,1代表已删,0代表未删:

mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0
完成配置后,调用delete方法时,MP会自动把SQL转成UPDATE(更新deleted字段),而不是真的DELETE。查询时也会自动过滤掉已删除的记录。



从日志里能看到,执行的SQL确实是UPDATE而非DELETE。逻辑删除就配置完成了,既保证了数据可追溯,又对上层代码几乎零侵入。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8