Singerw's Repository Singerw's Repository
首页
  • 相关文章

    • HTML相关文章
    • CSS相关文章
    • JavaScript相关文章
  • 学习笔记

    • JavaScript笔记
    • ES6笔记
    • Vue笔记
  • 相关文章

    • Spring相关文章
    • SpringBoot相关文章
    • MyBatis相关文章
    • MySQL相关文章
  • 学习笔记

    • SpringBoot笔记
    • Spring笔记
    • MyBatis笔记
    • MySQL笔记
    • JavaWeb笔记
    • JavaCore笔记
  • 学习笔记

    • Linux笔记
    • Git笔记
    • 技术文档
  • 偏门技术

    • GitHub技巧
    • 博客搭建
    • 科学上网
  • 安装教程

    • JDK
    • MySQL
    • Node.js
    • Linux
  • 终身学习
  • 面试人生
  • 心情杂货
  • 生活随笔
  • 归档
  • 标签
GitHub (opens new window)

Singerw

谁能够凭爱意将富士山私有
首页
  • 相关文章

    • HTML相关文章
    • CSS相关文章
    • JavaScript相关文章
  • 学习笔记

    • JavaScript笔记
    • ES6笔记
    • Vue笔记
  • 相关文章

    • Spring相关文章
    • SpringBoot相关文章
    • MyBatis相关文章
    • MySQL相关文章
  • 学习笔记

    • SpringBoot笔记
    • Spring笔记
    • MyBatis笔记
    • MySQL笔记
    • JavaWeb笔记
    • JavaCore笔记
  • 学习笔记

    • Linux笔记
    • Git笔记
    • 技术文档
  • 偏门技术

    • GitHub技巧
    • 博客搭建
    • 科学上网
  • 安装教程

    • JDK
    • MySQL
    • Node.js
    • Linux
  • 终身学习
  • 面试人生
  • 心情杂货
  • 生活随笔
  • 归档
  • 标签
GitHub (opens new window)
  • 后端学习笔记

  • MySQL文章

  • SpringBoot相关文章

  • Spring文章

  • MyBatis文章

    • 万能Map
    • 实现日志功能
    • MyBatis动态SQL
    • 实现分页功能
      • 1、Limit实现分页
      • 2、RowBounds实现分页
      • 3、MyBatis 分页插件 PageHelper实现分页
    • MyBatis工具类
  • 常用jar包和工具类

  • 后端
  • MyBatis文章
Singerw
2021-08-31

实现分页功能

# 实现分页功能🤕

# 1、Limit实现分页

通过SQL的Limit实现基本的分页功能。SQL层面的分页实现。

【示例】接口

public interface ArticleMapper {

    List<Article> getArticlesByLimit(Map<String,Integer> map);
}
1
2
3
4

【示例】Mapper.xml

<mapper namespace="com.singerw.mapper.ArticleMapper">
    <select id="getArticlesByLimit" resultType="Article" parameterType="map">
        select * from article limit #{page},#{pageSize};
    </select>
</mapper>
1
2
3
4
5

【示例】单元测试

public class ArticleMapperTest {

