SpringMVC动态条件分页查询

继上一篇内容分页后,今天来讲述我们代码中最经常用到的分页条件查询,不知道怎么分页的小伙伴可以点这里进行学习☟☟☟☟☟☟☟☟☟☟☟☟。

Mybaits分页插件(PageHelper)的使用与实现https://blog.csdn.net/qq_58726929/article/details/124349395?spm=1001.2014.3001.5501首先简单描述下条件查询怎么通过mybatis实现。【会的可以直接下滑忽略】

问题:查询条件包括:进货时间范围、商品名称、采购员。要求列表按采购时间降序排列,即最新的单据最先呈现。

遇到这种问题首先要理清各个表之间的关系。

如上图这样自己理清各种表之间是一对一还是一对多,或者是对一,然后只要记清楚:

一对一或一对多用实体类声明,如第一个在user类中声明goods的关系。因为是一对多,所以

    private Goods goods;

多对一用List<>,如在第四个purchase类声明user的关系,因为是多对一,所以

    private List<User> user;

然后就是就是要弄清在xml文件中的使用。

①一对多或一对一用

<association property=" " javaType=" ">        </association>

②多对一用

<collection property=" " ofType=" ">        </collection>

上述任务理清关系后知道需要使用一对多的关系,所以用<association>,如下图

    <resultMap id="BaseResultMap" type="purchase">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="goods_id" property="goods_id" jdbcType="INTEGER"/>
        <result column="amount" property="amount" jdbcType="INTEGER"/>
        <result column="price" property="price" jdbcType="DECIMAL"/>
        <result column="purchase_time" property="purchase_time" jdbcType="TIMESTAMP"/>
        <result column="supplier_id" property="supplier_id" jdbcType="INTEGER"/>
        <result column="purchase_user_id" property="purchase_user_id" jdbcType="INTEGER"/>
        <result column="serial_id" property="serial_id" jdbcType="VARCHAR"/>
        <association property="goods"  javaType="Goods">
            <result column="goods_id" property="id"/>
            <result column="goods_name" property="goodsName"/>
        </association>
        <association property="sysUser"  javaType="SysUser">
            <result column="purchase_user_id" property="id"/>
            <result column="name" property="name"/>
        </association>
        <association property="supplier"  javaType="Supplier">
            <result column="supplier_id" property="id"/>
            <result column="supplier_name" property="supplierName"/>
        </association>
        <association property="purchaseSerialnum" javaType="PurchaseSerialnum">
            <result column="serialNumberId" property="serialnumberid"/>
            <result column="serialNumber" property="serialcount"/>
        </association>
    </resultMap>

 它的查询SQL语句是这样的。

    <select id="selectAll" resultMap="BaseResultMap">
        SELECT
            p.id,
            p.goods_id,
            p.purchase_user_id,
            p.supplier_id,
            p.amount,
            p.price,
            p.purchase_time,
            p.serial_id,
            g.goods_name,
            s.supplier_name,
            u.name
        FROM
            purchase p
                LEFT JOIN sys_user u ON u.id = p.purchase_user_id
                LEFT JOIN goods g ON g.id = p.goods_id
                LEFT JOIN supplier s ON s.id = p.supplier_id
        <where>
        <if test="startTime!=null and startTime.trim() neq ''">
            and date_format(p.purchase_time,'%Y-%m-%d %H:%i:%s') &gt;= date_format(#{startTime},'%Y-%m-%d %H:%i:%s')
        </if>
        <if test="endTime!=null and endTime.trim() neq ''">
            and date_format(p.purchase_time,'%Y-%m-%d %H:%i:%s') &lt;= date_format(#{endTime},'%Y-%m-%d %H:%i:%s')
        </if>
        <if test="name!=null and name!=''">
            and name = #{name}
        </if>
        </where>
        ORDER BY
            purchase_time DESC
    </select>

 以上内容仅供目前还不会条件查询的小伙伴参考,已经实现了该功能的可以忽略。

-------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------

分页条件查询就是在原本查询和分页的基础上进行整合,达到搜索后显示的结果显示为分页的状态,话不多说,直接上代码,可以看下之间的区别和不同。

Service层

    //原有的实现分页
    PageInfo<Purchase> findByPage(Integer pageNum, Integer pageSize);

    //原有的条件查询
    List<Purchase> selectBy(String name, String goods_name,String startTime, String endTime);

    //实现分页条件查询
    PageInfo<Purchase> findBy(Integer pageNum, Integer pageSize,String name, String goods_name, String startTime, String endTime);

ServiceImpl层

    //分页查询所有
    @Override
    public List<Purchase> selectAll(){
        List<Purchase> purchaseList = purchaseMapper.selectAll();
        return purchaseList;
    }
    @Override
    public PageInfo<Purchase> findByPage(Integer pageNum, Integer pageSize){
        if(pageNum == null){
            pageNum = 1;
        }
        PageHelper.startPage(pageNum,pageSize);
        List<Purchase> purchases = purchaseMapper.selectAll();
        PageInfo<Purchase> pageInfo = new PageInfo<Purchase>(purchases);
        return pageInfo;
    }

    //条件查询
    @Override
    public List<Purchase> selectBy(String name, String supplier_name, String startTime, String endTime){
        List<Purchase> purchaseList = purchaseMapper.selectBy(name, supplier_name, startTime, endTime);
        return purchaseList;
    }

    //分页条件查询
    @Override
    public PageInfo<Purchase> findBy(Integer pageNum, Integer pageSize,String name, String goods_name, String startTime, String endTime){
        if(pageNum == null){
            pageNum = 1;
        }
        PageHelper.startPage(pageNum,pageSize);
        List<Purchase> purchases = purchaseMapper.selectBy(name, goods_name, startTime, endTime);
        PageInfo<Purchase> pageInfo = new PageInfo<Purchase>(purchases);
        return pageInfo;
    }

Controller层

    @RequestMapping("/list")
    public String list(Integer pageNum, HttpServletRequest request) {
        String name = request.getParameter("name");
        String goods_name = request.getParameter("goods_name");
        String startTime = request.getParameter("startTime");
        String endTime = request.getParameter("endTime");
        PageInfo<Purchase> pageInfo = purchaseService.findBy(pageNum,8,name,goods_name,startTime,endTime);
        request.getSession().setAttribute("pageInfo",pageInfo);
        return "/purchase/list";
    }

Controller层我用的是HttpServletRequest来获取和存储内容,也可以用Model等方式替代,看个人,用Model的参数直接用注解@的方式写内容,如:

  
    public String list(Integer pageNum, Model model,
        @Param("name")String name,
        @Param("name")String startTime
        .........省略) {
    }

运行结果

有任何问题欢迎在评论区提问,会以最快的速度回复大家😀😀😀

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
SpringMVC中的分页查询可以通过以下步骤实现: 1. 引入分页插件:SpringMVC中常用的分页插件有MyBatis的PageHelper和Spring Data JPA的Pageable。根据项目需求选择相应的插件。 2. 在Controller中定义处理分页查询的方法,其中要传入分页参数,例如当前页码和每页显示的记录数。 3. 在Service或DAO层中实现分页查询功能,使用分页插件提供的API进行分页查询操作。查询结果可以封装为Page对象,该对象包含了查询结果的总记录数、当前页码、每页显示的记录数以及查询结果列表。 4. 返回查询结果给Controller,Controller再将结果渲染到前端页面。 以下是一个基于MyBatis和PageHelper实现的分页查询示例代码: @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/list") public ModelAndView list(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userService.getUserList(); PageInfo<User> pageInfo = new PageInfo<>(userList); ModelAndView mav = new ModelAndView("user/list"); mav.addObject("pageInfo", pageInfo); return mav; } } @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> getUserList() { return userMapper.getUserList(); } } public interface UserMapper { List<User> getUserList(); } 在以上示例中,Controller中的list方法接收pageNum和pageSize两个分页参数,然后调用UserService的getUserList方法进行分页查询。在getUserList方法中,使用PageHelper.startPage方法设置分页参数,然后调用UserMapper的getUserList方法进行查询操作。查询结果封装为Page对象,最终在Controller中返回给前端页面进行渲染。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又菜又爱敲ㅤ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值