目录

  • 一:SpringBoot+MyBatis+PageHelper+Layui+thymeleaf+MySQL实现分页
    • 核心代码
    • 总结

一:SpringBoot+MyBatis+PageHelper+Layui+thymeleaf+MySQL实现分页

第一步:
在pom文件中引入坐标

     <!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--测试用--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--引入thymeleaf的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--    分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>3.7.5</version></dependency>

第二步: 在springboot启动类中配置PageHelper

@MapperScan("com.tgh.hospitalproject.mapper")
@SpringBootApplication
public class HospitalProjectApplication {public static void main(String[] args) {SpringApplication.run(HospitalProjectApplication.class, args);}//创建pageHelper,设置其属性,然后将pageHelper对象交给spring容器管理@Beanpublic PageHelper pageHelper() {PageHelper pageHelper = new PageHelper();Properties properties = new Properties();properties.setProperty("offsetAsPageNum", "true");properties.setProperty("rowBoundsWithCount", "true");properties.setProperty("reasonable", "true");properties.setProperty("dialect", "mysql");pageHelper.setProperties(properties);return pageHelper;}
}

properties.setProperty("offsetAsPageNum", "true");开启用页码和页面大小进行分页
properties.setProperty("rowBoundsWithCount", "true");进行count查询
properties.setProperty("reasonable", "true");使页码参数合理,当页码<=0时查询第一页,页码>总页面时查询最后一页。
properties.setProperty("dialect", "mysql");使用mysql方言
第三步: application.yml文件配置

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/hospital?serverTimezone=GMT%2B8&characterEncoding=utf-8username: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSourcethymeleaf:prefix: classpath:/templates/suffix: .htmlcache: falsemode: HTML5encoding: UTF-8
logging:level:com.tgh.hospitalproject.dao : debug

第四步: 后台前台代码准备
前台页面:(完整代码请参考项目)