    @Test
    public void getArticleByLimit() {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        ArticleMapper mapper = sqlSession.getMapper(ArticleMapper.class);

        HashMap<String, Integer> map = new HashMap<>();
        map.put("page",0);
        map.put("pageSize",10);
        List<Article> articles = mapper.getArticlesByLimit(map);
        articles.forEach(System.out::println);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2、RowBounds实现分页

通过Java代码层面实现分页功能。

【示例】接口

public interface ArticleMapper {

    List<Article> getArticlesByRowBounds();
}
1
2
3
4

【示例】Mapper.xml

<mapper namespace="com.singerw.mapper.ArticleMapper">
    <select id="getArticlesByRowBounds" resultType="Article">
        select * from article;
    </select>
</mapper>
1
2
3
4
5

【示例】单元测试

public class ArticleMapperTest {

    @Test
    public void getArticleByRowBounds() {
        RowBounds rowBounds = new RowBounds(0,10);
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        List<Article> articles = sqlSession.selectList("com.singerw.mapper.ArticleMapper.getArticlesByRowBounds",null,rowBounds);
        articles.forEach(System.out::println);
        sqlSession.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 3、MyBatis 分页插件 PageHelper实现分页

​ 如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。

官方文档:https://pagehelper.github.io/docs/ (opens new window)

# 步骤一:导入jar包

<!--pagehelper分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.6</version>
</dependency>
1
2
3
4
5
6

# 步骤二:在 MyBatis 配置 xml 中配置拦截器插件

<!--PageHelper分页插件-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
        <property name="param" value="value"/>
    </plugin>
</plugins>
1
2
3
4
5
6
7
8

# 步骤三:在 Spring 配置文件中配置拦截器插件

<!--分页拦截器插件-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 注意其他配置 -->
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <!--使用下面的方式配置参数,一行配置一个 -->
                    <value>
                        <!--params=value1-->
                    </value>
                </property>
            </bean>
        </array>
    </property>
</bean>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。

# PageHelper官方使用案例

【例一】

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<User> list = userMapper.selectIf(1);
assertEquals(2, list.get(0).getId());
assertEquals(10, list.size());
//分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>
assertEquals(182, ((Page) list).getTotal());
1
2
3
4
5
6
7
8

【例二】

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# PageHelper实现分页小案例

【示例 】Mapper.java

@Repository
public interface ArticleMapper {
    List<Article> getArticleListByLike(@Param("keywords") String keywords);
}
1
2
3
4

【示例 】Mapper.xml

<mapper namespace="com.singerw.dao.ArticleMapper">
    <select id="getArticleListByLike" resultMap="artilceMap">
    SELECT g_article.article_id,
		g_article.article_title,
		g_article.article_content,
		g_article.acticle_img,
		g_article.acticle_author,
		g_article.acticle_type,
		g_article.acticle_visits,
		g_article.acticle_time,
		g_article.acticle_status,
		g_acticletype.a_id,
		g_acticletype.a_type,
		g_acticletype.act_type
    FROM g_article 
    INNER JOIN 
         g_acticletype
    ON
    	 g_article.acticle_type = g_acticletype.act_type
    WHERE 
         g_article.article_title LIKE #{keywords}
</select>

    <resultMap id="artilceMap" type="article">
    <id property="artID" column="article_id"/>
    <result property="artTitle" column="article_title"/>
    <result property="artContent" column="article_content"/>
    <result property="artImg" column="acticle_img"/>
    <result property="artAuthor" column="acticle_author"/>
    <result property="artVisits" column="acticle_visits"/>
    <result property="artCreateTime" column="acticle_time"/>
    <result property="artStatus" column="acticle_status"/>

    <association property="articleType" column="acticle_type">
    <id property="typeID" column="a_id"/>
    <result property="typeTitle" column="a_type"/>
    <result property="typeNumber" column="act_type"/>
    </association>
    </resultMap>
    </mapper>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

【示例 】Service.java

public interface ArticleService {
    ResponseData<Article> getArticleListByLike(String keywords,int page,int pageSize);
}
1
2
3

【示例 】ServiceImpl.java

@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;

    @Override
    public ResponseData<Article> getArticleListByLike(String keywords,int page,int pageSize) {
        if (keywords != null) {
            keywords = "%" + keywords + "%";
        }
        PageHelper.startPage(page,pageSize);
        List<Article> articleList = articleMapper.getArticleListByLike(keywords);
        PageInfo pageInfo = new PageInfo(articleList);
        ResponseData<Article> responseData = new ResponseData<Article>(0, "查询成功", pageInfo.getTotal(), articleList);
        return responseData;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

【示例 】Controller.java

@RestController
@RequestMapping("/api")
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    @GetMapping("/artAll")
    public ResponseData<Article> getArticleList1(
        @RequestParam(name = "page", required = true, defaultValue = "0") int page,
        @RequestParam(name = "limit", required = true, defaultValue = "10") int limit,
        @RequestParam(name = "keywords", required = true, defaultValue = "") String keywords) {
        ResponseData<Article> articleList = articleService.getArticleListByLike(keywords, page, limit);
        return articleList;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
编辑 (opens new window)
MyBatis动态SQL
MyBatis工具类

← MyBatis动态SQL MyBatis工具类→

最近更新
01
Maven资源导出问题终极版
10-12
02
《MyBatis-Plus》学习笔记
10-07
03
MyBatis-Plus—配置日志
10-07
更多文章>
Theme by Vdoing | Copyright © 2020-2021 版权所有 | repository.singerw.com
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×