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

server/2024/9/22 20:40:49/

文章目录

    • 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层:

java">public interface AdvInfoMapper extends BaseMapper<AdvInfo> {
}

service层:

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

serviceimpl:

java">@Service("advInfoServiceImpl")
public class AdvInfoServiceImpl implements AdvInfoService {@Resourceprivate AdvInfoMapper advInfoMapper;@Overridepublic 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:

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

controller层:

java"> @RequestMapping("queryPage")@ResponseBodypublic 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

javascript">  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.ppmy.cn/server/118264.html

相关文章

C语言——数组,指针,指针数组,数组指针

零、存储单元和地址 计算机在保存数据时&#xff0c;把数据放在一个个存储单元中&#xff0c;存储单元可以理解为一个个小房间。 地址就是存储单元&#xff08;小房间&#xff09;的房间号&#xff0c;且这个房间号是唯一的。 详细请学习计算机组成原理3.1 一、变量a int a…

C++中的多态

1. 多态的概念 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)&#xff0c;这⾥我们重点讲运⾏时多态&#xff0c;编译时多态(静态多态)和运⾏时多态(动态多态)。编译时多态(静态多态)主要就是我…

Vue3使用vue-qrcode-reader实现扫码绑定设备功能

需求描述 移动端进入网站后&#xff0c;登录网站进入设备管理界面。点击添加设备&#xff0c;可以选择直接添加或者扫一扫。点击扫一扫进行扫描二维码获取设备序列号自动填充到添加设备界面的序列号输入框中。然后点击完成进行设备绑定。 安装vue-qrcode-reader 这里使用的版…

47.面向对象综合训练-汽车

//题目需求&#xff1a;定义数组存储3个汽车对象 //汽车的属性&#xff1a;品牌&#xff0c;价格&#xff0c;颜色 //创建三个汽车对象&#xff0c;数据通过键盘录入而来&#xff0c;并把数据存入到数组当中 1.标准的JavaBean类 public class Car {private String brand;//品…

【ESP32】Arduino开发 | 中断矩阵+按键输入中断例程

对于中断矩阵的详细介绍会放在ESP-IDF开发文章中&#xff0c;跳转栏目目录可以找到对应文章。 1. API 1.1 绑定GPIO中断 attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode); pin&#xff1a;管脚号&#xff1b;handler&#xff1a;中断处理函数&#xff1b;mode…

递归10小题

注&#xff1a;操作数字的数组均为int [ ]型&#xff0c;操作字符串均为char [ ]型 下面的10个问题很常见&#xff0c;在这里都是用递归解决的。涉及到数组的问题&#xff0c;需要有指针的知识。 1.求1到n的和 int getSum(int n)//求1到n的和 {if(n1){return 1;}return ngetS…

富格林:整理可信技巧应对虚假

富格林指出&#xff0c;投资者进入黄金市场的第一课&#xff0c;应该是学会利用可信的技巧应对市场的交易风险&#xff0c;避免虚假猫腻的捣乱。黄金市场瞬息万变&#xff0c;虽然有交易操作的就会&#xff0c;但也伴随着一定的风险。投资者对于应对预防虚假的措施需求还是比较…

图数据库的力量:深入理解与应用 Neo4j

图数据库的力量&#xff1a;深入理解与应用 Neo4j 文章目录 图数据库的力量&#xff1a;深入理解与应用 Neo4j1、什么是 Neo4j&#xff1f;版本说明 2、Neo4j 的部署和安装Neo4j Web 工具介绍 3、体验 Neo4j加载数据查询数据数据结构 4、Cypher 入门创建数据查询数据关系深度查…