spring Boot查询数据分页显示的方法实例

2025-05-29 0 37

springBoot所有依赖和配置文件都写好的情况下

1、dao接口的实现方法

?

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
package com.cy.pj.sys.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Param;

import com.cy.pj.sys.pojo.SysLog;

@Mapper

public interface SysLogDao {

/**

*

* @param username 查询条件(例如查询那个用户的日志信息)

* @return 总记录数(基于这个结果可以计算总页数)

*/

int getRowCount(@Param("username") String username);

/**

*

* @param username 查询条件(例如查询那个用户的日志信息)

* @param startIndex 当前页的起始位置

* @param paInteger 当前页的页面大小

* @return 当前页的日志记录信息

* 数据库中每条日志信息封装到一个SysLog对象中

*/

List<SysLog> findPageObjects(

@Param("username")String username,

@Param("startIndex")Integer startIndex,

@Param("pageSize")Integer pageSize

);

}

2、写实现dao中Mapper的sql语句

?

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
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.cy.pj.sys.dao.SysLogDao">

<!-- sql元素用于对于sql语句共性的提取,需要的位置用<include>引入 -->

<sql id="queryWhereId">

from sys_Logs

<where>

<if test="username!=null and username!=''">

username like concat('%',#{username},'%')

<!-- concat 字符串的连接 -->

</if>

</where>

</sql>

<!-- 按条件统计记录总数 -->

<select id="getRowCount" resultType="int">

select count(*)

<include refid="queryWhereId"/>

</select>

<!-- 在映射文件中添加为id为 findPageObjects元素,,实现分页查询-->

<select id="findPageObjects" resultType="com.cy.pj.sys.pojo.SysLog">

select *

<include refid="queryWhereId"/>

order by createdTime desc

limit #{startIndex},#{pageSize}

</select>

</mapper>

3、写pojo类对数据进行封装,所显示的表字段的pojo类

3.1这里是SysLog

?

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

41

42

43
package com.cy.pj.sys.pojo;

import java.io.Serializable;

import java.util.Date;

import lombok.Data;

/**

* 定义用于封装日志信息的一个pojo对象,这样的对象,在定义时要遵循一下规则

* 1)属性尽量都用对象类型

* 2)提供无参数构造函数

* 3)提供set/get方法,boolean类型变量不能以is作为前缀

* 4)实现序列化接口并手动添加序列化id(便于后续对此对象进行序列化):在java中建议所有用于存储数据 的对象都实现

* FAQ?

* 1)为什么要实现序列化接口

* 2)什么是序列化?(将对象转化为字节)

* 3)为什么要序列化?应用在什么场景?(将数据持久化,或将数据存储到缓存中)

* 4)什么是反序列化?(将字节转换为对象

* 5)如何序列化和反序列化

* 5.1)设计类是要实现序列化接口

* 5.2)构建IO对象(ObjectOutputStream/ObjectinputStream)

* 5.3)通过I/O对象进行序列化和反序列化

* @author Administrator

*

*/

@Data

public class SysLog implements Serializable{

private static final long serialVersionUID = -1592163223057343412L;

private Integer id;

//用户名

private String username;

//用户操作

private String operation;

//请求方法

private String method;

//请求参数

private String params;

//执行时长(毫秒)

private Long time;

//ip地址

private String ip;

//创建时间

private Date createdTime;

}

3.2对获取的信息进行封装(获取分页信息的页码值、页面大小(就是每页所显示的记录)、获取的表总共记录数、总页数 、当前记录)

?

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
package com.cy.pj.sys.pojo;

import java.util.List;

import lombok.Data;

/**

*

* @author PageObject 为业务封装分业务相关数据的BO对象

* @param <T>参数化的类型(泛型)

*/

@Data

public class PageObject<T> {//类名<泛型>:类泛型(这里的泛型用于约束类中的属性,方法参数,方法的返回值)

/**当前页的页码值 */

private Integer pageCurrent=1;

/**页面大小*/

private Integer pageSize=3;

/**总行数(通过查询获得)*/

private Integer rowCount=0;

/**总页数(通过计算获得)*/

private Integer pageCount=0;

/**当前页记录*/

private List<T> records;

}

3.3处理异常进行封装

?

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

41

42

43

44

45

46

47

48

49
package com.cy.pj.sys.pojo;

public class JsonResult {

/**

* 状态码

*/

private int state=1;

/**

* 状态信息

*/

private String message="ok";

/**

* 正确数据

*/

private Object data;

public JsonResult() {

}

public JsonResult(String message) {

this.message = message;

}

public JsonResult(Object data) {

this.data = data;

}

public JsonResult(Throwable t) {

this.state=0;

this.message=t.getMessage();

}

public int getState() {

return state;

}

public void setState(int state) {

this.state = state;

}

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

public Object getData() {

return data;

}

public void setData(Object data) {

this.data = data;

}

}

4、写service接口

?

1

2

3

4

5

6

7

8
package com.cy.pj.sys.service;

import com.cy.pj.sys.pojo.PageObject;

import com.cy.pj.sys.pojo.SysLog;

public interface SysLogService {

PageObject<SysLog> findPageObject(String username,Integer pageCurrent);

}

5、写实现service接口的实现类

?

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

41

42

43

44

45

46

47

48

49

50

51

52

53
package com.cy.pj.sys.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.cy.pj.sys.dao.SysLogDao;

import com.cy.pj.sys.pojo.PageObject;

import com.cy.pj.sys.pojo.SysLog;

import com.cy.pj.sys.service.SysLogService;

import om.cy.pj.common.exception.ServiceException;

@Service

public class SysLogServiceImpl implements SysLogService {

@Autowired

private SysLogDao sysLogDao;

@Override

public PageObject<SysLog> findPageObject(String username, Integer pageCurrent) {

// 1.验证参数的合法性

// 1.1验证pageCurrent的合法性

// 不合法抛出IllegalArgumentException异常

if (pageCurrent == null || pageCurrent < 1)

throw new IllegalArgumentException("当前也显示不正确");

// 基于条件查询总记录数

// 2.1执行查询

int rowCount = sysLogDao.getRowCount(username);

// 2.2验证查询结果,假如结果为0不在执行如下操作

if (rowCount == 0)

throw new ServiceException("系统登录没有查到对应的记录");

// 3.基于条件查询当前页记录(pageSize定义为2)

// 3.1)定义pageSize

int pageSize = 2;

//3.2计算startIndex

int startIndex=(pageCurrent-1)*pageSize;

//3.3执行当前数据的查询操作

List<SysLog> records = sysLogDao.findPageObjects(username, startIndex, pageSize);

//4.对分页信息以及当前页记录进行封装

//4.1 构建PageObject对象

PageObject<SysLog> pageObject = new PageObject<>();

//4.2封装数据

pageObject.setPageCurrent(pageCurrent);

pageObject.setPageSize(pageSize);

pageObject.setRowCount(rowCount);

pageObject.setRecords(records);

pageObject.setPageCount((rowCount-1)/pageSize+1);

//5.返回封装结果

return pageObject;

}

}

5.自定义异常

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
package om.cy.pj.common.exception;

public class ServiceException extends RuntimeException {

public ServiceException() {

super();

}

public ServiceException(String message) {

super(message);

}

public ServiceException(Throwable cause) {

super(cause);

}

}

controller类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
package om.cy.pj.common.exception;

public class ServiceException extends RuntimeException {

public ServiceException() {

super();

}

public ServiceException(String message) {

super(message);

}

public ServiceException(Throwable cause) {

super(cause);

}

}

html页面和js写的方法

数据显示页面的js编写方法

?

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

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68
<div id="pageId" class="box-footer clearfix" dm="100"></div>

<!-- /.box-body -->

</div>

<!-- /.box -->

</div>

</div>

<script type="text/javascript">

/* 分页页面加载完成,向服务端发起异步请求 */

$(function() {

$("#pageId").load("doPageUI",function(){

doGetObjects();

});

});

/* 定义异步请求处理函数, */

function doGetObjects(){

//1.定义url和参数

var url = "doFindPageObjects";

var params={"pageCurrent":1};

//2.发起异步请求

//请问如下ajax请求的回调函数参数名可以是任意吗?//可以,必须符合标识符的规范

$.getJSON(url,params,function(result){

doHandleQueryResponseResult(result);

});//特殊的ajax函数

}

function doHandleQueryResponseResult(result){

if(result.state==1){//ok

//更新table中tbody内部的数据

doSetTableBodyRows(result.data.records);//将数据呈现在页面上

/*

//更新页面page。html分页数据

*/

doSetPagination(result.data);

}else{

alert(result.message);

}

}

function doSetTableBodyRows(records){

//1.获取tBody对象,并清除对象

var tBody=$("#tbodyId");

tBody.empty();

//2.迭代records记录,并将其内容追加到tbody

for(var i in records){

//2.1构建tr对象

var tr=$("<tr></tr>");

//2.2构建tds对象

var tds=doCreateTds(records[i]);

//2.3将tds追加到tr中

tr.append(tds);

//2.4将tr追加tbody中

tBody.append(tr);

}

}

function doCreateTds(data){

var tds="<td><input type='checkbox' class='cBox' name='cItem' value='"+data.id+"'></td>"

+"<td>"+data.username+"</td>"

+"<td>"+data.operation+"</td>"

+"<td>"+data.method+"</td>"

+"<td>"+data.params+"</td>"

+"<td>"+data.ip+"</td>"

+"<td>"+data.time+"</td>";

return tds;

}

</script>

创建上下页翻页的按钮HTML页 以及js的编写

?

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

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69
<ul class="pagination pagination-sm no-margin pull-right">

<li><a class="first">首页</a></li>

<li><a class="pre">上一页</a></li>

<li><a class="next">下一页</a></li>

<li><a class="last">尾页</a></li>

<li><a class="rowCount">总记录数(0)</a></li>

<li><a class="pageCount">总页数(0)</a></li>

<li><a class="pageCurrent">当前页(0)</a></li>

</ul>

<script type="text/javascript">

function doSetPagination(page){

console.log("page",page)

//1.初始化数据

$(".rowCount").html("总记录数("+page.rowCount+")");

$(".pageCount").html("总页数("+page.pageCount+")");

$(".pageCurrent").html("当前页("+page.pageCurrent+")");

//2.绑定数据(为后续对此数据的使用提供服务)

$("#pageId").data("pageCurrent",page.pageCurrent);

$("#pageId").data("pageCount",page.pageCount);

}

$(function(){

//事件注册

$("#pageId").on("click",".first,.pre,.next,.last",doJumpToPage);

})

function doJumpToPage(){

//1.获取点击对象的clss值

var cls=$(this).prop("class");//Property

//2.基于点击的对象执行pageCurrent值得修改

//2.1获取pageCurrent, pageCount的当前值

var pageCurrent=$("#pageId").data("pageCurrent");

var pageCount=$("#pageId").data("pageCount");

//2.2修改pageCurrent的值

if(cls=="first"){//首页

pageCurrent=1;

}else if(cls=="pre"&&pageCurrent>1){//上一页

pageCurrent--;

}else if(cls=="next"&&pageCurrent<pageCount){//下一页

pageCurrent++;

}else if(cls=="last"){//最后一页

pageCurrent=pageCount;

}else{

return;

}

//3.对pageCurrent值进行重新绑定

$("#pageId").data("pageCurrent",pageCurrent);

//4.基于新的pageCurrent的值进行当前页数据查询

doGetObjects();

}

function doGetObjects(){

//1.定义url和参数

var url ="doFindPageObjects";

//data是从指定元素上获取绑定的数据

//数据会在何时进行绑定?(setPagination,doQueryObjects)

var pageCurrent = $("#pageId").data("pageCurrent");

//为什么要执行如下判断,然后初始化pageCurrent的值为1

//pageCurrent参数在没有赋值的情况下,默认初始值应该为1.

if(!pageCurrent)

pageCurrent=1;

var params={"pageCurrent":pageCurrent};

//2.发起异步请求

//请问如下ajax请求的回调函数参数名可以是任意的吗??可以,必须符合标识符的规范

$.getJSON(url,params,function(result){

//请问result是一个字符串还是json格式的js对象? 答:json格式对象

doHandleQueryResponseResult(result);

});

}//特殊的ajax函数

</script>~~~~

总结

到此这篇关于spring Boot查询数据分页显示的文章就介绍到这了,更多相关springBoot查询数据分页内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://segmentfault.com/a/1190000023599865

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 spring Boot查询数据分页显示的方法实例 https://www.kuaiidc.com/118802.html

相关文章

发表评论
暂无评论