mybatis实现商品列表的分页查询并返回数据

当我们浏览商品列表的时候,下滑浏览到底部的时候会出现加载更多标志,下拉刷新之后出现了新的商品列表,以下是一个示例展示如何通过mybatis中的物理分页limit语法实现实现商品列表的分页查询并返回数据

1.为何要进行分页查询

分页查询是数据库交互最常用的几种操作之一,当我们浏览商品列表的时候,下滑浏览到底部的时候会出现加载更多标志,下拉刷新之后出现了新的商品列表,这是由于后端在向前端传输数据的时候,如果一次性将所有的商品数据全部发送,前端解析加载会花费更多的时间,这对页面的加载展示产生较大压力,在这样的情况下,分页查询应运而生。

2.分页的种类

分页可分为逻辑分页和物理分页

逻辑分页是一次性查询出所有结果,把全部数据查询加载进内存 ,返回部分结果,操作在内存中进行,所以也叫内存分页。逻辑分页减少了数据库查询次数,适用于频繁访问、数据量少的情况,但是当数据量大的时候,容易造成内存溢出

物理分页是利用sql语句中的limit语法在数据库中进行分页操作,这样每次可以查询出指定一页的数据。物理分页适合大数据量的操作,但是每次请求一页的数据会造成查询数据库的次数较为频繁,对服务器的性能提出了更高的要求

3.新建数据库表插入商品信息

4.创建实体类Goodist

@Data
@Entity
public class GoodList {
    @Id
    private int goodListId;				//商品编号
    private String goodListName;	//商品名称
    private double goodListPrice;		//商品单价
    private String goodListPicture;
    private String goodListBriefIntroduction;
    private Integer categoryId;

}

5.创建GoodMapper.xml

<?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.software.PetShop.mapper.GoodMapper">
    <resultMap id="goodResult" type="com.software.PetShop.entity.GoodList">
            <id column="good_list_id" property="goodListId"/>
            <id column="good_list_name" property="goodListName"/>
            <id column="good_list_price" property="goodListPrice"/>
            <id column="good_list_brief_introduction"         
                        property="goodListBriefIntroduction"/>
            <id column="good_list_picture" property="goodListPicture"/>
            <id column="category_id" property="categoryId"/>
    </resultMap>
   
    </mapper>

6.配置mybatis-config.xml

在<mappers>下新加GoodMapper.xml映射文件

<mappers>
    <mapper resource="mappers/GoodMapper.xml"></mapper>
</mappers>

7.创建GoodController,新建getGoodList()方法

这里根据前端传过来的商品种类id,当前页的索引和数据条数来进行分页查询,当然根据需求也可以在后端定义每一页的索引和数据条数大小,获取商品种类id后在sql语句中进行分页操作。

@RestController
@RequestMapping("/petShop")
public class GoodController {

    /**
     * 根据商品种类id,页的索引,页的数据条数获取商品列表
     * **/
    @PostMapping("/getGoodsList")
    public String getGoodList(@RequestBody String json)

    //获取前端传过来的商品种类id,获取当前页的索引,获取当前页的数据条数值
    {   JSONObject jsonObject = new JSONObject(json);
        int categoryId = jsonObject.getInt("categoryId");
        int pageIndex = jsonObject.getInt("pageIndex");
        int pageSize = jsonObject.getInt("pageSize");
        SqlSession sqlSession = getSqlSession();
        try {
            GoodMapper goodMapper = sqlSession.getMapper(GoodMapper.class);
            //计算分页
            int offset  = (pageIndex - 1) * pageSize;
            List<GoodList> allGoodList = 
                goodMapper.findGoodListByCategoryId(categoryId,offset , pageSize);
            //计算总条数
            int totalCount = allGoodList.size();
            //计算总页数
            int totalPage = (int) Math.ceil(totalCount / (double) pageSize);
            System.out.println("goodList数据:"+allGoodList);
            JSONArray jsonArray = new JSONArray();
            for (GoodList goodList : allGoodList) {
                JSONObject clothJson = new JSONObject();
                clothJson.put("goodId", goodList.getGoodListId());
                clothJson.put("goodName", goodList.getGoodListName());                
                clothJson.put("goodBriefIntroduction",
                     goodList.getGoodListBriefIntroduction());
                clothJson.put("goodPicture",goodList.getGoodListPicture());
                clothJson.put("goodPrice",goodList.getGoodListPrice());
                clothJson.put("goodCategoryId",goodList.getCategoryId());
                System.out.println("goodList数据:"+goodList.getGoodListId() + ": " + 
                     goodList.getGoodListName());
                jsonArray.put(clothJson);
            }
            JSONObject result = new JSONObject();
            if (jsonArray!=null){
                result.append("data",jsonArray);
                result.append("pageIndex", pageIndex);
                result.append("pageSize", pageSize);
                result.append("totalPage", totalPage);
                result.append("status","ok");
            }else{
                result.append("status","no");
            }

            return result.toString();

        } finally {
            sqlSession.close();
        }
    }
}

