如何实现日期选择器的自动查询数据(暴力版本)

我想通过刷卡时间来筛选数据,例如,我想查询2024/04/16号到2024/04/20号的所有数据。那么我通过日期选择器来自动帮我筛选。

一、后端数据的类型以及准备工作

controller层

实体类

private Date time;

service层与impl

public interface AttaendanceService extends IService<Attaendance> {
    IPage pageCC(IPage<Attaendance> page, Wrapper wrapper);
}

public class AttaendanceServiceImpl extends ServiceImpl<AttaendanceMapper, Attaendance> implements AttaendanceService {
    @Resource
    private AttaendanceMapper attaendanceMapper;

    @Override
    public IPage pageCC(IPage<Attaendance> page, Wrapper wrapper) {
        return attaendanceMapper.pageCC(page, wrapper);
    }
}

mapper层(这个报错不用理会)

@Mapper
public interface AttaendanceMapper extends BaseMapper<Attaendance> {
    IPage pageCC(IPage<Attaendance> page, @Param(Constants.WRAPPER) Wrapper wrapper);
}

.xml

<mapper namespace="com.wms.mapper.AttaendanceMapper">
    <select id="pageCC" resultType="com.wms.entity.Attaendance">
        select * from attaendance ${ew.customSqlSegment}
    </select>

    

</mapper>

sql是datetime类型,实体类private Date time;(注意这里的Date我用的是java.util.Date)

二、前端

1.日期选择器

我这里用的是elementui的日期选择器,这里的value1要写在data里(注意value是个数组,用来保存开始和结束时间),我想到是在我选择日期后自动查询这里就用到了监听, 完成日期选择后@change它会被监听,调用loadRecord函数。

<template>  
  <!-- Element UI 的日期范围选择器组件 -->  
  <el-date-picker  
    <!-- 绑定 v-model 到 value1,用于双向数据绑定,即选择日期后会更新 value1 的值,反之亦然 -->  
    v-model="value1"  
    <!-- 设置选择器类型为日期范围选择器 -->  
    type="daterange"  
    <!-- 设置日期范围之间的分隔符为“至” -->  
    range-separator="至"  
    <!-- 设置开始日期的占位符 -->  
    start-placeholder="开始日期"  
    <!-- 设置结束日期的占位符 -->  
    end-placeholder="结束日期"  
    <!-- 设置默认的时间范围,从 00:00:00 到 23:59:59 -->  
    :default-time="['00:00:00', '23:59:59']"  
    <!-- 设置选择器的值格式,这里设置为 "yyyy-MM-dd HH:mm" -->  
    value-format="yyyy-MM-dd HH:mm"  
    <!-- 当选择器的值改变时,触发 handleDateChange 方法 -->  
    @change="handleDateChange"  
  >  
  </el-date-picker>  
</template>

2.handleDateChange函数

  handleDateChange(value) {  
//如果日期选择器不是空的就调用loadRecod函数查询符合的数据
      if (value ) {  
        this.loadRecord(); 
      }
        else{
//如果日期选择器是空的就查询所有数据
          this.loadPost(); 
      }   
    }, 

3.loadRecord函数

// 定义 loadRecord 方法,用于加载
loadRecord() {  
  // 使用 $axios 进行 POST 请求  
  this.$axios  
    // 请求的 URL,由基础 URL 和具体接口路径拼接而成  
    .post(this.$httpUrl + "/atqwewqce/liweqbytime", {  
      // 请求体中的 pageSize,表示每页显示的记录数  
      pageSize: this.pageSize,  
      // 请求体中的 pageNum,表示当前页码  
      pageNum: this.pageNum,  
      // 请求体中的 param 对象,包含开始日期和结束日期  
      param: {  
        // 开始日期,从 value1 数组的第一个元素获取  
        startDate: this.value1[0],  
        // 结束日期,从 value1 数组的第二个元素获取  
        endDate: this.value1[1]  
      },  
    })  
    // .then 返回一个 Promise,其 resolve 值为请求的响应数据  
    .then((res) => res.data)  
    // .then 再次处理响应数据      .then((res) => {  
      // 在控制台打印响应数据   
      // 检查响应状态码  
      if (res.code == 200) {  
        // 如果状态码为 200,表示请求成功  
        // 将响应数据中的 data 赋值给 tableData,用于表格展示  
        this.tableData = res.data;  
        // 将响应数据中的 total 赋值给 total,用于分页展示  
        this.total = res.total;  
      } else {  
        // 如果状态码不是 200,则弹出警告提示获取数据失败  
        alert("获取数据失败");  
      }  
    });  
},

