今天来跟大家分享一下MyBatis的分页插件。
MyBatis的一个分页插件叫PageHelper,虽然没有那么的强大(我在最后会说明它的缺点),但还是挺不错的。
我们知道,在mysql中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的。但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了。
可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了。在介绍如何使用这个分页插件之前,先介绍一下mybatis中的插件是如何工作的:
![dfb5489924f6adf017b0685e23c2b239.png](https://i-blog.csdnimg.cn/blog_migrate/ae0e0271b84bbc6bdaedb3f111732ad4.jpeg)
从图中可以看出,mybatis中首先要在配置文件中配置一些东西,然后根据这些配置去创建一个会话工厂,再根据会话工厂创建会话,会话发出操作数据库的sql语句,然后通过执行器操作数据,再使用mappedStatement对数据进行封装,这就是整个mybatis框架的执行情况。
那么mybatis的插件作用在哪一环节呢?它主要作用在Executor执行器与mappedeStatement之间,也就是说mybatis可以在插件中获得要执行的sql语句,在sql语句中添加limit语句,然后再去对sql进行封装,从而可以实现分页处理。
搞清楚了分页插件的执行情况,下面来总结下mybatis中PageHelper的使用。
1. 引入依赖
![e38a33ab62b444c2ac50bad175b190ed.png](https://i-blog.csdnimg.cn/blog_migrate/82d61d46237affbc03e317af8ba1852d.jpeg)
2. SqlMapConfig.xml配置插件
![2e0b8b94f433abfb4bb2187c395629e9.png](https://i-blog.csdnimg.cn/blog_migrate/573111401107e7424dc58635a27ec4f2.jpeg)
3. 完成分页功能
在查询的sql语句执行之前,添加一行代码PageHelper.startPage(1, 10);第一个参数表示第几页,第二个参数表示每页显示的记录数。这样在执行sql后就会将记录按照语句中设置的那样进行分页。如果需要获取总记录数的话,需要PageInfo类的对象,这个对象可以获取总记录数,下面看下测试的代码。
![636b2aa5332d96cb45102524c51cf05f.png](https://i-blog.csdnimg.cn/blog_migrate/92271b0f20f5e658933df8a0c8016dba.jpeg)
看下执行的结果:
![dccfefc82c6af0a3aadb94af4b78a8f1.png](https://i-blog.csdnimg.cn/blog_migrate/a708394cb83fed478dbb9f5bcf3e1999.jpeg)
可以看到,只显示出了10条数据,但是我总共有3096条数据,如果将参数改成(2,10),那么就会显示第二页不同的10条数据,在这就不测试了。这说明PageHelper插件可以帮助我们实现分页功能,例如EasyUI中就会传到后台分页参数信息,后台就可以根据参数获取分页数据等等。
正如前面所说,这个PageHelper其实也有缺点,因为它对逆向工程生成的代码支持不好,不能对有查询条件的查询分页,会抛异常,上面是无条件查询的。
当然,我们自己可以修改这个PageHelper插件,使其支持条件查询,当然,我是修改不了的……网上有修改过后的PageHelper插件,可以支持条件查询,相对来说就比较强大了,可以在自己的工程中依赖修改过后的分页插件进行开发。
学习相关推荐(编程必备辅助):
①:搜索关注公众号“只会写BUG”,分享更多干货知识,资讯,教程等
②:海量编程类资料零基础到高级亟待领取!!!
如果觉得对你有一丢丢帮助,麻烦动动你的小手指【关注】一下上面的公众号吧,或者【转发】让更多人看到该文章。大家也可积极后台给我留言,多多交流,共同进步。