8.创建GoodMapper接口,实现findGoodListByCategoryId()方法

public interface GoodMapper extends BaseMapper<GoodList> {
    List<GoodList> findGoodListByCategoryId(@Param("categoryId")int     
        categoryId,@Param("offset") int offset, @Param("pageSize")int pageSize);
}

9.在GoodMapper.xml中实现sql分页查询语句

<!--通过标识符id分页查询-->
    <select id="findGoodListByCategoryId" resultMap="goodResult" parameterType="map">
        SELECT * FROM good_list WHERE category_id = #{categoryId} LIMIT #{offset},
             #{pageSize}
    </select>

10.测试

这里我们模拟前端传过来的categoryId=1,pageIndex=1(查询第一页的数据),pageSize=3(每页的数据条数为3条)

可以看出程序成功在数据库表中进行了分页查询操作,每一页的数据大小为3条,并成功返回了商品数据

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Mybatis实现分页查询可以通过使用分页插件来实现。首先,在Mybatis配置文件中配置分页插件,然后在Mapper.xml文件中编写查询语句,通过传递参数指定查询起始位置和每页查询的数量即可实现分页查询。具体实现可参考Mybatis官方文档。 ### 回答2: Mybatis是一个基于Java的持久层框架,它可以方便地实现分页查询功能。下面我将介绍一下如何使用Mybatis实现分页查询。 首先,在Mybatis的配置文件中配置分页插件。在 `<configuration> </configuration>` 标签中添加以下代码: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> <!-- 数据库方言,可以根据自己的实际情况进行配置 --> </plugin> </plugins> ``` 然后,在需要进行分页查询的Mapper接口中定义方法。在方法的参数列表中添加 `@Param` 注解,并添加Page类型的参数,用于传递分页参数。例如: ```java List<User> queryUserByPage(@Param("page") Page page); ``` 接着,在Mapper的XML映射文件中编写SQL语句实现分页查询。例如: ```xml <select id="queryUserByPage" resultType="com.example.User"> SELECT * FROM user LIMIT #{page.startRow}, #{page.pageSize} </select> ``` 最后,在Service层调用Mapper接口的分页查询方法,并通过PageHelper工具类设置分页参数。例如: ```java public PageInfo<User> queryUserByPage(int pageNum, int pageSize) { // 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 调用Mapper接口的方法进行分页查询 List<User> userList = userMapper.queryUserByPage(); // 使用PageInfo类对查询结果进行封装 PageInfo<User> pageInfo = new PageInfo<>(userList); return pageInfo; } ``` 通过以上步骤,我们就可以使用Mybatis实现分页查询了。在调用Service层的分页查询方法时,只需要传入当前页码和每页显示的数据条数即可。Mybatis会自动根据传入的参数进行分页查询,并返回查询结果和分页信息。 ### 回答3: MyBatis是一种持久层框架,可与关系型数据库(如MySQL,Oracle等)进行交互。它通过XML配置或注解的方式,将SQL语句与Java代码进行解耦,简化了数据库操作。 要实现分页查询,我们需要使用MyBatis提供的分页插件(如PageHelper),其具体步骤如下: 1. 在项目的pom.xml文件中添加PageHelper依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>x.x.x</version> </dependency> ``` 2. 在MyBatis的配置文件中配置PageHelper插件: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> </plugin> </plugins> ``` 3. 在Java代码中使用分页查询功能: ```java // 引入PageHelper类 import com.github.pagehelper.PageHelper; ... // 设置分页参数,pageNum表示当前页码,pageSize表示每页的记录数 PageHelper.startPage(pageNum, pageSize); // 执行查询语句 List<YourEntity> resultList = yourMapper.selectByCondition(condition); // 获取分页信息 PageInfo<YourEntity> pageInfo = new PageInfo<>(resultList); int total = (int) pageInfo.getTotal(); // 总记录数 int pages = pageInfo.getPages(); // 总页数 // 打印分页结果 for (YourEntity entity : resultList) { System.out.println(entity.toString()); } ``` 上述代码中,我们首先调用`PageHelper.startPage(pageNum, pageSize)`方法设置分页参数,然后执行查询语句,得到查询结果。最后,我们可以使用PageInfo对象获取分页的相关信息,例如总记录数和总页数。 需要注意的是,以MySQL为例,在MyBatis中配置PageHelper时需要指定`<property name="dialect" value="mysql"/>`,以确保分页查询语句的正确执行。 总之,通过使用MyBatis提供的分页插件,我们可以很方便地实现分页查询功能,大大简化了开发过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值