SSMP+ajax实现广告系统的分页效果

news2024/9/30 9:33:04

文章目录

    • 1.案例需求
    • 2.编程思路
    • 3.案例源码
    • 4.小结

1.案例需求

使用SSMP+ajax实现广告系统的分页效果,效果图如下:
在这里插入图片描述

2.编程思路

  • mapper层:定义一个接口,继承自BaseMapper,指定泛型为AdvInfo,这样MyBatis
    Plus就能自动为AdvInfo实体类生成CRUD操作的方法。
  • service层:定义一个接口,声明需要执行的业务方法。在实现类AdvInfoServiceImpl中,通过注入AdvInfoMapper来调用MyBatis Plus的selectPage方法实现分页查询。使用LambdaQueryWrapper来构建查询条件,根据传入的ConditionVo对象动态地添加查询条件。返回Page对象,包含分页信息和查询结果。
  • ConditionVo:使用@Data和@Component注解的类,包含广告标题和分类ID作为查询条件。
  • controller层:定义一个RESTful接口queryPage,用于接收分页查询的请求。接收请求参数(页码、每页数量、查询条件),并调用Service层的getPage方法。将查询结果封装成Map对象,并返回给客户端。使用@ResponseBody注解将返回的对象自动转换为JSON格式。
  • 客户端ajax:使用jQuery的$.ajax方法发送POST请求到服务器的queryPage,接收服务器返回的JSON数据,并解析这些数据。使用JavaScript动态更新HTML页面内容,包括广告列表和分页导航。定义了loadpage函数,用于根据当前页码重新加载广告列表和分页导航。

3.案例源码

mapper层:

public interface AdvInfoMapper extends BaseMapper<AdvInfo> {
}

service层:

public interface AdvInfoService {
    Page<AdvInfo> getPage(int currentPage, int pageSize, ConditionVo conditionVo);
}

serviceimpl:

@Service("advInfoServiceImpl")
public class AdvInfoServiceImpl implements AdvInfoService {
    @Resource
    private AdvInfoMapper advInfoMapper;
    @Override
    public Page<AdvInfo> getPage(int currentPage, int pageSize, ConditionVo conditionvo) {
        Page<AdvInfo> page = new Page<>(currentPage, pageSize);

        //创建条件构造器
        LambdaQueryWrapper<AdvInfo> lambdaQueryWrapper = null;

        //有条件,非空判断,不会触发空指针异常
        if (Objects.nonNull(conditionvo)){
            lambdaQueryWrapper = new LambdaQueryWrapper<>();

            lambdaQueryWrapper.like(StrUtil.isNotBlank(conditionvo.getAdvTitle()),AdvInfo::getAdvTitle,conditionvo.getAdvTitle());  //("name","admin)
            lambdaQueryWrapper.eq(Objects.nonNull(conditionvo.getCategoryId()),AdvInfo::getCategoryId,conditionvo.getCategoryId());

        }

        advInfoMapper.selectPage(page,lambdaQueryWrapper);
        //返回分页对象
        return page;
    }
}

ConditionVo:

@Data
@Component
public class ConditionVo {
    private String advTitle;
    private Integer categoryId;
}

controller层:

 @RequestMapping("queryPage")
    @ResponseBody
    public Map<String,Object> queryPage(int pageIndex,  int pageCount, ConditionVo conditionVo) {

       IPage<AdvInfo> page = advInfoService.getPage(pageIndex, pageCount, conditionVo);

        HashMap<String, Object> map = new HashMap<>();
        map.put("list",page.getRecords());
        map.put("currentPage",pageIndex);
        map.put("rows",pageCount);
        map.put("totalCount",page.getTotal());
        map.put("totalPage",page.getPages());
        System.out.println("shdkfdfsjdcx——queryPage:"+page.getRecords()+","+pageIndex+","+pageCount+","+
                page.getTotal()+","+   page.getPages() );
        return map;
    }

