汶上做网站,自己做的网站 jen,wordpress个人支付插件,网站建设前需求调研表三 PageHelper
1 分页所需
// 原分页所需
1. 定义QueryObject类#xff0c;传递分页参数#xff0c;currentPage#xff0c;pageSize#xff0c;get start();方法
2. selectForCount()方法#xff0c;总条数小于等于0说明不需要分页#xff0c;大于0说明可以分页
3. se…三 PageHelper
1 分页所需
// 原分页所需
1. 定义QueryObject类传递分页参数currentPagepageSizeget start();方法
2. selectForCount()方法总条数小于等于0说明不需要分页大于0说明可以分页
3. selectForList()方法查询当前页显示的结果集
4. 把数据封装到PageResult中计算上一页下一页总页数
5. 两个用户传的两个数据库查的三个需要计算的// 使用 PageHelper 后
1. 定义QueryObject类
2. selectForCount()方法不写了
3. selectForList()方法limit之后的内容不需要写了各个数据库分页方法不同PageHelper支持各个数据库底层分页
4. PageResult不写2 PageHelper 介绍 PageHelper 是 MyBatis 的后端分页插件将写好的 SQL 语句进行分页加工。无需自己去封装以及关心 SQL 分页等问题。默认情况下会使用 PageHelper 方式进行分页如果想要实现自己的分页逻辑可以实现 Dialect(com.github.pagehelper.Dialect) 接口然后配置该属性为实现类的全限定名称以下参数都是针对默认 dialect 情况下的参数。使用自定义 dialect 实现时下面的参数没有任何作用。
1. helperDialect分页插件会自动检测当前的数据库链接自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时可以使用下面的缩写值
oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby也可以实现 AbstractHelperDialect然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。2. offsetAsPageNum默认值为 false该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为 true 时会将 RowBounds 中的 offset 参数当成 pageNum 使用可以用页码和页面大小两个参数进行分页。3. rowBoundsWithCount默认值为false该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为true时使用 RowBounds 分页会进行 count 查询。4. pageSizeZero默认值为 false当该参数设置为 true 时如果 pageSize0 或者 RowBounds.limit 0 就会查询出全部的结果相当于没有执行分页查询但是返回结果仍然是 Page 类型。5. reasonable分页合理化参数默认值为false。当该参数设置为 true 时pageNum0 时会查询第一页 pageNumpages超过总数时会查询最后一页。默认false 时直接根据参数进行查询。6. params为了支持startPage(Object params)方法增加了该参数来配置参数映射用于从对象中根据属性名取值 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable不配置映射的用默认值 默认值为pageNumpageNum;pageSizepageSize;countcountSql;reasonablereasonable;pageSizeZeropageSizeZero。7. supportMethodsArguments支持通过 Mapper 接口参数来传递分页参数默认值false分页插件会从查询方法的参数值中自动根据上面 params 配置的字段中取值查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。8. autoRuntimeDialect默认值为 false。设置为 true 时允许在运行时根据多数据源自动识别对应方言的分页 不支持自动选择sqlserver2012只能使用sqlserver用法和注意事项参考下面的场景五。9. closeConn默认值为 true。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时会自动获取一个数据库连接 通过该属性来设置是否关闭获取的这个连接默认true关闭设置为 false 后不会关闭获取的连接这个参数的设置要根据自己选择的数据源来决定。3 导入依赖
dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion1.3.0/version
/dependency4 application.properties 配置文件 – 小改
// 分页插件
// 当前页总条数为0时查询所有相当于没有执行分页查询但是返回结果仍然是 Page 类型
pagehelper.page-size-zerotrue
// 合理化配置 pageNum0 时会查询第一页 pageNumpages超过总数时会查询最后一页
pagehelper.reasonabletrue5 PageInfo对象属性
// 总条数和每页显示的数据在PageSerializable中
public class PageInfoT extends PageSerializableT {public static final int DEFAULT_NAVIGATE_PAGES 8;//当前页private int pageNum;//每页的数量private int pageSize;//当前页的数量private int size;//由于startRow和endRow不常用这里说个具体的用法//可以在页面中显示startRow到endRow 共size条数据//当前页面第一个元素在数据库中的行号private long startRow;//当前页面最后一个元素在数据库中的行号private long endRow;//总页数private int pages;//前一页private int prePage;//下一页private int nextPage;//是否为第一页private boolean isFirstPage false;//是否为最后一页private boolean isLastPage false;//是否有前一页private boolean hasPreviousPage false;//是否有下一页private boolean hasNextPage false;//导航页码数private int navigatePages;//所有导航页号private int[] navigatepageNums;//导航条上的第一页private int navigateFirstPage;//导航条上的最后一页private int navigateLastPage;......
}// 父方法
public class PageSerializableT implements Serializable {private static final long serialVersionUID 1L;//总记录数protected long total;//结果集protected ListT list;......
}6 使用pagehelper 修改返回对象的类型将原PageResult修改为Pagelnfo可选中需修改的对象类型通过ctrl1组合键中的Make query return ‘com.github.pagehelper.Pagelnfocn.tj.domain.Department’ 选项进行修改同时对应的 query 方法的接口实现类返回类型都会变成Pagelnfo
// controller层Autowiredprivate IDepartmentService departmentService;// 处理部门查询所有方法RequestMapping(/list)public String list(Model model, QueryObject qo){PageInfoDepartment pageInfo departmentService.query(qo);model.addAttribute(pageInfo,pageInfo);return department/list;}// service接口PageInfoDepartment query(QueryObject qo);
// service实现类Overridepublic PageInfoDepartment query(QueryObject qo) {// 用的技术是线程变量数据共享 controller service mapper都可以用一条线程// 告诉PageHelper当前页 每页显示条数后 PageHelper就会将这两个数据存入线程局部变量中// 传当前页 每页显示条数PageHelper.startPage(qo.getCurrentPage(),qo.getPageSize());return new PageInfo(departmentMapper.selectForList(qo));}// mapper接口
ListDepartment selectForList(QueryObject qo);
// xml 将limit删掉 此时线程变量中有当前页和每页总数 底层会自动计算出起始页
// service层调用了selectForListpagehelper底层会自动截取select 后from 前的字段替换成count(0)进行计算总页数
// 再根据不同数据库的分页技术进行分页而分页所需的数据都在线程中存在所以limit不需要再写了
select idselectForList resultMapBaseResultMapselect id, name, snfrom department
/select// 前端调用
table classtable table-hover table-bordered table-stripedtheadtrth编号/thth部门名称/thth部门编号/thth操作/th/tr/theadtbodytr th:eachdepartment,start:${pageInfo.list}td th:text${start.count}1/tdtd th:text${department.name}保安部/tdtd th:text${department.sn}BA/tdtda href# classbtn btn-info btn-xs btn-inputspan classglyphicon glyphicon-pencil/span 编辑/aa classbtn btn-danger btn-xs btn-deletespan classglyphicon glyphicon-trash/span 删除/a/td/tr/tbody
/table7 twbs-pagination 前端分页插件 twbs-pagination简单的自适应 Bootstrap 样式的分页插件用于前端绘制分页相关的样式效果。
!--导入引用--
script src/static/js/plugins/twbsPagination/jquery.twbsPagination.min.js/script!--编写ul--
ul idpagination-demo classpagination-sm/ul!--编写jq 此时后台已经将总页数传递到前端了--
$(#pagination-demo).twbsPagination({!--总页数应通过Thymeleaf获取到后端传递的值--!--pages是PageInfo对象中的属性--totalPages: [[${pageInfo.pages}]],!--显示哪一个当前页 pageNum是PageInfo对象中的属性--!--startPage是前端插件中的属性 默认值为1--startPage:[[${pageInfo.pageNum}]],first:首页,prev:上一页,next:下一页,last:尾页,!--显示页数7--visiblePages: 7,!--当不知道传递的参数是何值时可通过console.log(event)进行查看event是事件源对象page是去第几页--onPageClick: function (event, page) {!--更改表单currentPage的value值--$(#currentPage).val(page);!--更改当前页的值后提交对应表单--$(#searchForm).submit();}});