十、市场活动-分页查询

news2025/6/17 23:35:20

功能需求

①、当市场活动主页面加载完成之后,显示所有数据的第一页;

②、用户在市场活动主页面填写查询条件,点击"查询"按钮,显示所有符合条件的数据的第一页,保持每页显示条数不变

③、实现翻页功能.

*在市场活动主页面,显示市场活动列表和记录的总条数

*默认每页显示条数:10

流程图

一、ActivityMapper

1.ActivityMapper接口

    /**
     * 查询市场活动的列表
     */
    List<Activity> selectActivityByConditionForPage(Map<String,Object> map);

    /**
     * 查询市场活动的条数
     */
    int selectCountOfActivityByCondition(Map<String,Object> map);

2.ActivityMapper映射文件

【起别名】:①tbl_activity---a  ②tbl_user---u*表示

  • 查询的字段有:

a.id(删除,修改根据选中的id)
u1.name as owner(所有者)
a.name(名称)
a.start_date(活动开始时间)
a.end_date,(活动结束时间)
a.cost,(活动花费)
a.description,(活动描述)
a.create_time,(活动创建时间)
u2.name as create_by(活动的创建者)
a.edit_time,(修改活动时间)
u3.name as edit_by(修改者)

  • 使用外连接内连接进行多表查询
  • 通过<where>标签进行条件拼接
  • order by *** desc 进行降序
  • limit a,b 从起点a开始,返回b条数据

【注意】#{***}要和map的key名称一致

    <!-- List<Activity> selectActivityByConditionForPage(Map<String,Object> map);分页查询-->
    <select id="selectActivityByConditionForPage" resultMap="BaseResultMap">
        select a.id,u1.name as owner,a.name,a.start_date,a.end_date,a.cost,a.description,a.create_time,
        u2.name as create_by,a.edit_time,u3.name as edit_by
        from tbl_activity a
        join tbl_user u1 on a.owner=u1.id
        join tbl_user u2 on a.create_by=u2.id
        left join tbl_user u3 on a.edit_by=u3.id
        <where>
            <if test="name!=null and name!=''">
                and a.name like "%"#{name}"%"
            </if>
            <if test="owner!=null and owner!=''">
                and u1.name like "%"#{owner}"%"
            </if>
            <if test="startDate!=null and startDate!=''">
                and a.start_date&gt;=#{startDate}
            </if>
            <if test="endDate!=null and endDate!=''">
                and a.end_date&lt;=#{endDate}
            </if>
        </where>
        order by a.create_time desc
        limit #{beginNo},#{pageSize}
    </select>

返回符合条件的记录数

   <select id="selectCountOfActivityByCondition" resultType="java.lang.Integer">
        select count(*)
        from tbl_activity a
        join tbl_user u1 on a.owner=u1.id
        join tbl_user u2 on a.create_by=u2.id
        left join tbl_user u3 on a.edit_by=u3.id
        <where>
            <if test="name!=null and name!=''">
                and a.name like "%"#{name}"%"
            </if>
            <if test="owner!=null and owner!=''">
                and u1.name like "%"#{owner}"%"
            </if>
            <if test="startDate!=null and startDate!=''">
                and a.start_date&gt;=#{startDate}
            </if>
            <if test="endDate!=null and endDate!=''">
                and a.end_date&lt;=#{endDate}
            </if>
        </where>
    </select>

二、ActivityService

1.ActivityService接口

	/**
	 * 分页查询市场活动
	 */
	List<Activity> queryActivityByConditionForPage(Map<String,Object> map);

	/**
	 * 符合市场活动的条数
	 */
	int queryCountOfActivityByCondition(Map<String,Object> map);

2.ActivityServiceImpl实现类,实现接口,调用mapper方法

	@Override
	public List<Activity> queryActivityByConditionForPage(Map<String, Object> map) {
		return activityMapper.selectActivityByConditionForPage(map);
	}

	@Override
	public int queryCountOfActivityByCondition(Map<String, Object> map) {
		return activityMapper.selectCountOfActivityByCondition(map);
	}

三、ActivityController

【分析】:

1.ajax异步请求,返回的是json对象,,所以方法头是类型是Object,并且用@ResponseBody修饰,返回的map类型转换为json

2.方法形参要和前端ajax的data方法名key保持一致,否则无法匹配

【controller功能】

1.封装参数

2.调用Service