客户端ajax

  function loadpage(index) {
            $.ajax({
                url: "queryByPage",
                type: "post",
                data: {
                    pageIndex: index,
                    pageCount: pagecount
                },
                dataType: "json",
                success: function (data) {
                    totalPage = data.totalPage;
                    pageIndex = data.currentPage;

                    var advs = data.list;
                    $("#myTbody").empty();
                    $("#msg").empty();
                    var str = "";
                    for (var i = 0; i < advs.length; i++) {
                        var advInfo = advs[i];
                        str = "  <tr >\n" +
                            "        <td>" + advInfo.advId + "</td>\n" +
                            "        <td>" + advInfo.advTitle + "</td>\n" +
                            "        <td>" + advInfo.clickCount + "</td>\n" +
                            "        <td>" + advInfo.expiredTime + "</td>\n" +
                            "        <td>" + advInfo.advCategory.categoryName + "</td>\n" +
                            "        <td><img src='" + advInfo.img + "' alt='广告图片' style='width:100px;height:auto;'></td>\n" +
                            "        <td><a href='javascript:void(0)' οnclick='editRow(" + advInfo.advId + ")'>修改</a>" + " " +
                            "        <a href='javascript:void(0)' οnclick='delRow(" + advInfo.advId + ")'>删除</a></td>\n" +
                            "    </tr>"
                        $("#myTbody").append(str);


                        var pageStr = '<span>总计:<b>' + data.totalCount + '</b></span>';

                        pageStr += '<a href="javascript:void(0)" οnclick="loadpage(1)">第一页</a>';

                        // 添加上一页链接(如果不是第一页)
                        if (pageIndex > 1) {
                            pageStr += '<a href="javascript:void(0)" οnclick="loadpage(' + (pageIndex - 1) + ')">上一页</a>';
                        }

                        //设置数字页码链接
                        for (let i = 1; i <= totalPage; i++) {
                            if (i == pageIndex) {
                                pageStr += '<span>[' + i + ']</span>';
                            } else {
                                pageStr += '<a href="javascript:void(0)" οnclick="loadpage(' + i + ')">[' + i + ']</a>';
                            }
                        }

                        // 添加下一页链接(如果不是最后一页)
                        if (pageIndex < totalPage) {
                            pageStr += '<a href="javascript:void(0)" οnclick="loadpage(' + (pageIndex + 1) + ')">下一页</a>';
                        }

                        pageStr += '<a href="javascript:void(0)" οnclick="loadpage(totalPage)">最后一页</a>';

                        $("#pageDiv").empty();
                        $("#pageDiv").append(pageStr);
                    }
                },
            });
        };

4.小结

本文件详细描述了使用SSMP+ajax技术栈实现广告系统分页效果的编程思路、代码实现和前端交互逻辑,通过后端分页查询和前端动态展示实现广告列表的分页功能。其中用到的关键技术点有以下几个:

  1. MyBatis Plus:利用BaseMapper和LambdaQueryWrapper简化CRUD操作和条件查询。
  2. RESTful接口:通过@RequestMapping和@ResponseBody注解创建RESTful风格的接口,返回JSON格式数据。
  3. ajax异步请求:前端使用jQuery的$.ajax方法发送异步请求,实现页面的无刷新更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea springboot项目热部署

使用 spring-boot-devtools spring-boot-devtools 是 Spring Boot 提供的开发工具模块&#xff0c;它可以自动检测到代码的变化并重启应用&#xff0c;实现热部署。 配置步骤&#xff1a; 添加依赖&#xff1a; 在项目的 pom.xml 中加入 spring-boot-devtools 依赖&#xff1…

SQL Server性能优化之读写分离

理论部分: 数据库读写分离&#xff1a; 主库&#xff1a;负责数据库操作增删改 20% 多个从库&#xff1a;负责数据库查询操作 80% 读写分离的四种模式 1.快照发布&#xff1a;发布服务器按照预定的时间间隔向订阅服务器发送已发布的数据快照 2.事务发布[比较主流常见]&#xf…

roctracer 的应用示例

1&#xff0c;不用 roctracer 的普通场景 mt.cpp /* Copyright (c) 2018-2022 Advanced Micro Devices, Inc.Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software")…

哪款宠物空气净化器是除浮毛王者?希喂、范罗士、霍尼韦尔宠物空气净化器实测

养宠人绕不过的痛——掉毛&#xff01;脱毛&#xff01;又到了掉毛季&#xff0c;就连空气中都有毛毛……不管遇到谁&#xff0c;都知道你养猫养狗了——只因T恤变身毛线衫、毛毛怎么都粘不干净。不止是衣服上&#xff0c;地板上、沙发上、桌面上&#xff0c;哪哪都是毛。开始养…

从头开始学MyBatis—02基于xml和注解分别实现的增删改查

首先介绍此次使用的数据库结构&#xff0c;然后引出注意事项。 通过基于xml和基于注解的方式分别实现了增删改查&#xff0c;还有获取参数值、返回值的不同类型对比&#xff0c;帮助大家一次性掌握两种代码编写能力。 目录 数据库 数据库表 实体类 对应的实体类如下&#x…

【目标检测】labelimg图像标注软件的使用流程

一、labelimg检测图片标注 1、下载labelimg.exe 链接&#xff1a;https://pan.baidu.com/s/1yk8ff56Xu40-ZLBghEQ5nw 提取码&#xff1a;vj8f 下载的文件是编译好的&#xff0c;可执行的labelImg.exe文件。直接将文件放在windows环境下&#xff0c;双击可执行。&#xff08;如果…

典型BUCK电路学习和设计

手把手教你设计12V3Abuck降压电路-2-相关输入参数讲解_哔哩哔哩_bilibili 这里是输入电容&#xff0c;先过大电容&#xff08;电解电容&#xff09;再过小电容&#xff08;陶瓷贴片电容&#xff0c;高频率波&#xff09; 输出也可以同理 开关电源不能带负载的原因&#xff0c…

