简述分页PageHelper 和Mybaties分页

PageHelper是mybatis的一个分页插件
PageHelper.startPage放在查询语句的上面相邻 查询时就会自动拼接
PageHelper.startPage(pageNum,pageSize)这样就可以实现分页
分页功能实现失败
注意在service层也不能有过多的语句,因为这是在controller层加的 所以在service层要保证没有别的东西
像这样
在这里插入图片描述
要么就在service层添加PageHelper.startpage(),且不能对返回结果进行任何处理

那sql语句和查询所有数据的时候一样吗?会自动拼接limit,拼接到sql语句结尾(如下)
在这里插入图片描述

具体实现如下

 /**
 * 根据管理员id查询主题列表
 *
 * @return 结果
 */
@Override
public List<ScoreThemeVO> selectScoreThemeVoList(String searchValue) {
    Long userId = SecurityUtils.getUserId();
    List<ScoreThemeVO> list = new ArrayList<ScoreThemeVO>();
    /**根据用户id获得角色 并返回相应的主题列表参数*/
    Integer roleID=scoreThemeMapper.getRoleIdById(userId);
    if (ROLE_MANAGER_MAIN_ID.equals(roleID)) {
        startPage();
        return scoreThemeMapper.selectAllScoreThemeList(searchValue);
    }
        startPage();
        return scoreThemeMapper.selectZiScoreThemeList(userId);
}
/**
 * 设置请求分页数据
 */
protected void startPage()
{
    PageDomain pageDomain = TableSupport.buildPageRequest();
    Integer pageNum = pageDomain.getPageNum();
    Integer pageSize = pageDomain.getPageSize();
    if (StringUtils.isNull(pageNum) || StringUtils.isNull(pageSize))
    {
     pageNum = 1;
     pageSize = 10;
    }
    PageHelper.startPage(pageNum, pageSize);
}

pageNum和pageSize一般给个默认值
默认值
mybaties 分页查询(这段来自我宝讲的)

/**
 * 查询打分主题列表
 */
public ResultJson findPage(@PathVariable Integer currentPage,@PathVariable Integer pageSize)
{
    int a = (currentPage-1)*pageSize;
    List<Student> byPage = cardService.findByPage(a,pageSize);
    return ResultJson.ok(byPage);
}

对应sql语句

/**
 * 查询打分主题列表
 */

/* select * from student left join classname on student.id = classname.id limit 1,5
(limit 1,5)从下标为1数据开始拿,选五条数据(像数组一样数据列表第一条下标为0)
1是起始下标,5是返回的记录条数

为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1;    #检索记录行 96-last.

如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; #检索前 5 个记录行
换句话说,LIMIT n 等价于 LIMIT 0,n。
select * from table LIMIT 5,10; #返回第6-15行数据
select * from table LIMIT 5; #返回前5行
select * from table LIMIT 0,5; #返回前5行*/

[拓展:监听器(注:以下来自大佬的对话)]
监听器 遇到过的最常用的就是rabbitMq 还有cannal同步数据
rabbitMQ 你把数据传到消息队列 通常会有一个延迟值,这个值是不固定的,需要你去监听队列的变化获取数据

举个简单的例子 ,阿里的canal是一个监听数据库增量日志的插件 ,当你同时使用数据库和redis甚至还有elasticsearch三方同时存储数据的时候
你不可能在每个对数据库增删改查的接口里都进行数据同步吧

所以可以根据数据库的增量日志变化 对应它的增删改查进行监听 直接用监听器里同步数据

这样既简化了代码 又实现了异步更新数据

不然的话 比如说你调用了一个增加用户的接口 本来这个操作插入数据库只需要200毫秒,但你又在这个接口下进行同步数据,最后使用了一秒以上,这就大大降低了效率

这是不是使用监听器进行统一同步数据?是

而不是分开一个一个地进行同步? 解耦

就你的代码就完全不需要考虑数据同步了 在监听器里做就可以了

这个是不是因为延迟值,队列的顺序并不是上传的顺序?(rabbitMQ 你把数据传到消息队列 通常会有一个延迟值,这个值是不固定的,需要你去监听队列的变化获取数据 )

就算最早上传,但是延迟值大,也差不多就排到队列的后面

/**
 *今天日记完结,撒花~
 * 又向我宝靠近一步,开心~
 */

Guess you like

Origin blog.csdn.net/weixin_43889487/article/details/120760227