Mybatis分页查询

java学习 专栏收录该内容
7 篇文章 0 订阅

Mybatis分页查询

传统查询方式

  • 创建PageBean对象

    • 参数

      • currentPage 当前页
      • pageSize 页容量
      • totalCount 数据总条数
      • total 总页数
      • startIndex 每页起始索引
    • 提供getter/setter方法

    • 每页起始索引需要通过当前页和页容量计算获得

    • this.startIndex = (this.currentPage - 1) * this.pageSize;
      
    • 总页数需要通过数据总条数和页容量计算获得

    • this.totalPage = (int)Math.ceil(this.totalCount * 1.0 / this.pageSize);
      
  • 添加Mapper接口

  • public List<User> queryForPage(PageBean pageBean);
    
  • Mapper.xml

  • <select id="queryForPage" resultType="com.example.domain.User">
    	SELECT * FROM sys_user LIMIT #{startIndex},#{pageSize}
    </select>
    
  • 测试代码

  • @Test
    public void queryForPage1(){
    	PageBean bean = new PageBean();
    	bean.setCurrentPage(1);
    	bean.setPageSize(5);
    	//查询总条数,并且设置给bean
    	Integer count = userMapper.queryCount();
    	bean.setTotalCount(count);
    	List<User> list = userMapper.queryForPage(bean);
    	for(User user : list){
    		System.out.println(user);
    	}
    }
    

分页+模糊查询

  • 添加Mapper接口

  • public List<User> queryForPage2(Map<String,Object> map);
    public Integer queryCount(String keywords);
    
  • Mapper.xml

  • <!-- 模糊查询 -->
    <select id="queryForPage2" resultType="com.example.domain.User">
    	SELECT * FROM sys_user 
    	WHERE name LIKE "%"#{keywords}"%"
    	LIMIT #{startIndex},#{pageSize}
    </select>
    <!-- 模糊查询总条数 -->
    <select id="queryCount2" resultType="java.lang.Integer" parameterType="java.lang.String">
    	SELECT COUNT(*) FROM sys_user 
    	WHERE name LIKE "%"#{keywords}"%"
    </select>
    
  • 测试代码

  • @Test
    public void queryForPage2(){
    	String keywords = "1";
    	PageBean bean = new PageBean();
    	bean.setCurrentPage(1);
    	bean.setPageSize(5);
    	Integer count = userMapper.queryCount2();
    	bean.setTotalCount(count);
      Map<String, Object> map = new HashMap<>();
      map.put("startIndex", bean.getStartIndex());
      map.put("pageSize", bean.getPageSize());
      map.put("keywords", keywords);
    	List<User> list = userMapper.queryForPage2(map);
    	for(User user : list){
    		System.out.println(user);
    	}
    }
    

使用阿里分页查询插件-PageHelper

  • 原理: 使用Mapper接口的代理对象调用方法的时候,方法会被拦截,拦截后改变sql语句,本质是动态代理(aop)

  • 需要jar包

    • pagehelper-5.1.6.jar
    • jsqlparser-1.3.jar
  • 在mybatis.cfg.xml中配置插件

  • <plugins>
    	<plugin interceptor="com.github.pagehelper.PageInterceptor">
    		<property name="dialect" value="mysql">
    	</plugin>
    </plugins>
    
  • Mapper接口

  • public List<User> queryForPage(User user);
    
  • Mapper.xml

  • <select id="queryForPage" resultType="com.example.domain.User">
    	SELECT * FROM sys_user
    </select>
    
  • 测试代码

  • @Test
    public void queryForPage(){
    	User user = new User();
    	PageBean bean = new PageBean();
    	bean.setCurrentPage(1);
    	bean.setPageSize(5);
      //默认会查询总条数
      Page<User> page = PageHelper.startPage(bean.getCurrentPage(),bean.getPageSize());
    	List<User> list = userMapper.queryForPage(user);
    	for(User u : list){
    		System.out.println(u);
    	}
    }
    
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值