经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTMLCSS » HTML5 » 查看文章
java使用插件pagehelper在mybatis中实现分页查询
来源:cnblogs  作者:黄浩#  时间:2018/9/25 20:05:43  对本文有异议

摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件

PageHelper是国内牛人的一个开源项目,有兴趣的可以去看源码,都有中文注释

开源项目地址: https://pagehelper.github.io/

 

请求URL:http://localhost:8080/listCity?page=1&limit=10

显示数据:

 

1、PageHelper的maven依赖及插件配置

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

PageHelper除了本身的jar包外,它还依赖了一个叫jsqlparser的jar包,使用时,我们不需要单独指定jsqlparser的maven依赖,maven的间接依赖会帮我们引入。

2、配置拦截器插件

这个是配置在mybatis-config.xml文件中

文档中的示例

  1. <!--
  2. plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
  3. properties?, settings?,
  4. typeAliases?, typeHandlers?,
  5. objectFactory?,objectWrapperFactory?,
  6. plugins?,
  7. environments?, databaseIdProvider?, mappers?
  8. -->
  9. <plugins>
  10. <!-- com.github.pagehelper为PageHelper类所在包名 -->
  11. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  12. <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
  13. <property name="param1" value="value1"/>
  14. </plugin>
  15. </plugins>

3、我的配置mybatis-config.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4.  
  5. <configuration>
  6. <typeAliases>
  7. <package name="edu.nf.entity"/>
  8. </typeAliases>
  9. <!-- 配置分页插件 -->
  10. <plugins>
  11. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  12. <!--helperDialect 方言:就表示此插件针对哪个数据库进行优化处理
  13. 这个方言可以不配置,因为此插件可以依据你的 url 的信息来推断出
  14. 你用的数据库是哪一个
  15. -->
  16. <property name="helperDialect" value="mysql"/>
  17. <!--分页合理化参数-->
  18. <property name="reasonable" value="true"/>
  19. </plugin>
  20. </plugins>
  21. <!--配置数据库-->
  22. <environments default="mysql">
  23. <environment id="mysql">
  24. <transactionManager type="JDBC"/>
  25. <dataSource type="POOLED">
  26. <property name="driver" value="com.mysql.jdbc.Driver"/>
  27. <property name="url" value="jdbc:mysql://localhost:3306/citydb?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
  28. <property name="username" value="root"/>
  29. <property name="password" value="root"/>
  30. </dataSource>
  31. </environment>
  32. </environments>
  33.  
  34. <mappers>
  35. <mapper resource="mapper/city-mapper.xml"/>
  36. </mappers>
  37. </configuration>

 

 

4、city-mapper.xml 数据库查询语句配置:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="edu.nf.dao.CityDao">
  5. <resultMap id="cityMap" type="city" >
  6. <id property="cityId" column="city_id"/>
  7. <result property="cityEn" column="city_en"/>
  8. <result property="cityCn" column="city_cn"/>
  9. <result property="countryCode" column="country_code"/>
  10. <result property="countryEn" column="country_en"/>
  11. <result property="countryCn" column="country_cn"/>
  12. <result property="provinceEn" column="province_en"/>
  13. <result property="provinceCn" column="province_cn"/>
  14. </resultMap>
  15. <!-- 这里写查询全部数据,配置好的分页插件他会自己加上limit 查询语句后面不能加; -->
  16. <select id="listCity" resultMap="cityMap">
  17. select * from city_test
  18. </select>
  19. <delete id="deleteCity" parameterType="java.util.List">
  20. delete from city_test where city_id in
  21. <foreach collection="list" item="city" open="(" separator="," close=")">
  22. #{city.cityId}
  23. </foreach>
  24. </delete>
  25. </mapper>
View Code

5、后台分页查询 servlet:

 

  1. /**
  2. * @author hh
  3. * @Date 2018/9/15
  4. */
  5. @WebServlet("/listCity")
  6. public class CityListServlet extends HttpServlet {
  7. @Override
  8. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  9. resp.setContentType("application/json;charset=utf-8");
  10. //取出前端请求参数
  11. String page=req.getParameter("page");
  12. String limit=req.getParameter("limit");
  13. //分页查询结果 page页数 limit显示行数
  14. List<City> listCity=new CityService().listCity(page,limit);
  15. // 包装Page对象 listCity:page结果 , navigatePages: 页码数量
  16. PageInfo<City> list=new PageInfo<>(listCity,1);
  17. //自己写的一个响应视图类,因为前端用的是layui框架需要自己,所以自己定义ResponseView
  18. ResponseView vo=new ResponseView();
  19. //设值 取出总数据行
  20. vo.setCount(list.getTotal());
  21. //设值 查询的结果
  22. vo.setData(list.getList());
  23. //响应前端
  24. resp.getWriter().print(new Gson().toJson(vo));
  25. }
  26. }

 

 

 