3.生成响应信息

	/**
	 * 根据条件,分页
	 */
	@RequestMapping("/workbench/activity/queryActivityByConditionForPage.do")
	public @ResponseBody Object queryActivityByConditionForPage(String name,String owner,String startDate,String endDate,int pageNo,int pageSize){
		//封装参数
		Map<String,Object> map = new HashMap<>();
		map.put("name",name);
		map.put("owner",owner);
		map.put("startDate",startDate);
		map.put("endDate",endDate);
		map.put("beginNo",(pageNo-1)*pageSize);
		map.put("pageSize",pageSize);
		//调用Service
		List<Activity> activityList = activityService.queryActivityByConditionForPage(map);
		int totalRows = activityService.queryCountOfActivityByCondition(map);
		//生成响应信息
		Map<String,Object> retMap = new HashMap<>();
		retMap.put("activityList",activityList);
		retMap.put("totalRows",totalRows);
		return retMap;
	}

四、前端workbench/activity/index.jsp

【功能】

1.查询:当市场活动主页面加载完成,显示所有数据的第一页和总条数

①在js收集查询的参数

                var name = $("#query-name").val();
                var owner = $("#query-owner").val();
                var startDate = $("#query-startDate").val();
                var endDate = $("#query-endDate").val();
                var pageNo = 1;//页码
                var pageSize = 10;//显示的数量

②ajax发送请求

url是请求的controller

