扩展查询
// 根据 ID 查询
T selectById(Serializable id);
// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 entity 条件,查询全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据 columnMap 条件)
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
// 根据 Wrapper 条件,查询全部记录
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 entity 条件,查询全部记录(并翻页)
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
| 类型 | 参数名 | 描述 |
|---|---|---|
| Serializable | id | 主键ID |
| Wrapper | queryWrapper | 实体对象封装操作类(可以为 null) |
| Collection<? extends Serializable> | idList | 主键ID列表(不能为 null 以及 empty) |
| Map<String, Object> | columnMap | 表字段 map 对象 |
| IPage | page | 分页查询条件(可以为 RowBounds.DEFAULT) |
// 测试查询
@Test
void test1() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
// 测试批量查询
@Test
void test2() {
List<User> users = userMapper.selectBatchIds(Arrays.asList(1L,2L,3L));
users.forEach(System.out::println);
}
// 条件查询 map
@Test
void test3() {
HashMap<String, Object> map = new HashMap<>();
map.put("name","Tom");
map.put("age","28");
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);
}
分页查询
第一步:配置拦截器组件即可 ( MybatisPlusConfig.java )
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
//paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
第二步:直接使用 Page 对象
// 测试分页查询
@Test
void testPage() {
// 参数一:当前页 参数二:页面大小
Page<User> page = new Page<>(2, 3);
userMapper.selectPage(page, null);
page.getRecords().forEach(System.out::println);
}
结果:
JsqlParserCountOptimize sql=SELECT id,name,age,email,version,creat_time,update_time FROM user
==> Preparing: SELECT COUNT(1) FROM user
==> Parameters:
<== Columns: COUNT(1)
<== Row: 5 ==> Preparing: SELECT id,name,age,email,version,creat_time,update_time FROM user LIMIT 3,3
==> Parameters:
<== Columns: id, name, age, email, version, creat_time, update_time
<== Row: 4, Sandy, 21, test4@baomidou.com, 1, null, null
<== Row: 5, Billie, 111, 11111@qq.com, 1, null, 2020-03-23 00:41:24.458000
<== Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38d525aa]
User(id=4, name=Sandy, age=21, email=test4@baomidou.com, version=1, creatTime=null, updateTime=null)
User(id=5, name=Billie, age=111, email=11111@qq.com, version=1, creatTime=null, updateTime=Mon Mar 23 00:41:24 CST 2020)