<html xmlns:th="http://www.thymeleaf.org">
<div th:fragment="head"><link rel="stylesheet" href="/layui/css/layui.css"><link rel="stylesheet" href="/css/my.css"><script src="/js/jquery-3.5.1.js"></script><script src="/layui/layui.js"></script>
<div class="layui-header"><div class="layui-logo"><span>欢迎进入</span>医疗系统<span>后台管理</span></div><!-- 头部区域(可配合layui已有的水平导航) --><ul class="layui-nav layui-layout-left"><li class="layui-nav-item"><a href="javascript:">系统管理</a><dl class="layui-nav-child"><dd><a href="/admin/doctor/manage">医生管理</a></dd><dd><a href="/admin/patient/manage">患者管理</a></dd><dd><a href="/admin/drugs/manage">药品管理</a></dd><dd><a href="/admin/option/manage">科目查询管理</a></dd><dd><a href="/admin/illness/manage">疾病管理</a></dd></dl></li><li class="layui-nav-item" ><a href="/admin/appointment/manage">预约管理</a></li><li class="layui-nav-item" ><a href="/admin/medicalHistory/manage">病史管理</a></li><li class="layui-nav-item" ><a href="/admin/hospitalization/manage">住院信息管理</a></li><li class="layui-nav-item" ><a href="/admin/user/manage">管理员管理</a></li></ul><ul class="layui-nav layui-layout-right"><li class="layui-nav-item"><a href="javascript:;">&nbsp;&nbsp;&nbsp;&nbsp;欢迎: [[${session.user!=null?session.user.username:'admin'}]]</a></li><li class="layui-nav-item"><a href="/home/user/logout">退出登录</a></li></ul>
</div>
</div>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>医生管理界面</title>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin"><!-- 引入公共头部开始 --><div th:insert="admin/common/header :: head"></div><!-- 引入公共头部结束 --><div class="layui-body"><!-- 内容主体区域 --><div style="padding: 15px;"><h5><span class="layui-breadcrumb"><a href="javascript:;">系统管理</a><a><cite>医生管理</cite></a></span></h5><form action="/admin/doctor/manage" method="get"><table><tr><td>昵称:</td><td><input name="name"  required autocomplete="off" th:value="${name}" class="layui-input lay-size=sm" ></td><td>&nbsp;&nbsp;证件号:</td><td><input name="certId" required autocomplete="off" th:value="${certId}" class="layui-input lay-size=sm" ></td><td>   <button class="layui-btn" type="submit"><i class="layui-icon"></i></button></td></tr></table></form><table class="layui-table"><colgroup align="center"></colgroup><thead><tr><th>序号</th><th>昵称</th><th>是否为专家</th><th>年纪</th><th>性别</th><th>证件号</th><th>所属部门</th><th>家庭住址</th><th>操作&nbsp;&nbsp;&nbsp;&nbsp;<button class="layui-btn" onclick="showAdd('/admin/doctor/')"><i class="layui-icon"></i> 添加</button></th></tr></thead><tbody><div type="hidden"  ></div><div th:each=" doctors : ${doctorList}"><tr><td>[[${doctors.getId()}]]</td><td>[[${doctors.getName}]]</td><td>[[${doctors.getExpert() == 1? '专家' : '非专家'}]]</td><td>[[${doctors.getAge()}]]</td><td>[[${doctors.getSex() == 0 ? '男' : '女'}]]</td><td>[[${doctors.getCertId()}]]</td><td>[[${doctors.getDepartment()}]]</td><td>[[${doctors.getAddress()}]]</td><td><button class="layui-btn" th:onclick="edit('/admin/doctor/',[[${doctors.getId()}]])"><i class="layui-icon"></i></button><button class="layui-btn" th:onclick="del('/admin/doctor/',[[${doctors.getId()}]])"><i class="layui-icon"></i></button></td></tr></div></tbody></table><div id="pagination"></div></div></div><!-- 引入公共脚部文件开始 --><div th:insert="admin/common/footer :: footer"></div><!-- 引入公共脚部文件结束 --><!-- 引入公共分页脚本文件开始 --><div th:insert="admin/common/page :: page"></div><!-- 引入公共分页脚本文件结束 -->
</div>
</body>
</html>
<div xmlns:th="http://www.thymeleaf.org">
<div th:fragment="page"><script>layui.use('element', function(){var element = layui.element;});layui.use(['laypage', 'layer',"form","table"], function() {var laypage = layui.laypage, layer = layui.layer;//完整功能laypage.render({elem: 'pagination', count: [[${page.total}]], limits:[ 10], layout: [ 'prev', 'page', 'next', 'limit', 'refresh','skip','count'], loading: true, curr: [[${page.pageNum}]] //动态获取当前页, jump: function (obj,first) {//在jump函数里面完成跳转处理//obj包含当前分页的所有参数console.log(obj)//非第一次执行if (!first) {//注意跳转路径与后台的接受变量保持一致window.location.href = "[[${path}]]?pageNo=" + obj.curr + "&limit=" + obj.limit;}}});});</script>
</div>
</div>

后台Controller:(思路:将查询到的医生数据放到model中,前台从model取出数据展现)

    //分页显示所有数据@RequestMapping("/manage")public String findPageList(@RequestParam(required = false, defaultValue = "1") Integer pageNo,@RequestParam(required = false, defaultValue = "10") Integer limit,@RequestParam(required = false) String name,@RequestParam(required = false) String certId,Model model){PageInfo<Doctor> doctorInfo = doctorService.findDoctorInfo(pageNo, limit, name, certId);model.addAttribute("doctorList",doctorInfo.getList());model.addAttribute("page",doctorInfo);model.addAttribute("name",name);model.addAttribute("certId",certId);model.addAttribute("path","/admin/doctor/manage");return "admin/doctorManage";}

后台Service实现:(思路:在进行mapper操作之前执行PageHelper.startPage(页码,页面大小);

    @Overridepublic PageInfo<Doctor> findDoctorInfo(Integer pageNo, Integer limit, String name, String cerId) {//由名字和身份证查询部分用户if(!StringUtils.isEmpty(name) || !StringUtils.isEmpty(cerId)) {PageHelper.startPage(pageNo,limit);List<Doctor> doctorPart = doctorMapper.findByNameAndCerId(name, cerId);PageInfo<Doctor> pageInfo = new PageInfo<>(doctorPart);return pageInfo;} else {//查询所有用户PageHelper.startPage(pageNo,limit);List<Doctor> doctorAll = doctorMapper.findAll();PageInfo<Doctor> pageInfo = new PageInfo<>(doctorAll);return pageInfo;}}

咱们关注doctorMapper.findAll(),返回的是lb_doctor表中的所有数据
后台Mapper:

    @Select({"select * from lb_doctor"})@Results({@Result(column="id", property="id", jdbcType= JdbcType.INTEGER, id=true),@Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),@Result(column="age", property="age", jdbcType=JdbcType.INTEGER),@Result(column="cert_id", property="certId", jdbcType=JdbcType.VARCHAR),@Result(column="sex", property="sex", jdbcType=JdbcType.INTEGER),@Result(column="department", property="department", jdbcType=JdbcType.VARCHAR),@Result(column="address", property="address", jdbcType=JdbcType.VARCHAR),@Result(column="user_id", property="userId", jdbcType=JdbcType.INTEGER),@Result(column="text", property="text", jdbcType=JdbcType.VARCHAR),@Result(column="expert", property="expert", jdbcType=JdbcType.INTEGER),})List<Doctor> findAllByPage();

核心代码

使用PageHelper的核心点在与后台Service实现部分
PageHelper.startPage(pageNo,limit); 对紧跟其的第一条语句末尾插入limit语句实现分页
List doctorPart = doctorMapper.findByNameAndCerId(name, cerId);
PageInfo pageInfo = new PageInfo<>(doctorPart); 对查询结果进行封装,包含分页信息和数据信息
查看PageInfo源码,发现是把结果数据封装在List集合里面

public class PageInfo<T> implements Serializable {private static final long serialVersionUID = 1L;//当前页private int pageNum;//每页的数量private int pageSize;//当前页的数量private int size;//由于startRow和endRow不常用,这里说个具体的用法//可以在页面中"显示startRow到endRow 共size条数据"//当前页面第一个元素在数据库中的行号private int startRow;//当前页面最后一个元素在数据库中的行号private int endRow;//总记录数private long total;//总页数private int pages;//结果集private List<T> list;...以下省略

固Controller层使用doctorInfo.getList()获取结果数据
页面展示:

总结

PageHelper具体使用参照核心代码即可
本测试中layui主要用到了分页,样式可参考layui分页
本测试中thymeleaf用来从后台Model域中获取数据,用到了th:each 、内联表达式 [[]]等,关于thymeleaf更多特性可参考前端爬坑一、thymeleaf在标签内部获得数据作为js函数的参数

Java开发实用工具相关推荐

  1. java 开发人员工具_每个Java开发人员都应该知道的10个基本工具

    java 开发人员工具 大家好,我们已经到了2019年的第二个月,我相信你们所有人都已经制定了关于2019年学习以及如何实现这些目标的目标. 我一直在撰写一系列文章,为您提供一些知识,使您可以学习和改 ...

  2. java 开发人员工具_Java开发人员应该知道的5种错误跟踪工具

    java 开发人员工具 随着Java生态系统的发展,可满足不断增长的请求和用户对高性能需求的Web应用程序成为了新型的现代开发工具. 具有快速新部署的快速节奏环境需要跟踪错误,并以传统方法无法维持的水 ...

  3. java 开发人员工具_Java开发人员应该知道的7种新工具

    java 开发人员工具 通过快速浏览一些最新的,创新的工具,准备好锁定和加载. 万一您错过了它,RebelLabs最近发布了Java工具和技术前景的全球调查结果 . 除了著名的工具和成熟的工具之外,市 ...

  4. java 开发人员工具_Java开发人员的5种工具

    java 开发人员工具 改善我们编写的Java代码的一种方法是使用最好的工具. 因此,让我们看看IDR Solutions建议使用的5种最常用的工具来帮助Java开发人员编写更好的代码. 查找错误 F ...

  5. java 操作vss,java开发常用工具总结,java开发常用工具

    java开发常用工具总结,java开发常用工具 1.editplus editplus 是我使用最频繁的工具,不管是java程序还是其他的语言的程序,本人都使用它,方便好用,速度快.如果配置好的话,可 ...

  6. linux java 构建工具有哪些,Linux ant --强大的Java开发构建工具

    用途说明 ant严格说来,ant其实并非原生的Linux命令,但它是一个使用广泛.功能强大的跨平台构建工具程序,尤其是进行Java开发时,许多开源的Java项目都使用ant作为构建工具.ant命令一般 ...

  7. java开发测试工具

    JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework).Junit测试是程序员测试,即所谓白盒测试,因为程序 ...

  8. NFC开发 —————实用工具以及开发文档(四)

    关于开发NFC必不可少的就是官方开发软件,以及开发文档,这篇文章给大家详细讲解一下,关于官方软件合集<文章末尾有下载地址> Android NFC开发(一) NFC开发 -----实现NF ...

  9. 用java开发Email工具之发送邮件 (1)作者:冯睿

    作者:冯睿 来源:赛迪网 本文介绍了如何利用Java的网络API来实现一个电子邮件工具程序.通常Email工具都 是使用SMTP(简单邮件传输协议, Simple Mail Transfer Prot ...

最新文章

  1. R语言ggplot2可视化:在选定数据点周围添加三角形(Add Triangles Around Select Data Points)
  2. 【PC工具】nodemcu ESP8266常用USB转串口芯片驱动CP210x、CH340G驱动安装有可能遇到的问题及解决办法...
  3. 技术债务就像俄罗斯方块,你永远都赢不了!
  4. linux检查网络是否通畅_网络基础Ping命令详解(使用Ping这命令来测试网络连通)...
  5. HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-ISAPI-4.0_32bit”在其模块...
  6. koa --- 扩展hbs方法
  7. 【原创】centos常见问题集锦
  8. 代码合并工具_合并上千个Excel表格,1秒就能完成
  9. Spark SQL and DataFrame Guide(1.4.1)——之DataFrames
  10. 全球首发!计算机视觉Polygon Mesh Processing总结8——Remeshing Global Structure和Correspondences
  11. 16查看走线长度_糟糕!丝印放到表层走线上面啦
  12. IIS------无法打开登录所请求的数据库 company。登录失败。 用户 'IIS APPPOOL\AppPool 4.0' 登录失败。...
  13. jquery 实现图片上传,并在前端显示出来
  14. 餐饮智能化:餐饮机器人正当时餐饮机器人的喜与忧
  15. Hbase+JAVAWeb实现超市仓库管理系统
  16. JAVA中利用Docx4J组件操作word文档,进行docx格式文档的创建、写入、读取、转换html、图片处理示例、转换pdf
  17. AngularJS中的双向数据绑定
  18. SpringBoot 项目实战 ~ 9.数据缓存
  19. Revit出图翻模【局部三维功能】,三维视图从此不卡
  20. terminal的常用快捷键

热门文章

  1. java 周几_java根据日期获取周几和获取某段时间内周几的日期
  2. 10个最常见的HTML5面试题
  3. 前端上传图片到七牛云
  4. 如果获取token?
  5. 最详细的Android图片压缩解释
  6. post提交数据返回404错误
  7. MySQL基础篇 | 连接查询、子查询(嵌套)
  8. python3 字典遍历的方法
  9. 人工智能几乎会影响到 IT 行业的每个方面,包括编程和开发
  10. 沪江日语小D落户博客园~