分页查询与分页条件查询

---------------

无PageHelper插件分页查询

1.创建PageBean实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean<T> {
    private Long total;//总条数
    private List<T> items;//当前页数据集合
}

类型安全性

  • 泛型:提供了编译时的类型检查,能够在编译阶段发现类型不匹配的问题,减少运行时错误。
  • 无泛型:由于缺乏类型参数,可能在运行时才发现错误,增加了代码出错的风险。

使用场景

  • 泛型: 更适合需要处理不同类型数据的场景,尤其是在使用集合时,能够提供更好的类型安全性和可读性。
  • 无泛型: 在某些简单的场景下可以使用,但不推荐用于复杂的业务逻辑中。

2.实现 

有PageHelper插件分页查询

        <!--pageHelper坐标-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>

SpringBoot3使用1.4.6               SpringBoot2使用1.4.2

 

控制层代码同上

有PageHelper分页条件查询 

        <!--pageHelper坐标-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean<T> {
    private Long total;//总条数
    private List<T> items;//当前页数据集合
}

 

    @GetMapping
    public Result<PageBean<Article>> list(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "5") Integer pageSize,
            @RequestParam(required = false) Integer categoryId,
            @RequestParam(required = false) String state
    ){
        PageBean<Article> pb = articleService.list(pageNum,pageSize,categoryId,state);
        return Result.success(pb);
    }

 

//条件分页列表查询
    PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state);
    public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {
        //创建PageBean对象
        PageBean<Article> pb = new PageBean<>();
        //开启分页查询PageHelper    最后会拼接到sql后面 加上一个limit
        PageHelper.startPage(pageNum,pageSize);
        //调用mapper
        Map<String,Object> map = ThreadLocalUtil.get();//需要从token中获取id时才写
        Integer userId = (Integer) map.get("id");
        List<Article> as =  articleMapper.list(userId,categoryId,state);
        //Page中提供了方法,可以获取PageHelper分页查询后 得到的总记录条数和当前页数据
        Page<Article> p = (Page<Article>)as;

        //把数据填充到PageBean对象中
        pb.setTotal(p.getTotal());
        pb.setItems(p.getResult());
        return pb;
    }
List<Article> list(Integer userId, Integer categoryId, String state);

 

<?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.bigevent.mapper.ArticleMapper">

    <select id="list" resultType="com.example.bigevent.pojo.Article">
        select * from article
        <where>
            <if test="categoryId!=null">
                category_id = #{categoryId}
            </if>
--             如果参数是String类型,前端没有传值,则后端接收到为"",其他类型接收到为null
            <if test="state!=null and state !=''">
                and state = #{state}
            </if>
            and  create_user = #{userId}
--          and name like concat('%',#{name},'%')  模糊查询
        </where>
    </select>
</mapper>

 

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个Java持久层框架,它可以帮助开发人员更方便地与数据库进行交互。条件分页查询是在查询数据时,通过指定查询条件分页参数,获取满足条件的数据的子集。 要实现MyBatis的条件分页查询,可以按照以下步骤进行操作: 1. 在MyBatis的Mapper接口中定义查询方法,定义方法的输入参数为查询条件分页参数。例如: ``` List<User> findUsersByConditionAndPage(@Param("condition") Condition condition, @Param("page") Page page); ``` 2. 在对应的Mapper XML文件中,编写查询SQL语句。在SQL语句中,可以使用条件判断和LIMIT关键字来实现条件筛选和分页。例如: ``` <select id="findUsersByConditionAndPage" parameterType="map" resultType="User"> SELECT * FROM user <where> <if test="condition.name != null"> AND name = #{condition.name} </if> </where> LIMIT #{page.offset}, #{page.limit} </select> ``` 上述示例中,使用了`<if>`标签判断条件是否存在,如果存在则添加相应的条件语句。使用了LIMIT关键字来指定分页的起始位置和每页数据的数量。 3. 在Java代码中调用Mapper接口的查询方法,并传入条件分页参数。例如: ``` Condition condition = new Condition(); condition.setName("John"); Page page = new Page(); page.setOffset(0); page.setLimit(10); List<User> users = userMapper.findUsersByConditionAndPage(condition, page); ``` 上述示例中,创建了一个条件对象和分页对象,并调用了Mapper接口的查询方法。 通过以上步骤,就可以实现MyBatis的条件分页查询。在Mapper XML文件中,可以根据具体的需求编写更复杂的查询语句,满足不同的查询条件分页需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值