分页查询

大约 1 分钟 约 340 字

分页查询是我们经常要使用的功能,beetlSql 支持多数据,会自动适配当前数据库生成分页语句

# 方式一:使用LambdaQuery.limit()分页查询

继续以 User 为例子

# mapper
public interface UserMapper extends BaseMapper<User> {

}
1
2
3
# 调用












 


@Autowired
UserMapper userMapper;

/**
* 查询用户
*/
@RequestMapping("page")
public String page() {
    PageResult<User> result = userMapper.createLambdaQuery()
    .andLike(User::getName,"%t%")
    .andIsNotNull(User::getDeleteTime)
    .desc(User::getId)
    .limit(1, 10);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 方式二:使用LambdaQuery.page()分页查询













 


@Autowired
UserMapper userMapper;

/**
* 查询用户
*/
@RequestMapping("page")
public String page() {
    PageResult<User> result = userMapper.createLambdaQuery()
    .andLike(User::getName,"%t%")
    .andIsNotNull(User::getDeleteTime)
    .desc(User::getId)
    .page(1, 10);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

page()中传入起始页和查询条数即可

返回值PageResult<T>包含了查询到的列表数据和总条数

List<User> list = result.getList();
long totalRow = result.getTotalRow();
1
2

更常用的是传入一个PageRequest对象,通过PageRequest对象可以构造更多选项

比如

  • totalRequired 是否需要查询总条数
  • orderBy 排序方式
PageResult<User> result = userDao.createLambdaQuery()
    .page(DefaultPageRequest.of(1,10));
1
2

page 方法还有很多重载方法,具体使用参见代码

page 重载方法


# 方式三:使用 @Sql 或 @Template 注解

使用page()函数指明分页查询,PageRequest是分页参数



 



public interface UserMapper extends BaseMapper<User> {
    
    @Template("select #{page()} from sys_user where department_id = #{id}")
    PageResult<User> pageQueryById(Integer id,PageRequest pageRequest);
}
1
2
3
4
5

# 方式四:在 markdown 文件中使用pageTag()

# mapper
public interface UserMapper extends BaseMapper<User> {

    PageResult<User> pageTest(PageRequest query);
}
1
2
3
4
# user.md




 

 




pageTest
===
```sql
select
-- @{pageTag()
    name, age
-- @}
from user
```

1
2
3
4
5
6
7
8
9
10
上次编辑于: 2022年11月25日 13:03
贡献者: orange