小言_互联网的博客

Mybatis 分页插件使用

255人阅读  评论(0)

1、分页插件的使用步骤

需求分析:

我们在前端界面获取用户表的时候,在界面上一次显示出成百上千条数据,用户体验,软件性能都会很糟糕,假设数据库内存储十万条记录,后端一次性返回这么多数据,前端和测试小姐姐会杀了你的。

那么,我们就考虑一次查询,返回可以接收的一组记录数,你好,我好,大家好。

这时候,最好的解决方案,就是分页查询

1.1 添加依赖


  
  1. <dependency>
  2. <groupId>com.github.pagehelper </groupId>
  3. <artifactId>pagehelper </artifactId>
  4. <version>5.2.0 </version>
  5. </dependency>

1.2 配置分页插件

在MyBatis的核心配置文件中配置插件


  
  1. <plugins>
  2. <!--设置分页插件-->
  3. <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin>
  4. </plugins>

1.3 分页插件的使用:

我们运用动态Sql 给t_user 表中插入100条数据


  
  1. /**
  2. * 利用动态sql 批量插入数据
  3. */
  4. int insertBatch (@Param("users") List<User> users);

 


  
  1. <!-- int insertBatch(List<User> users);-->
  2. <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
  3. insert into t_user values
  4. <foreach collection="users" item="user" separator=",">
  5. (null,#{user.userName},#{user.passWord},#{user.age},#{user.gender},#{user.email})
  6. </foreach>
  7. </insert>

  
  1. @Test
  2. public void testInsertBatch (){
  3. UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
  4. List<User> users = new ArrayList<>();
  5. for( int i= 0;i< 100;i++){
  6. User user = new User( "user"+i //username
  7. , UUID.randomUUID().toString().substring( 0, 6) // password
  8. ,i //age
  9. ,i% 2== 0? "男": "女" //gender
  10. ,i+ "@gmail.com"); //email
  11. users.add(user);
  12. }
  13. int i = mapper.insertBatch(users);
  14. System.out.println( "添加了 "+i+ " 行记录");
  15. }
  16. /**
  17. * 测试密码生成器
  18. */
  19. @Test
  20. public void testRandom (){
  21. //方案1
  22. String str = UUID.randomUUID().toString().substring( 0, 7);
  23. System.out.println(str);
  24. //方案2
  25. String source = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  26. Random random = new Random();
  27. StringBuffer flag = new StringBuffer();
  28. for( int j= 0;j< 6;j++){
  29. flag.append(source.charAt(random.nextInt( 62))); //随机数产生10以内的任何一个数字,代表stringbuff下标
  30. }
  31. System.out.println(flag.toString());
  32. }
  33. /**
  34. * 分页测试
  35. */
  36. @Test
  37. public void testLimitPages (){
  38. UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
  39. PageHelper.startPage( 2, 10);
  40. List<User> users = mapper.getUserLimitPage();
  41. System.out.println(users);
  42. PageInfo<User> pageInfo = new PageInfo<>(users, 5);
  43. System.out.println(pageInfo);
  44. }
  45. }

 

数据库插入成功

 

分页查询测试:


  
  1. /**
  2. * 分页查询
  3. * 你也可以根据条件去查询
  4. */
  5. List<User> getUserLimitPage ();

  
  1. <!-- 分页查询-->
  2. <!-- getUserLimitPage-->
  3. <select id="getUserLimitPage" resultMap="userMap">
  4. select * from t_user
  5. </select>


  
  1. /**
  2. * 分页测试
  3. */
  4. @Test
  5. public void testLimitPages (){
  6. UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
  7. PageHelper.startPage( 2, 10);
  8. List<User> users = mapper.getUserLimitPage();
  9. System.out.println(users);
  10. PageInfo<User> pageInfo = new PageInfo<>(users, 5);
  11. System.out.println(pageInfo);
  12. }

测试结果:

