首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql mybatis分页查询

基础概念

MySQL 是一个关系型数据库管理系统,广泛用于数据存储和管理。MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

分页查询是指在数据库中查询数据时,不一次性将所有数据加载到内存中,而是按照一定的规则(如每页显示多少条记录)进行分批加载,这样可以有效提高查询效率和用户体验。

相关优势

  1. 提高查询效率:分页查询可以减少单次查询的数据量,从而提高查询速度。
  2. 提升用户体验:用户可以更快地看到查询结果,尤其是在数据量大的情况下。
  3. 减轻服务器负担:分页查询可以减少服务器的内存和 CPU 负担。

类型

  1. 物理分页:在数据库层面进行分页,直接从数据库中获取指定页的数据。
  2. 内存分页:先从数据库中获取所有数据,然后在应用层面进行分页处理。

应用场景

分页查询广泛应用于各种需要展示大量数据的场景,如电商网站的商品列表、社交网络的用户动态、新闻网站的文章列表等。

示例代码

以下是一个使用 MyBatis 进行分页查询的示例:

数据库表结构

假设我们有一个 user 表,结构如下:

代码语言:txt
复制
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(50)
);

MyBatis 配置

mybatis-config.xml 中配置 MyBatis:

代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

Mapper XML 文件

创建 UserMapper.xml 文件:

代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.UserMapper">
  <select id="selectUsersByPage" resultType="com.example.User">
    SELECT * FROM user LIMIT #{offset}, #{limit}
  </select>
</mapper>

Java 代码

创建 UserMapper.java 接口:

代码语言:txt
复制
package com.example;

import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface UserMapper {
    List<User> selectUsersByPage(@Param("offset") int offset, @Param("limit") int limit);
}

创建 User.java 实体类:

代码语言:txt
复制
package com.example;

public class User {
    private int id;
    private String name;
    private String email;

    // Getters and setters
}

创建 Main.java 主程序:

代码语言:txt
复制
package com.example;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;

public class Main {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            int offset = 0;
            int limit = 10;
            List<User> users = mapper.selectUsersByPage(offset, limit);
            for (User user : users) {
                System.out.println(user.getName());
            }
        }
    }
}

常见问题及解决方法

  1. 分页查询结果不准确
    • 原因:可能是由于数据在查询过程中发生了变化(如插入、删除操作)。
    • 解决方法:使用 SELECT COUNT(*) 先获取总记录数,再根据总记录数进行分页查询。
  • 分页查询性能问题
    • 原因:可能是由于查询语句没有优化,或者数据量过大。
    • 解决方法:优化 SQL 查询语句,使用索引,或者考虑使用数据库提供的分页优化功能(如 MySQL 的 LIMIT 子句)。
  • 分页查询参数传递错误
    • 原因:可能是由于参数传递错误或类型不匹配。
    • 解决方法:检查参数传递是否正确,确保参数类型与 SQL 语句中的占位符类型一致。

参考链接