4.loadpost函数

// 定义一个名为loadPost的方法  
loadPost() {  
  
  // 使用axios库发送一个POST请求  
  this.$axios  
    .post(  
      // 请求的URL,由基础URL和具体的路径拼接而成  
      this.$httpUrl + "/qweqwence/listPagqwece",  
      // 请求的数据体,包含以下三个属性  
      {  
        // 每页显示的记录数  
        pageSize: this.pageSize,  
        // 当前页码  
        pageNum: this.pageNum,  
        // 额外的查询参数,这里只有一个name属性  
        param: {  
          name: this.name,  
        },  
      }  
    )  
    // 请求成功后,获取响应体中的数据  
    .then((res) => res.data)  
    // 对获取到的数据进行处理  
    .then((res) => {  
      // 在控制台打印响应数据  
      console.log(res);  
      // 检查响应中的code字段,判断请求是否成功  
      if (res.code == 200) {  
        // 如果请求成功,将响应数据赋值给tableData变量  
        this.tableData = res.data;  
        // 将响应中的total字段赋值给total变量,可能表示总记录数  
        this.total = res.total;  
      } else {  
        // 如果请求失败,则弹出警告框提示用户  
        alert("获取数据失败");  
      }  
    });  
},  
  
// 方法的结束  
},

三、后端

至此前端已经可以把开始时间和结束时间传给后端,后端接收后先处理数据然后比时间的大小返回给后端。注意我的pagecc在准备工作中有。

@PostMapping("/listPagebytime")  
public Result listBytime(@RequestBody QueryPageParam query) {  
    try {  
        // 获取请求体中的参数集合  
        HashMap param = query.getParam();  
  
        // 从参数集合中获取开始日期和结束日期字符串  
        String startDate = (String) param.get("startDate");  
        String endDate = (String) param.get("endDate");  
  
        // 初始化分页对象  
        Page<Attaendance> page = new Page<>();  
  
        // 设置当前页码  
        page.setCurrent(query.getPageNum());  
  
        // 设置每页大小  
        page.setSize(query.getPageSize());  
  
        // 初始化日期格式化对象  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  
        // 将开始日期字符串转换为java.util.Date对象  
        java.util.Date startDateUtil = sdf.parse(startDate);  
  
        // 将结束日期字符串转换为java.util.Date对象  
        java.util.Date endDateUtil = sdf.parse(endDate);  
  
        // 将java.util.Date对象转换为java.sql.Date对象,用于数据库查询  
        java.sql.Date startDateSql = new java.sql.Date(startDateUtil.getTime());  
        java.sql.Date endDateSql = new java.sql.Date(endDateUtil.getTime());  
  
        // 创建LambdaQueryWrapper对象,用于构建查询条件  
        LambdaQueryWrapper<Attaendance> lambdaQueryWrapper = new LambdaQueryWrapper<>();  
  
        // 设置查询条件:时间字段大于等于开始日期  
        lambdaQueryWrapper.ge(Attaendance::getTime, startDateSql);  
  
        // 设置查询条件:时间字段小于等于结束日期  
        lambdaQueryWrapper.le(Attaendance::getTime, endDateSql);  
  
        // 执行分页查询,获取结果  
        IPage<Attaendance> result = attaendanceService.pageCC(page, lambdaQueryWrapper);  
  
        // 返回查询结果,包括记录列表和总记录数  
        return Result.suc(result.getRecords(), result.getTotal());  
    } catch (Exception e) {  
        // 捕获并打印异常信息  
        e.printStackTrace();  
    }  
    // 如果发生异常,则返回失败结果  
    return Result.fail();  
}

最近更新

  1. TCP协议是安全的吗?

    2024-04-21 08:36:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-21 08:36:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-21 08:36:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-21 08:36:02       20 阅读

热门阅读

  1. 富格林:深究受害原因安全规避

    2024-04-21 08:36:02       15 阅读
  2. declare,泛型,type,infer基本接介绍

    2024-04-21 08:36:02       12 阅读
  3. 如何排查oracle连接数不足问题

    2024-04-21 08:36:02       14 阅读
  4. ES6的Set与Map

    2024-04-21 08:36:02       13 阅读
  5. Q&A | ZStack替代VMware实问实答

    2024-04-21 08:36:02       16 阅读
  6. 数据结构(data structure)(3)栈和队列

    2024-04-21 08:36:02       12 阅读