制作一个网站首页,大学生兼职网站开发毕设论文,国外自助建站免费建站平台,网站服务合同用交印花税吗基于Mybatis#xff0c;MybatisPlus实现数据库查询分页功能 目录 基于Mybatis#xff0c;MybatisPlus实现数据库查询分页功能使用Mybatis插件实现分页数据库准备分页插件配置和使用常用数据#xff1a; 使用MybatisPlus插件实现分页数据库准备分页插件配置和使用自定义分页查…基于MybatisMybatisPlus实现数据库查询分页功能 目录 基于MybatisMybatisPlus实现数据库查询分页功能使用Mybatis插件实现分页数据库准备分页插件配置和使用常用数据 使用MybatisPlus插件实现分页数据库准备分页插件配置和使用自定义分页查询 总结 在实际项目开发过程中分页查询功能用的还是比较多的自己也写过不少但每次写也都要翻一些资料故自行整理一篇以备查看 使用Mybatis插件实现分页
使用pagehelper插件实现分页功能
数据库准备
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS 0;-- ----------------------------
-- Table structure for t_emp
-- ----------------------------
DROP TABLE IF EXISTS t_emp;
CREATE TABLE t_emp (eid int(11) NOT NULL AUTO_INCREMENT,emp_name varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,age int(11) NULL DEFAULT NULL,sex char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,email varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,did int(11) NULL DEFAULT NULL,PRIMARY KEY (eid) USING BTREE
) ENGINE InnoDB AUTO_INCREMENT 53 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT Dynamic;-- ----------------------------
-- Records of t_emp
-- ----------------------------
INSERT INTO t_emp VALUES (1, 张三, 23, 男, 123qq.com, 1);
INSERT INTO t_emp VALUES (2, 李四, 43, 女, 123qq.com, 2);
INSERT INTO t_emp VALUES (3, 王五, 12, 女, 123qq.com, 3);
INSERT INTO t_emp VALUES (4, 赵六, 54, 男, 123qq.com, 1);
INSERT INTO t_emp VALUES (5, 田七, 23, 男, 123qq.com, 2);
INSERT INTO t_emp VALUES (11, a, NULL, NULL, NULL, NULL);
INSERT INTO t_emp VALUES (12, a, NULL, NULL, NULL, NULL);
INSERT INTO t_emp VALUES (13, a1, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (14, a2, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (15, a3, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (16, a1, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (17, a2, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (18, a3, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (19, a1, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (20, a2, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (21, a3, 23, 男, 123qq.com, NULL);
INSERT INTO t_emp VALUES (22, a, NULL, NULL, NULL, NULL);
INSERT INTO t_emp VALUES (23, a, NULL, NULL, NULL, NULL);
INSERT INTO t_emp VALUES (24, a, NULL, NULL, NULL, NULL);SET FOREIGN_KEY_CHECKS 1;分页插件配置和使用
1、添加pom依赖
!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --
dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.2.0/version
/dependency2、在MyBatis的核心配置文件mybatis-config.xml中配置插件
该插件就是一种拦截器给查询添加Limit限制 plugins!--设置分页插件--plugin interceptorcom.github.pagehelper.PageInterceptor/plugin/plugins!--设置连接数据库的环境--environments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLED
!-- property namedriver valuecom.mysql.jdbc.Driver/--property namedriver value${jdbc.driver}/
!-- property nameurl valuejdbc:mysql://localhost:3306/mybatis/--property nameurl value${jdbc.url}/property nameusername value${jdbc.username}/property namepassword value${jdbc.password}//dataSource/environment/environments3、创建测试方法测试功能 Testpublic void testPage() {SqlSession sqlSession null;try {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);sqlSession sqlSessionFactory.openSession(true);EmpMapper mapper sqlSession.getMapper(EmpMapper.class);// pageNum5, pageSize4, 表示第五页每页四条数据PageHelper.startPage(5, 4);ListEmp list mapper.selectAll();PageInfoEmp page new PageInfo(list,5);list.forEach(emp - System.out.println(emp));System.out.println(page);} catch (IOException e) {e.printStackTrace();}}4、结果
PageInfo{pageNum5, pageSize4, size4, startRow17, endRow20, total47, pages12, listPage{counttrue, pageNum5, pageSize4, startRow16, endRow20, total47, pages12, reasonablefalse, pageSizeZerofalse}[Emp{eid22, empNamea, agenull, sexnull, emailnull, didnull}, Emp{eid23, empNamea, agenull, sexnull, emailnull, didnull}, Emp{eid24, empNamea, agenull, sexnull, emailnull, didnull}, Emp{eid25, empNamea, agenull, sexnull, emailnull, didnull}], prePage4, nextPage6, isFirstPagefalse, isLastPagefalse, hasPreviousPagetrue, hasNextPagetrue, navigatePages5, navigateFirstPage3, navigateLastPage7, navigatepageNums[3, 4, 5, 6, 7]}常用数据
pageNum当前页的页码pageSize每页显示的条数size当前页显示的真实条数total总记录数pages总页数prePage上一页的页码nextPage下一页的页码isFirstPage/isLastPage是否为第一页/最后一页hasPreviousPage/hasNextPage是否存在上一页/下一页navigatePages导航分页的页码数navigatepageNums导航分页的页码[1,2,3,4,5]
使用MybatisPlus插件实现分页
可见上述Mybatis基于xml配置的方式实现分页还是有些麻烦的。MybatisPlus是对Mybatis的进一步封装和加强因此分页功能会比Mybatis更便捷。测试的SpringBoot目录结构如下
数据库准备
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS user;
CREATE TABLE user (id bigint(20) NOT NULL COMMENT 主键ID,name varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 姓名,age int(11) NULL DEFAULT NULL COMMENT 年龄,email varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 邮箱,PRIMARY KEY (id) USING BTREE
) ENGINE InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT Dynamic;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO user VALUES (1, Jone, 18, test1baomidou.com);
INSERT INTO user VALUES (2, Jack, 20, test2baomidou.com);
INSERT INTO user VALUES (3, Tom, 28, test3baomidou.com);
INSERT INTO user VALUES (4, Sandy, 21, test4baomidou.com);
INSERT INTO user VALUES (5, Billie, 24, test5baomidou.com);SET FOREIGN_KEY_CHECKS 1;
分页插件配置和使用
1、配置分页插件
Configuration
// 扫描mapper接口所在的包
MapperScan(com.mystudy.mybatisplus.mapper)
public class MyBatisPlusConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){// 分页插件配置MybatisPlusInterceptor mybatisPlusInterceptor new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return mybatisPlusInterceptor;}}2、创建mapper文件
Repository
public interface UserMapper extends BaseMapperUser {}这里什么也不需要写继承BaseMapper类即可MybatisPlus提供了默认方法 3、创建测试方法测试功能
SpringBootTest
public class PluginsTest {Autowiredprivate UserMapper userMapper;Testpublic void testPage(){// 设置当前页和每页显示的条数即第一页每页三个因此会将前三条记录查出PageUser page new Page(1, 3);userMapper.selectPage(page, null);System.out.println();System.out.println(page.getRecords());System.out.println(page.getTotal());System.out.println(page.getPages());System.out.println(page.hasNext());System.out.println(page.hasPrevious());}}4、查询结果
[User(id1, nameJone, age18, emailtest1baomidou.com), User(id2, nameJack, age20, emailtest2baomidou.com), User(id3, nameTom, age28, emailtest3baomidou.com)]
5
2
true
false自定义分页查询
1、自定义查询条件 自定义分页功能通过年龄查询用户信息并分页 Repository
public interface UserMapper extends BaseMapperUser {/*** 自定义分页功能通过年龄查询用户信息并分页* param page MybatisPlus提供的分页对象必须位于第一个参数的位置* param age* return*/PageUser selectPageVo(Param(page) PageUser page, Param(age) Integer age);}2、创建xml映射文件与Mybatis方式相同
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.mystudy.mybatisplus.mapper.UserMapper!-- PageUser selectPageVo(Param(page) PageUser page, Param(age) Integer age);--select idselectPageVo resultTypeUserselect id, name, age, email from user where age #{age}/select/mapper这里可以对User进行别名配置在yml配置文件中
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 配置类型别名所对应的包type-aliases-package: com.mystudy.mybatisplus.pojo可以看到我们并没有在sql语句中写关于分页的信息
3、创建测试方法测试功能 Testpublic void testPageVo(){PageUser page new Page(1, 3);userMapper.selectPageVo(page, 20);System.out.println();System.out.println(page.getRecords());System.out.println(page.getTotal());System.out.println(page.getPages());System.out.println(page.hasNext());System.out.println(page.hasPrevious());}4、查询结果
[User(id3, nameTom, age28, emailtest3baomidou.com), User(id4, nameSandy, age21, emailtest4baomidou.com), User(id5, nameBillie, age24, emailtest5baomidou.com)]
3
1
false
false
总结
在真正项目开发中分页功能是必不可少的需要前端向后端传输page和pageSize两个参数我们这里的功能仅作演示因此是写死的。熟能生巧多用多会。