希望以上信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • mybatis分页查询之sql server–mysql

    在习惯了使用mysql进行数据操作后,突然转到sql server,虽然说两者在mybatis中的语法基本相同,很容易替换,但是,这也是最容易出问题的地方,因为往往我们会被这些些微的“不同”坑害。...今天这里就分享一下mysql和sql server在分页查询中的区别以及这里的“坑”。...首先看一下mysql中分页查询的代码: select * from sys_dormitoryBuilding limit 1,2; 这句sql语句执行的效果是选择第一行后的两行作为结果,也就是选择2...,where里面的我们也就不看了,这是根据参数进行信息筛选的,limit #{searchBean.start},#{searchBean.rows},这句话我们重点看一下,这就是我们mysql里的分页查询方法...代替的,我们是看不见的,这就是问题的关键(说实话,处于mysql这个用多了,我排除了好多的原因,找到这个真不容易),这个问题就在于我们这里使用的“#”,这就会导致我们的查询语句出现了问题,#在mysql

    1.6K10

    Mybatis分页查询

    第二种方式是后端进行分页,后端分页的实现又可以分为逻辑分页和物理分页,逻辑分页就是在进行数据库查询时一次性将数据查出来,然后将相应页的数据挑出返回,物理分页就是通过在查询时就查询相应的页的数据(比如直接在...mysql查询语句添加limit)。...之前写了好几篇关于Mybatis的文章了,其实mybatis原生也是支持分页的,但为了与数据库语法解耦,实现的是逻辑分页,首先将所有结果查询出来,然后通过计算offset和limit,只返回部分结果,操作在内存中进行...逻辑分页——RowBounds 通过RowBounds类可以实现Mybatis逻辑分页,原理是首先将所有结果查询出来,然后通过计算offset和limit,只返回部分结果,操作在内存中进行,所以也叫内存分页...分页 参考链接: Mybatis逻辑分页原理解析RowBounds Mybatis最入门—分页查询(逻辑分页与SQL语句分页) MyBatis Generator实现MySQL分页插件 Mybatis3.4

    3.3K20

    mybatis mysql 分页sql语句_使用mybatis分页查询并统计总数「建议收藏」

    今天在优化项目的时候,偶尔发现了一种分页查询的方法。其目的是,在分页查询的同时查出数据总记录数并实现模糊查询功能。并且,在以往的分页查询上,如果要使用模糊查询,则模糊查询出来的总记录数可能出现问题。...本项目使用的是springboot,mybatis,druid连接池 以下贴上源码: mybatis的xml文件 ① resultMap=”trainResultMap,count”注意: resultMap...里有两个函数,第一个为多表关联的映射map的Id,第二个则是id为count的resultMap查询总记录数方法 ② 这里使用了两条sql语句。...首页通过默认条件查询数据并分页,并且提供模糊查询功能,且查询总记录数方法是在前一条sql语句基础上执行而成 service实现类 ① baseMapper.queryPageByStuId用于调用dao...MybatisPlusConfig配置类中添加以下代码 MybatisPlusConfig.java 3 在数据源中添加以下代码 DynamicDataSourceFactory.java 支持多语句查询

    2.5K20

    Mybatis分页查询(通过SQL分页实现)

    Mybatis分页查询(通过SQL分页实现) 前言 实现有哪几种方式: 网页分页 (一次查询所有数据,加载到网页,那么适合数量小的操作) 服务器端分页 java程序中查询所有数据,网页需要哪一页...,就给哪一页数据,会撑爆java服务器,建议查询缓存优化 数据库分页 请求一页数据,查询数据库即可 本文采用Oracle中的rownum实现分页,数据表使用Oracle中Scott的EMP表...* @return */ public Integer selectSize(); /** * 分页查询 * @param pageUtil * @return */ public List分页查询 * @param pageUtil * @return */ --> <select id="selectEmpByPage" parameterType...PageUtil pageUtil=new PageUtil(3, size, 5); //分页查询 List list=mapper.selectEmpByPage(pageUtil

    3.1K20

    springboot集成mybatisplus分页_mybatis分页查询原理

    } 2、添加配置 aplication-dev.properties #mybatis配置 mybatis.mapper-locations= classpath...=mysql # 分页合理化参数,默认值为false。...当该参数设置为 true 时,pageNum查询第一页, pageNum>pages(超过总数时),会查询最后一页 pagehelper.reasonable=true # 支持通过 Mapper...,totalSize和数据库中符合条件数据数不符, 具体表现:currentPage:1 pageSize:10 (数据库中符合查询条件的数据有十二条),查询结果:totalSize:10 totalPage...= new PageInfo(dataList); 这个dataList 是直接从数据库中查到的数据分页是没问题的,但换成了转移之后的list就有问题,问题大概就出现在查询数据这里了,具体不太了解 解决办法

    78110

    mybatis oracle 分页查询_oracle分页查询出现重复的问题

    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便。...使用MyBatis中的RowBounds进行分页查询时,不需要在 sql 语句中写 offset,limit,mybatis 会自动拼接 分页sql ,添加 offset,limit,实现自动分页。...public List> queryUserList(RowBounds rowbounds); //查询用户列表 } 对应的mapper.xml文件: /p> PUBLIC “-//mybatis.org...* from user 通过postman调用接口,传入对应的参数,即可实现分页查询数据。...总结 以上所述是小编给大家介绍的Oracle使用MyBatis中RowBounds实现分页查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

    1.9K10

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券