Page{count=true, pageNum=2, pageSize=10, startRow=10, endRow=20, total=103, pages=11, reasonable=false, pageSizeZero=false}[User{ id=14, userName='user7', passWord='47a047', age=7, gender='女', email='7@gmail.com'}, User{id=15, userName='user8', passWord='20fc70', age=8, gender='男', email='8@gmail.com'}, User{id=16, userName='user9', passWord='1b59a2', age=9, gender='女', email='9@gmail.com'}, User{id=17, userName='user10', passWord='05555b', age=10, gender='男', email='10@gmail.com'}, User{id=18, userName='user11', passWord='8c89f5', age=11, gender='女', email='11@gmail.com'}, User{id=19, userName='user12', passWord='721c69', age=12, gender='男', email='12@gmail.com'}, User{id=20, userName='user13', passWord='d1ce22', age=13, gender='女', email='13@gmail.com'}, User{id=21, userName='user14', passWord='3d47e2', age=14, gender='男', email='14@gmail.com'}, User{id=22, userName='user15', passWord='7f7e24', age=15, gender='女', email='15@gmail.com'}, User{ id=23, userName='user16', passWord='b877be', age=16, gender='男', email='16@gmail.com'}]


PageInfo{pageNum=2, pageSize=10, size=10, startRow=11, endRow=20, total=103, pages=11, list=Page{count=true, pageNum=2, pageSize=10, startRow=10, endRow=20, total=103, pages=11, reasonable=false, pageSizeZero=false}[User{id=14, userName='user7', passWord='47a047', age=7, gender='女', email='7@gmail.com'}, User{id=15, userName='user8', passWord='20fc70', age=8, gender='男', email='8@gmail.com'}, User{id=16, userName='user9', passWord='1b59a2', age=9, gender='女', email='9@gmail.com'}, User{id=17, userName='user10', passWord='05555b', age=10, gender='男', email='10@gmail.com'}, User{id=18, userName='user11', passWord='8c89f5', age=11, gender='女', email='11@gmail.com'}, User{id=19, userName='user12', passWord='721c69', age=12, gender='男', email='12@gmail.com'}, User{id=20, userName='user13', passWord='d1ce22', age=13, gender='女', email='13@gmail.com'}, User{id=21, userName='user14', passWord='3d47e2', age=14, gender='男', email='14@gmail.com'}, User{id=22, userName='user15', passWord='7f7e24', age=15, gender='女', email='15@gmail.com'}, User{id=23, userName='user16', passWord='b877be', age=16, gender='男', email='16@gmail.com'}], prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=5, navigateFirstPage=1, navigateLastPage=5, navigatepageNums=[1, 2, 3, 4, 5]}
 

我们可以看到,当前页码是2,每页显示10条,刚好从第14条开始显示。(起始页码是1 ,注意我的表数据的id ,1后直接就是5)

如果你 pageNum写的是0,它返回一个空的结果集

Page{count=true, pageNum=0, pageSize=10, startRow=0, endRow=0, total=103, pages=11, reasonable=false, pageSizeZero=false}[]

注意事项:

在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能

pageNum:当前页的页码

pageSize:每页显示的条数

在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据

list:分页之后的数据

navigatePages:导航分页的页码数

分页相关数据:

PageInfo{ pageNum=8, pageSize=4, size=2, startRow=29, endRow=30, total=30, pages=8, list=Page{count=true, pageNum=8, pageSize=4, startRow=28, endRow=32, total=30, pages=8, reasonable=false, pageSizeZero=false}, prePage=7, nextPage=0, isFirstPage=false, isLastPage=true, hasPreviousPage=true, hasNextPage=false, navigatePages=5, navigateFirstPage4, navigateLastPage8, navigatepageNums=[4, 5, 6, 7, 8] }

pageNum:当前页的页码

pageSize:每页显示的条数

size:当前页显示的真实条数

total:总记录数

pages:总页数

prePage:上一页的页码

nextPage:下一页的页码

isFirstPage/isLastPage:是否为第一页/最后一页

hasPreviousPage/hasNextPage:是否存在上一页/下一页

navigatePages:导航分页的页码数

navigatepageNums:导航分页的页码,[1,2,3,4,5]

_______________________________________________________________________________________________

git推送到远程仓库的时候(push),容易报 OpenSSL SSL_read: Connection was reset, errno 10054

在本地仓库文件夹下 bash里输入:

git config --global http.sslVerify "false"
 

再不行,就科学上网吧。

代码仓库地址:

GitHub - Chai-Feng/git-demo01


转载:https://blog.csdn.net/Alex_cf/article/details/128765344
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场