使用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实现分页内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MybatisPlus分页排序查询字段带有下划线的坑及解决

    目录 MybatisPlus分页排序查询字段带有下划线 MybatisPlus字段名称有下划线查询为null 原因分析 解决方案 MybatisPlus分页排序查询字段带有下划线 如果使用MybatisPlus的自动转驼峰命名法,分页排序查询的字段带有下划线时,会出问题. page = new Page<>(pageNo, pageSize); OrderItem orderItem = new OrderItem(); orderItem.setColumn("create_dat

  • Mybatis-plus多条件筛选分页的实现

    目录 1. 数据库映射对象与视图对象 2. 测试SQL 3. MVC层分解 3.1 查询参数封装 3.2 Controller层代码 3.3 Service接口层 3.4 ServiceImpl接口实现层 3.5 Mapper数据持久层 4. 结果 5 补充 5.1 分页失效问题 1. 数据库映射对象与视图对象 笔者在开发过程中在面向客户端展示时都是使用二次封装的视图对象(VO)来进行内容展示. package com.fod.fodapi.vo; import lombok.Data; /**

  • TK-MyBatis 分页查询的具体使用

    记 tkMybatis 查询出一个  List集合 该集合已经做好了一层分页Page封装 即查询出的list 使用类型判断 instanceof Page 为true 但是,中途不明白这是一个带分页的集合,把查询出的结果集又做了一层封装 需要返回的对象类型为GoodsCategoryDTO,代码如下:  // 商品集合 List<GoodsCategoryDTO> goodsCategorys = goodsLists.stream().map(x->{ GoodsCategoryDTO

  • 使用Mybatis实现分页效果示例

    一.创建分页的工具类PageUti,存储分页所需要的五个数据:pageIndex(当前页码),pageSize(每页记录条数),count(总记录数),pageNum(总页数),list(每一页的内容). /** * @param <T> 泛型类 */ public class PageUtil<T> { //当前页码 private int pageIndex; //每页记录数 private int pageSize; //总记录数 private int count; //总

  • JS鼠标滚动分页效果示例

    首先先看问题: 在开发的时候,看到这种现象 就会思考:为什么左边的数据出来比右边的慢呢?因为这里没有进行分页,左边的数据多,所以查询相对较慢. 解决办法就是进行分页,但是在项目中用到的插件,不能控制样式,改变分页的宽度,样式就会乱掉.最简单的办法就是不分页(^_^) 但是既然是自己份内的事,为啥不做好呢?那就写分页呗,滚动分页! 问了其他同事,其他同事也...你去百度去.... 是啊,网上一大堆 ,但都是乱七八糟的,也没有效果图...坑 经过一番思考,和百度 思路来了: 需要了解三个dom元素,

  • Flask快速实现分页效果示例

    先上整体效果图: 然后是分页图详情: 与本例相关的路由和模板包括: 路由:views.py @app.route('/blog/list/<int:page>', methods=['GET']) @login_required def blog_list(page=None): ... 模板:blog_list.html和pages.html blog_list.html作为博客页面,pages.html模板为分页页面,呈现时会在blog_list.html中导入pages.html的内容.

  • Laravel框架实现超简单的分页效果示例

    本文实例讲述了Laravel框架实现超简单的分页效果.分享给大家供大家参考,具体如下: 每页展示5条数据 控制器 class indexCo extends Controller { public function cc () { $lists = UserAli:: orderBy('user_id','desc') -> paginate(5); return view('cc',compact('lists')); } } layout/main.blade.php <!DOCTYPE

  • JS分页效果示例

    分页 复制代码 代码如下: <script type="text/javascript" language="javascript" src="js/pager.js"></script> 复制代码 代码如下: /*--------pager-------*/ .number span a{padding:4px 6px;} .number span a:hover{padding:4px 6px; background-

  • SpringBoot+Mybatis分页插件PageHelper实现分页效果

    目录 一.项目结构 二.插件引入 三.代码 四.测试: 最近刚入职新公司,项目是从零开始搭建的项目.我觉得是时候考验是驴还是千里马的时候.都是泪就不多说了. 附上一篇Mybatis常用的分页案例.这次要做的是最常见的分页效果,也是基础功能.但是很多人都做不好的.这次采用Mybatis分页插件PageHelper.   仅献给伸手党的大爷们.大爷们好!拿代码记得扣666!!小的在这给感谢了!! 一.项目结构 按照controller,service,mapper(也叫dao)来建立项目,utils

  • mybatis分页效果实现代码

    本文为大家分享了mybatis分页效果展示的具体代码,供大家参考,具体内容如下 mybatis版本3.4以下 结构: spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org

  • 使用mybatis插件PageHelper实现分页效果

    最近都在忙着写一个网站项目,今天做一个分页功能的时候,遇到了分页效果实现不了的问题,查了好久的资料,后来终于是成功解决啦,记录一下~ 1.在pom.xml中添加分页插件依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.5</version> </depend

  • 基于原生JS实现分页效果的示例代码

    这个只是一个分页的demo,主要是思路整理(很久之前项目用的东西) 分页实现的效果 主要是 左侧上一页 右侧是下一页 中间显示主要是超过5个显示 省略号 然后是可配置选项 实现之后的效果 首先需要初始化该对象的一些基本属性,显示总页码数,中间显示的页面数, 添加一个回调函数,在页面变化激活回调函数并返回当前页面和一些需要的其他参数 init为对象初始化的方法(里面的参数都是可以写成活的,我这里偷懒了所以写成死的了) 这个里的 z_page 可以接是接口返回的总页数 function Page(o

  • Android Recyclerview实现水平分页GridView效果示例

    昨天UI妹子给了给需求,展示水平分页效果,而且第二页要默认显示一部分,提示用户水平可以滑动,先上效果图: 很明显横向滑动的分页,第一反应就是使用ViewPager,毕竟只要通过自定义ViewPager,实现这个效果还是很容易,但是实际中问题时,当前模块是Recyclerview中某一个Holder,为了性能,肯定尽量使用Recyclerview去复用View,而且ViewPager并不能复用,所以考虑之后,还是要用Recyclerview去实现. 解决思路 既然打算用Recyclerview实现

随机推荐