springboot + layui ,使用时间作为参数进行数据库的查询。springboot的时间操作真的让我头疼,传递参数和取值看网上说的乱七八糟。等有时间了我要好好整理整理这部分内容。

一、数据库存储为Date,查询值也是Date

这种情况就是,数据库中的日期格式为date,既没有时间。然后我们查询的关键字也是date类型。

前端时间选择页面
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" id="searchtime" name="searchtime" type="text"
           placeholder="请选择查询时间" autocomplete="off">
</div>
<div class="layui-inline layui-show-xs-block">
    <button class="layui-btn" onclick="instockTimeSearch()">
        <i class="layui-icon"></i></button>
</div>

使用的是 layui,所以要加上layui组件才能显示时间:

var time; //定义一个全局的time变量,用于接受layui监听的时间值
laydate.render({
	  elem: '#searchtime'
	   , showBottom: false
	   , trigger: 'click'
	   , done: function (value) {	// 获取选取时间后的值
	       time = value;
	   }
});

获取时间选择器的值,并进行判断
function instockTimeSearch() {
    //console.log(time);
    if (typeof(time) === "undefined"){	// 判断时间是否输入,为空的话显示提示
        layer.msg('请输入查询时间!', {icon: 5, time: 1000});
    } else {
        window.location.href = "/usermanage/timeSearch/" + time;
    }
}

springboot后台接收日期参数并进行查找
@GetMapping("/timeSearch/{time}")
    public String getStockingByTime(Model model,
                                    @PathVariable("time") Date time,
                                    @RequestParam(value = "pn", defaultValue = "1") int pn,
                                    @RequestParam(value = "size", defaultValue = "8") int size){
        PageHelper.startPage(pn, size);
        List<Stocking> stockingList = stockingService.getStockingByTime(time);
        PageInfo<Stocking> page = new PageInfo<>(stockingList);
        model.addAttribute("page", page);
        return "instock/instock-list";
    }

上面代码运行要注意:要在 application.properties文件中添加这样的一句设置:spring.mvc.date-format=yyyy-MM-dd。否则,控制层函数是不会接收到Date类型的time参数的。


二、数据库为Datetime类型,查询值只用日期

这种情况是,数据库存储日期时间,用datetime;但是我们在查询时不想精确到时间,只想根据日期查询。

mapper 文件
<resultMap id="LogMap" type="pinksmile.database.domain.SystemLog">
        <result column="id" javaType="Integer" jdbcType="INTEGER" property="id"/>
        <result column="username" javaType="String" jdbcType="VARCHAR" property="username"/>
        <result column="method" javaType="String" jdbcType="VARCHAR" property="method"/>
        <result column="describes" javaType="String" jdbcType="VARCHAR" property="describes"/>
        <result column="time" javaType="java.util.Date" jdbcType="TIMESTAMP" property="time"/>
</resultMap>
<select id="getLogByDatetime" resultMap="LogMap">
    select * from syslog where DATE_FORMAT(time, '%Y-%m-%d') = #{time}
</select>

这里DATE_FORMAT(time,'%Y-%m-%d')是将数据库中时间转换为指定格式,这里就相当于提取了日期。

实体类

springboot筛选最近坐标 springboot查询所有数据_bc

Dao接口

参数使用的是String类型

List<SystemLog> getLogByDatetime(String time);

Service层就不用说了

Controller层
@GetMapping("/timeSearchLog/{time}")
    public String getLogByTime(Model model,
                                    @PathVariable("time") String time,
                                    @RequestParam(value = "pn", defaultValue = "1") int pn,
                                    @RequestParam(value = "size", defaultValue = "8") int size){
        PageHelper.startPage(pn, size);
        List<SystemLog> systemLogList = systemlogService.getLogByDatetime(time);
        PageInfo<SystemLog> page = new PageInfo<>(systemLogList);
        model.addAttribute("page", page);
        return "systemlog/systemlog-list";
    }

这里是重点,我看网上好多都是转换时间格式,转过来转过去的,很麻烦!这个是我自己试验得出的方法。

我们从前台获取传过来的时间参数,在后台我们用String类型接收,然后调用接口就不用转换为date类型的了。直接使用即可。
这里使用String的原因是,在mapper文件中,我们根据时间查询时使用的参数是String类型的。

下面把前台传参的部分也贴上,可以更好的参考:

springboot筛选最近坐标 springboot查询所有数据_数据库_02