uniapp vue3 梯形选项卡组件

实现的效果图&#xff1a; 切换选项卡显示不同的内容&#xff0c;把这个选项卡做成了一个组件&#xff0c;需要的自取。 // 组件名为 trapezoidalTab <template> <view class"pd24"><view class"nav"><!-- 左侧 --><view cla…

--链表--

一.链表的概述 二.逻辑图 三.代码详解 //1.定义关于链表的结构体 #include <iostream> #include <stdlib.h> #include <assert.h> using namespace std; typedef int SLTDateType;//适用于不同的数据类型 typedef struct SListNode {SLTDateType data;//数据…

【Day14-单例设计模式动态代理】

单例设计模式 什么是设计模式&#xff08;Design pattern&#xff09; ? 一个问题通常有n种解法&#xff0c;其中肯定有一种解法是最优的&#xff0c;这个最优的解法被人总结出来了&#xff0c;称之为设计模式。设计模式有20多种&#xff0c;对应20多种软件开发中会遇到的问题…

记录开发一个英语听力训练网站

背景 在当前全球经济衰退的背景下&#xff0c;IT相关的工作在国内的竞争也是越来越激烈&#xff0c;为了能够获得更多的可能性&#xff0c;英语的学习也许能为程序员打开一扇新的窗户&#xff0c;比如很多远程的工作尤其是国际化背景的工作团队&#xff0c;英语的协作沟通是必…

Modbus通信

Modbus是一种经典的工业通信协议&#xff0c;由Modicon&#xff08;现为施耐德电气&#xff09;在1979年首次发布。它广泛应用于各种工业自动化系统中&#xff0c;尤其是在PLC&#xff08;可编程逻辑控制器&#xff09;与其他设备之间的通信。Modbus的主要特点是其简单性和开放…

《Oracle(一)- 基础》

文章目录 一、Oracle简介&#xff08;一&#xff09;什么是ORACLE&#xff08;二&#xff09;ORACLE 体系结构1.数据库2.实例3.数据文件&#xff08;dbf&#xff09;4.表空间5.用户 二、ORACLE 安装与配置&#xff08;一&#xff09;VMware 挂载 windows server 2003&#xff0…

海外短剧系统一站式开发+h5,app双端

前言&#xff1a; 海外短剧是指那些制作时间短、剧情紧凑、内容丰富的剧集&#xff0c;主要在海外市场&#xff08;如北美、欧洲、东南亚等&#xff09;播放并受到欢迎。 而海外短剧系统是指一种用于制作和播放海外短剧的系统。该系统通常由电视台、制片公司或在线视频平台使…

C++:STL详解(一)string类的基本介绍与使用方式

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;实践是检验真理的唯一标准&#xff01;&#xff01;&#xff01;敲代码需要勤快点&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff0…

十二,Spring Boot 异常处理(自定义异常页面,全局异常,自定义异常)

十二&#xff0c;Spring Boot 异常处理(自定义异常页面&#xff0c;全局异常&#xff0c;自定义异常) 文章目录 十二&#xff0c;Spring Boot 异常处理(自定义异常页面&#xff0c;全局异常&#xff0c;自定义异常)1. 基本介绍2. 自定义异常页面3. 全局异常4. 自定义异常5. 补充…

LineageOS刷机教程

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ LineageOS 是一个基于 Android 开源项目&#xff08;AOSP&#xff09;的开源操作系统&#xff0c;主要由社区开发者维护。它起源于 CyanogenMod 项目&#xff…

数据库索引底层数据结构之B+树MySQL中的页索引分类【纯理论知识,干货分享,面试必备】

目录 1、索引简介 1.1 什么是索引 1.2 使用索引的原因 2、索引中数据结构的设计 —— B树 2.1 哈希 2.2 二叉搜索树 2.3 B树 2.4 最终选择之——B树 2.4.1 B树与B树的对比(面向索引)【面试题】 3、MySQL中的页 3.1 页的使用原因 3.2 页的结构 3.2.1 页文件头和页文件…

解锁定位服务:Flutter应用中的高德地图定位

前言 在现代移动应用开发中&#xff0c;定位服务已成为一项基本功能&#xff0c;它使得应用能够获取用户的地理位置信息&#xff0c;为用户提供更加个性化的服务。 Flutter 作为跨平台的移动应用开发框架&#xff0c;支持集成多种服务&#xff0c;包括定位服务。 本文将介绍如…

HR8870:可PWM控制,4.5A直流有刷电机驱动数据手册

HR8870芯片描述 HR8870是一款直流有刷电机驱动器&#xff0c;适用于打印机、电器、工业设备以及其他小型机器。两个逻辑输入控制H桥驱动器&#xff0c;该驱动器由四个N-MOS组成&#xff0c;能够以高达4.5A的峰值电流双向控制电机。利用电流衰减模式&#xff0c;可通过对输入进行…