6、响应视图类 ResponseView (因为前端用的是layui框架需要自己,所以自己定义ResponseView):

  1. package edu.nf.vo;
  2. /**
  3. * @author hh
  4. * @Date 2018/9/15
  5. */
  6. public class ResponseView {
  7. private int code =0;
  8. private Long count=0L;
  9. private Object data;
  10. public Integer getCode() {
  11. return code;
  12. }
  13. public void setCode(Integer code) {
  14. this.code = code;
  15. }
  16. public Long getCount() {
  17. return count;
  18. }
  19. public void setCount(Long count) {
  20. this.count = count;
  21. }
  22. public Object getData() {
  23. return data;
  24. }
  25. public void setData(Object data) {
  26. this.data = data;
  27. }
  28. }
View Code

7、实体类 City:

  1. package edu.nf.entity;
  2. /**
  3. * @author hh
  4. * @Date 2018/9/14
  5. */
  6. public class City {
  7. private String cityId;
  8. private String cityEn;
  9. private String cityCn;
  10. private String countryCode;
  11. private String countryEn;
  12. private String countryCn;
  13. private String provinceEn;
  14. private String provinceCn;
  15. public String getCityId() {
  16. return cityId;
  17. }
  18. public void setCityId(String cityId) {
  19. this.cityId = cityId;
  20. }
  21. public String getCityEn() {
  22. return cityEn;
  23. }
  24. public void setCityEn(String cityEn) {
  25. this.cityEn = cityEn;
  26. }
  27. public String getCityCn() {
  28. return cityCn;
  29. }
  30. public void setCityCn(String cityCn) {
  31. this.cityCn = cityCn;
  32. }
  33. public String getCountryCode() {
  34. return countryCode;
  35. }
  36. public void setCountryCode(String countryCode) {
  37. this.countryCode = countryCode;
  38. }
  39. public String getCountryEn() {
  40. return countryEn;
  41. }
  42. public void setCountryEn(String countryEn) {
  43. this.countryEn = countryEn;
  44. }
  45. public String getCountryCn() {
  46. return countryCn;
  47. }
  48. public void setCountryCn(String countryCn) {
  49. this.countryCn = countryCn;
  50. }
  51. public String getProvinceEn() {
  52. return provinceEn;
  53. }
  54. public void setProvinceEn(String provinceEn) {
  55. this.provinceEn = provinceEn;
  56. }
  57. public String getProvinceCn() {
  58. return provinceCn;
  59. }
  60. public void setProvinceCn(String provinceCn) {
  61. this.provinceCn = provinceCn;
  62. }
  63. }
View Code

8、service 逻辑业务层(CityService):

  1. /**
  2. * @author hh
  3. * @Date 2018/9/15
  4. */
  5. public class CityService {
  6. /**
  7. * 分页查询 城市信息集合
  8. * @return
  9. */
  10. public List<City> listCity(String offest,String pageSize){
  11. //类型转换
  12. Integer pnum=Integer.valueOf(offest);
  13. Integer psize=Integer.valueOf(pageSize);
  14. //调用PageHelper获取第1页,10条内容,默认查询总数count
  15. PageHelper.startPage(pnum,psize);
  16. //调用CityDaoImpl 分页查询
  17. return new CityDaoImpl().listCity();
  18. }
  19. /**
  20. * 批量删除
  21. * @param cityData
  22. * @return
  23. */
  24. public int deleteCity(String cityData){
  25. List<City> list=new Gson().fromJson(cityData,new TypeToken<List<City>>(){}.getType());
  26. try {
  27. new CityDaoImpl().deleteCity(list);
  28. return 200;
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. return 403;
  32. }
  33. }
  34. }

 

9、Dao 接口类:

  1. /**
  2. * @author hh
  3. * @Date 2018/9/14
  4. */
  5. public interface CityDao {
  6. /**
  7. * 城市信息列表
  8. * @return
  9. */
  10. List<City> listCity();
  11. /**
  12. * 批量删除
  13. * @param listCity
  14. */
  15. void deleteCity(List<City> listCity);
  16. }

 

10、Dao实现类:

  1. /**
  2. * @author hh
  3. * @Date 2018/9/14
  4. */
  5. public class CityDaoImpl implements CityDao {
  6. @Override
  7. public List<City> listCity() {
  8. List<City> list=null;
  9. try(SqlSession sqlSession = MybatisUtil.getSqlSession()){
  10. CityDao cityDao=sqlSession.getMapper(CityDao.class);
  11. list=cityDao.listCity();
  12. }
  13. return list;
  14. }
  15. @Override
  16. public void deleteCity(List<City> listCity) {
  17. try(SqlSession sqlSession = MybatisUtil.getSqlSession()){
  18. CityDao cityDao=sqlSession.getMapper(CityDao.class);
  19. cityDao.deleteCity(listCity);
  20. }
  21. }
  22. }

 

 我的项目案例(包括了上一篇博客的分页查询):点我下载

项目结构:

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号