使用Mybatis实现分页效果示例

 更新时间:2021年12月07日 15:32:36   作者:丹哥大弟子  
大家好,本篇文章主要讲的是使用Mybatis实现分页效果示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

一、创建分页的工具类PageUti,存储分页所需要的五个数据:pageIndex(当前页码),pageSize(每页记录条数),count(总记录数),pageNum(总页数),list(每一页的内容)。

/**
 * @param <T> 泛型类
 */
public class PageUtil<T> {
    //当前页码
    private int pageIndex;
    //每页记录数
    private int pageSize;
    //总记录数
    private int count;
    //总页数
    private int pageNum;
    //每一页的内容
    private List<T> list;
}

二、xml文件:MySQL对分页的支持是通过limit子句。

如:

# 每页10条记录,取第一页,返回的是前10条记录 

select * from books limit (1-1)*10,10;

# 每页10条记录,取第二页,返回的是第11条记录,到第20条记录, 

select * from books limit (2-1)*10,10; 

所以:limit的第一个参数=(当前页码-1)*每页记录数

<!--分页,查询当前页的内容-->
    <select id="getBooksPage" resultType="list" parameterType="map">
        select * from books limit #{pageIndex},#{pageSize}
    </select>
<!--查询总记录数-->
    <select id="getCount" resultType="int" parameterType="map">
        select count(*) from books
</select>

三、BooksServiceImpl.java:将limit需要的两个参数存入map集合中,再将分页所需要的五个数据封装。

public PageUtil<Books> getBooksPage(int pageIndex, int pageSize) {
        PageUtil<Books> pageUtil=new PageUtil<>();
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        try {
            //booksMapper是使用动态代理模式,运行反射机制,创建的一个代理对象
            BooksMapper booksMapper=sqlSession.getMapper(BooksMapper.class);
            Map map=new HashMap();
            int row=booksMapper.getCount(map);
            //计算总页数
            int pageCount= (int) Math.ceil((double) row / pageSize);
            //limit的第一个参数=(当前页码-1)*每页记录数
            map.put("pageIndex",(pageIndex - 1) * pageSize);
            map.put("pageSize", pageSize);
            List<Books> list=booksMapper.getBooksPage(map);
            //将数据封装
            pageUtil.setPageIndex(pageIndex);
            pageUtil.setPageSize(pageSize);
            pageUtil.setCount(row);
            pageUtil.setPageNum(pageCount);
            pageUtil.setList(list);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
        return pageUtil;
    }

四、servlet:

protected void getBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if(request.getParameter("pageIndex")!=null) {
            int pageIndex=Integer.parseInt(request.getParameter("pageIndex"));
            show(response,pageIndex,search);
        }else {
            show(response);
        }
 
    }
private void show(HttpServletResponse response,Object ...ages) throws IOException {
        int pageIndex = 1;//默认第一页
        if(ages.length>0){
            pageIndex=(int)ages[0];
        }
        PageUtil pageUtil=new PageUtil();
        //每页10条数据
        pageUtil=new BooksServiceImpl().getBooksPage(pageIndex,10);
        String js= JSON.toJSONString(pageUtil);
        PrintWriter pw=response.getWriter();
        pw.write(js);
    }

五、前段页面

显示分页:

var page = "<li>共" + data.count + "条,共" + data.pageNum + "页,当前第" + data.pageIndex + "页</li>";
            page += "<li><a href='#' onclick='myPage(1)'>首页</a></li>";
 
            if (data.pageIndex == 1) {
                page += "<li><a href='#' onclick='myPage(1)'>上一页</a></li>";
            } else {
                page += "<li><a  href='#'  onclick='myPage(" + (data.pageIndex - 1) + ")'>上一页</a></li>";
            }
            // for (var i = 1; i <= data.pageNum; i++) {
            //     page += "<a href='#' onclick='myPage(" + i + ")'>" + i + "</a>"
            // }
            if (data.pageIndex < data.pageNum) {
                page += "<li><a href='#' onclick='myPage(" + (data.pageIndex + 1) + ")'>下一页</a></li>";
            } else {
                page += "<li><a href='#' onclick='myPage(" + data.pageNum + ")'>下一页</a></li>";
            }
            page += "<li><a href='#' onclick='myPage(" + data.pageNum + ")'>末页</a></li>";

点击分页(myPage):通过ajax请求将页码传到servlet

function myPage(index) {
            console.log(index)
            $.getJSON("books/getBooks.do", {"pageIndex": index}, function (data) {
                showBooks(data)
            });
}

六、MybatisUtil.java工具类:向外提供一个方法,可以获取SqlSession对象

public class MybatisUtil {
    static SqlSessionFactory sqlSessionFactory;
 
    // 加载主配置文件,并创建 sqlSessionFactory
    static {
        String resource = "com/xmx/config/mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
 
    /**
     * @Description: 向外提供一个方法,可以获取SqlSession对象
     * @Return: org.apache.ibatis.session.SqlSession
     */
    public static SqlSession getSqlSession() {
//        return sqlSessionFactory.openSession(true);
        return sqlSessionFactory.openSession();
    }
}

到此这篇关于使用Mybatis实现分页效果示例的文章就介绍到这了,更多相关Mybites实现分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Jenkins Host key verification failed问题解决

    Jenkins Host key verification failed问题解决

    这篇文章主要介绍了Jenkins Host key verification failed问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java中HTTP GET方法调用带有body的问题解决

    Java中HTTP GET方法调用带有body的问题解决

    这篇文章主要为大家详细介绍了Java如何解决HTTP GET方法调用带有body的问题,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2024-02-02
  • java中synchronized关键字的3种写法实例

    java中synchronized关键字的3种写法实例

    synchronized是Java中的关键字,是一种同步锁,下面这篇文章主要给大家介绍了关于java中synchronized关键字的3种写法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • 解决druid监控页面SQL不显示的问题

    解决druid监控页面SQL不显示的问题

    这篇文章主要介绍了解决druid监控页面SQL不显示的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java中使用LocalDate根据日期来计算年龄的实现方法

    Java中使用LocalDate根据日期来计算年龄的实现方法

    这篇文章主要介绍了Java中使用LocalDate根据日期来计算年龄的实现方法,需要的朋友可以参考下
    2018-01-01
  • vue+springboot项目上传部署tomcat的方法实现

    vue+springboot项目上传部署tomcat的方法实现

    本文主要介绍了vue+springboot项目上传部署tomcat的方法实现,包括环境准备、配置调整以及部署步骤,文中通过图文及示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 详解Java并发编程之内置锁(synchronized)

    详解Java并发编程之内置锁(synchronized)

    这篇文章主要介绍了Java并发编程之内置锁(synchronized)的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java文件上传技术深入剖析

    java文件上传技术深入剖析

    这篇文章主要为大家详细介绍了java文件上传技术深入剖析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • java中有关构造方法中的输出

    java中有关构造方法中的输出

    这篇文章主要介绍了java中有关构造方法中的输出,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java多线程下载文件实现案例详解

    Java多线程下载文件实现案例详解

    这篇文章主要介绍了Java多线程下载文件实现案例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论