data:是封装的数据 key要和mapper的形参保持一致

 //2.2发送请求
                $.ajax({
                    url: 'workbench/activity/queryActivityByConditionForPage.do',
                    data: {
                        name: name,
                        owner: owner,
                        startDate: startDate,
                        endDate: endDate,
                        pageNo: pageNo,
                        pageSize: pageSize
                    },
                    type: 'post',

③处理响应,解析json

  • data就是返回来的json。有市场活动列表和总条数
  • $("#totalRowsB").text(data.totalRows);//把查询的数据放在totalRowsB的标签里
  • 遍历数组列表activityList 。$.each(遍历的数组,回调函数(index遍历的下标,obj循环变量))
  • 定义字符串,存放市场活动列表数据 var htmlStr = "";
  • htmlStr += "<tr class=\"active\">"; 对表格的“”加上转义字符\
  • htmlStr += "<td><input type=\"checkbox\" value=\"" + obj.id + "\"/></td>";表单值获取,采用"+obj.xxx+"
  • <tbody id="tBody">通过这个代码进行插入$("#tBody").html(htmlStr);
  • text()显示文本信息不能有标签,html()可以有标签
 dataType: 'json',
                    //2.3处理响应 data有两个数据,一个是数组,一个是int
                    success: function (data) {
                        // 总条数
                        $("#totalRowsB").text(data.totalRows);//把查询的数据放在totalRowsB的标签里
                        // 遍历数组列表activityList $.each(遍历的数组,回调函数(index遍历的下标,obj循环变量))
                        // 定义字符串,存放市场活动列表数据
                        var htmlStr = "";
                        $.each(data.activityList, function (index, obj) {
                            // obj和this都是取出的数组元素,htmlStr进行字符串拼接
                            htmlStr += "<tr class=\"active\">";
                            htmlStr += "<td><input type=\"checkbox\" value=\"" + obj.id + "\"/></td>";
                            htmlStr += " <td><a style=\"text-decoration: none; cursor: pointer;\" onclick=\"window.location.href='detail.html';\">" + obj.name + "</a></td>";
                            htmlStr += "<td>" + obj.owner + "</td>";
                            htmlStr += " <td>" + obj.startDate + "</td>";
                            htmlStr += " <td>" + obj.endDate + "</td>";
                            htmlStr += "</tr>";
                        });
                        // 把拼接好的表格字符串 插入到 显示的<tbody>
                        // text()显示文本信息不能有标签,html()可以有标签
                        $("#tBody").html(htmlStr);
                    }

完整的js

            //2.查询。当市场活动主页面加载完成,查询所有数据的第一页和总条数
            queryActivityByConditionForPage();

            //3.按条件查询
            $("#queryActivityBtn").click(function () {
                //按照条件查询
                queryActivityByConditionForPage();
            });

            function queryActivityByConditionForPage(){
                //2.查询。当市场活动主页面加载完成,查询所有数据的第一页和总条数
                //2.1收集查询的参数
                var name = $("#query-name").val();
                var owner = $("#query-owner").val();
                var startDate = $("#query-startDate").val();
                var endDate = $("#query-endDate").val();
                var pageNo = 1;//页码
                var pageSize = 10;//显示的数量
                //2.2发送请求
                $.ajax({
                    url: 'workbench/activity/queryActivityByConditionForPage.do',
                    data: {
                        name: name,
                        owner: owner,
                        startDate: startDate,
                        endDate: endDate,
                        pageNo: pageNo,
                        pageSize: pageSize
                    },
                    type: 'post',
                    dataType: 'json',
                    //2.3处理响应 data有两个数据,一个是数组,一个是int
                    success: function (data) {
                        // 总条数
                        $("#totalRowsB").text(data.totalRows);//把查询的数据放在totalRowsB的标签里
                        // 遍历数组列表activityList $.each(遍历的数组,回调函数(index遍历的下标,obj循环变量))
                        // 定义字符串,存放市场活动列表数据
                        var htmlStr = "";
                        $.each(data.activityList, function (index, obj) {
                            // obj和this都是取出的数组元素,htmlStr进行字符串拼接
                            htmlStr += "<tr class=\"active\">";
                            htmlStr += "<td><input type=\"checkbox\" value=\"" + obj.id + "\"/></td>";
                            htmlStr += " <td><a style=\"text-decoration: none; cursor: pointer;\" onclick=\"window.location.href='detail.html';\">" + obj.name + "</a></td>";
                            htmlStr += "<td>" + obj.owner + "</td>";
                            htmlStr += " <td>" + obj.startDate + "</td>";
                            htmlStr += " <td>" + obj.endDate + "</td>";
                            htmlStr += "</tr>";
                        });
                        // 把拼接好的表格字符串 插入到 显示的<tbody>
                        // text()显示文本信息不能有标签,html()可以有标签
                        $("#tBody").html(htmlStr);
                    }


                });
            }

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

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

相关文章

Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable(续篇)

目录背景意外发现结论背景 上篇Spring MVC(Boot) Servlet 3.0异步处理&#xff0c;DeferredResult和Callable&#xff0c;我把WebMvcConfig 代码加入项目后&#xff0c;会报冲突的问题。如下所示。 requestMappingHandlerMapping: defined by method ‘requestMappingHandlerM…

The 1st Universal Cup Stage 12: ̄Ookayama, April 15-16, 2023 题解

A XOR Tree Path 给一颗树&#xff0c;树上点有黑白两色&#xff0c;每次可以选一个叶子节点&#xff0c;翻转其到根路径上所有点的颜色&#xff0c;问最大黑色点数。 树dp #include<bits/stdc.h> using namespace std; #define MAXN (10000010) #define ll long long…

计及氢能的综合能源优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用国密SSL证书,实现SSL/TLS传输层国密改造

密码是保障网络空间安全可信的核心技术和基础支撑&#xff0c;通过自主可控的国产密码技术保护重要数据的安全&#xff0c;是有效提升我国信息安全保障水平的重要举措。因此&#xff0c;我国高度重视商用密码算法的应用并出台相关政策法规&#xff0c;大力推动国产商用密码算法…

.Net MVC中 视图如何使用路由!!!

配置路由 app.UseEndpoints(endpoints > { endpoints.MapControllerRoute( name: "default", pattern: "{controllerHome}/{actionIndex}/{id?}"); }); 在视图中使用路由 页面跳转常用的路由设置 标签属性 描述 asp-action 指定…

STL容器总结

1.Vector&#xff1a; 本质是动态数组&#xff0c;拥有一段连续的内存空间&#xff0c;并且起始地址不变&#xff0c;能非常好的支持随机存取&#xff0c;即[]操作符&#xff0c;但由于它的内存空间是连续的&#xff0c;所以在中间进行插入和删除会造成内存块的拷贝&#xff0c…

C++之 文件操作(file operation)

目录 引言 一、文本文件 1、写文件 2、读文件 二、二进制文件 1、写文件 2、读文件 引言 程序运行时产生的数据属于临时数据&#xff0c;程序一旦运行结束后&#xff0c;数据也会被释放 通过文件可以将数据保存以持久化 在C中&#xff0c;对文件进行操作要写头文件<f…

图染色问题的NP完全性证明

文章目录1.Overview2.CNF 3-sat3. Gadgets3.1 Concolorous Edges3.2 Starter/Variable Gadget3.3 Splitter Gadget3.4 OR Gadget3.5 Clause Gadget4. To Planar Graph最近在学 6.890&#xff0c;然后 devans 刚好问了我这个问题&#xff0c;然后尝试编了一个证明。 1.Overview…

功能测试面试没人要了!软件自动化测试如何入门?

对于我来说&#xff0c;我做的是web端的测试&#xff0c;做测试也有好几个年头了&#xff0c;每次都是使用手工测试的话&#xff0c;一直是做重复性的工作&#xff0c;既枯燥又繁琐&#xff0c;所以我在两年前自己使用java语言写了一系列的自动化测试脚本&#xff0c;利用的框架…

Java数据结构与算法----动态规划(背包篇)

1. 0/1背包 1.1.算法思路 0/1背包是动态规划、背包问题中最经典的问题啦&#xff01;它主要的问题是&#xff1a; 给定n种物品、这n种物品的重量分别是&#xff0c;价值分别是 &#xff0c;而你有一个容量为C的背包&#xff0c;请问如何求出所能拿的最大价值呢&#xff1f; …

嵌入式开发——串口常见问题和调试手段

1、串口介绍 参考博客&#xff1a;《ARM芯片&#xff08;S5PV210芯片&#xff09;——串口通信详解》、《UART和RS232、RS485的联系和区别、以及对软件编程的影响》&#xff1b; 2、串口常见问题 (1)内核没有开启串口&#xff0c;导致没有产生设备节点&#xff1b; (2)上层应用…

运动想象脑电信号数据集及其预处理方法

脑电信号基础知识 在BCI应用中,获取脑信号的途径包括多种技术方式。其中,EEG是最适合脑机接口应用的技术,主要因为无创性、便携式和高时间分辨率是其的优势。EEG是记录头部表面不同位置之间电位差异的时间记录,它起源于分布在大脑皮层的数百万个神经元的同步电活动的总和。…

我把Solon打包成了native image,速度快的惊人

Solon 一个高效的应用开发框架&#xff1a;更快、更小、更简单。https://solon.noear.org/ 我刚开始对 Solon 感兴趣的原因&#xff0c;就是启动快、包体积小&#xff0c;用了一段时间之后&#xff0c;发现 Solon 使用 GraalVM native iamge 打包有一些问题&#xff0c;我把问题…

Cache;高速缓冲存储器

高速缓冲存储器 概述 ​ 在多体并行存储系统中&#xff0c;由于IO设备向主存请求的级别高于CPU访存&#xff0c;这就出现了CPU等待IO设备访存的现象&#xff0c;导致CPU空等一段时间&#xff0c;甚至等待几个周期&#xff0c;从而降低了CPU的工作效率&#xff0c;为了避免CPU…

Eclipse环境搭建并且运行wordcount程序

一、安装Hadoop插件 1. 所需环境 hadoop2.0伪分布式环境平台正常运行 所需压缩包&#xff1a;eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz           在Linux环境下运行的eclipse软件压缩包,解压后文件名为eclipse           hadoop2x-eclipse-plugin-m…

【Mysql】事物处理(TransAction Processing)

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶最近在复习mysql&#xff0c;复习到了mysql事物处理&#xff08;TransAction&#xff09;&#xff0c;帮自己回顾一下&#xff0c;如果你也想了解什么是mysql的事物处理&#xff0c;希望这篇…

【SQL Server】无需公网IP,就可以远程连接SQL Server数据库

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.本地网页发布 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 1.前言 数据库的重要性相信大家…

基于html+css的自适应展示3

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

MySQL--库的操作--校验规则对于数据库的影响--0409

目录 1.库的基础操作 查看数据库 创建数据库 删除数据库 查看建库语句 修改数据库 2.字符集和字符集校验规则 2.1 查看系统默认字符集以及校验规则 2.2 使用特定的字符集创建数据库 2.3 不同校验规则对数据库的影响 2.3.1 大小写验证 2.3.2 排序验证 3.备份和恢复 3.1…

开启单细胞及空间组学行业发展黄金时代!首届国际单细胞及空间组学大会在穗闭幕

2023年4月16日&#xff0c;首届TICSSO国际单细胞及空间组学大会圆满闭幕&#xff0c;本次大会吸引了2000余位来自产、学、研、资、医、政、媒等业界人士齐聚羊城&#xff0c;注册总人数5398人&#xff0c;网络播放总量达548245人次&#xff0c;网络观看覆盖美国、德国、日本、澳…