SSM和layui数据表格查询日期的时候的问题

首先贴一个POJO

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TeachIn {
    private Integer id;         //宣讲会唯一id主键
    private String name;        //宣讲会名字

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date release_time;          //宣讲会时间
    private String company_job; //招聘职位
    private String profession;  //招聘专业
    private String xueli;       //学历
    private String linkman;     //联系人
    private String phone;       //联系人电话
    private String company_address;     //公司地址
    private String email;       //联系邮箱
    private String about_us;    //公司简介
}

在做一个功能的时候:就是根据日期来查询数据库如图:
在这里插入图片描述
打开jsp时,数据表格自动渲染数据表格,并且开启分页模式.
封装了一个类并且继承这个TeachIn类

/**
 * 自定义查询条件类
 */
@Data
public class TeachInVo extends TeachIn {
    //注意page和limit属性要与layui数据表格参数一致
    private Integer page;  //当前页码
    private Integer limit;  //每页显示数据

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date time_search;   //搜索时间
}

写出一个查询方法
mapper

<mapper namespace="com.xgx.dao.TeachInDAO">
    <select id="findAll" resultType="TeachIn">
        select *
        from teach_in
        <where>
            <if test="name != null and name != ''">
                and name like concat("%",#{name},"%")
            </if>
            <if test="time_search != null and time_search !=''">
                <![CDATA[ and DATE_FORMAT(release_time, '%Y-%m-%d') = DATE_FORMAT(#{time_search}, '%Y-%m-%d')  ]]>

            </if>
        </where>
    </select>
    </mapper>

conller类

    @RequestMapping("/findAllTeachIn")
    @ResponseBody
    public DataGridViewResult findAllTeachIn(TeachInVo teachInVo){
        System.out.println("teachInVo = " + teachInVo);

        //设置分页信息(当前页码,每页显示数量)
        PageHelper.startPage(teachInVo.getPage(),teachInVo.getLimit());
        //调用分页查询列表账单
        List<TeachIn> teachInList = teachInService.findAll(teachInVo);
        //创建分页对象
        PageInfo<TeachIn> pageInfo = new PageInfo<TeachIn>(teachInList);
        //将数据表格返回的key保存到Map集合中
        DataGridViewResult dataGridViewResult = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        System.out.println("dataGridViewResult = " + dataGridViewResult);
        return dataGridViewResult;
    }

其中这个dataGridViewResult
此类封装layui数据表格中返回的数据

//此类封装layui数据表格中返回的数据
@Data
@NoArgsConstructor
public class DataGridViewResult {
    private Integer code=0;
    private String msg="";
    private Long count;
    private Object data;

    /**
     * 封装数据表格
     * @param count     查询到的总条数
     * @param data      结果集
     */

    public DataGridViewResult(Long count, Object data) {
        this.count = count;
        this.data = data;
    }
}

jsp代码如下

<%--        搜索信息开始--%>

        <fieldset class="table-search-fieldset">
            <legend>搜索信息</legend>
            <div style="margin: 10px 10px 10px 10px">
                <form class="layui-form layui-form-pane">
                    <div class="layui-form-item">

                        <div class="layui-inline">
                            <label class="layui-form-label">招聘会名</label>
                            <div class="layui-input-inline">
                                <input type="text" name="name" autocomplete="off" class="layui-input" >
                            </div>
                        </div>

                        <div class="layui-inline">
                            <label class="layui-form-label">发布日期</label>
                            <div class="layui-input-inline">
                                <input type="text" name="time_search" autocomplete="off" class="layui-input" id="dateA">
                            </div>
                        </div>


                        <div class="layui-inline">
<button class="layui-btn layui-btn-primary"  lay-submit lay-filter="doSearch" ><i class="layui-icon"></i> 搜 索</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
                        </div>

                    </div>
                </form>
            </div>
        </fieldset>

<%--    搜索信息结束--%>

<%--数据表格开始--%>
        <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<%--数据表格结束--%>

<script>
layui.use(['form', 'jquery','table','layer','laydate'], function () {
        var $ = layui.jquery;       //layui的jquery模块
        var form = layui.form;      //layui的表单模块
        var table = layui.table;    //layui的数据表格模块
        var layer =layui.layer;     //layui弹出层模块
        var laydate = layui.laydate;    //layui的渲染日期模块

        //执行一个laydate实例
        laydate.render({
            elem: '#dateA'      //指定元素
            // ,type: 'datetime'
        });

        var tableIns=table.render({
            elem: '#currentTableId',
            url: '${pageContext.request.contextPath}/instructor/findAllTeachIn',
            page:true,                 //开启分页
            toolbar:"#toolbarDemo",  //头部工具栏
            cols: [[
                {type:"checkbox",fixed:"left",width: 80},
                {field: 'id', width: 80, title: 'ID', sort: true},
                {field: 'name', width: 350, title: '招聘会名'},
                {field: 'release_time', width: 150, title: '发布时间'},
                {title: "操作",toolbar:'#barDemo'}
            ]]
        });

        //监听搜索按钮提交事件
        form.on("submit(doSearch)",function (data) {
            //自带刷新方法
            console.log(data);
            console.log(data.field);
            tableIns.reload({
                where:data.field,   //查询条件
                page: {
                    curr:1
                }
            })

            return false;  //禁止页面刷新
        })
</script>

按理说就可以查到数据.于是开始测试
在这里插入图片描述
一开始也查到数据了,
当我模糊查询招聘会名的时候:
如图:
在这里插入图片描述
也是可以查到的.
当我查询发布日期时
在这里插入图片描述
就遇到了这个报错:
数据接口请求异常:parsererror
于是我F12
查询到这个请求
在这里插入图片描述
发现请求正常发送但是响应头是这样的
在这里插入图片描述
也没有任何数据显示
在这里插入图片描述
Content-Length: 0
说的应该是HTTP头的Content-Length: 0,表示的是返回是内容字节长度为0,即是请求返回包体是空的
于是为了找出这个错误我有查后台打印:
在这里插入图片描述
日志报错这个错误
Closing non transactional SqlSession
感觉应该是持久层的问题.于是去查看写的mapper没有发现问题:
于是写了一个测试类:

    @Test
    public void test9(){
        Date date=new Date();
        System.out.println("date = " + date);
        long l=Date.parse("Mon 21 Feb 2021 13:3:00");
        Date day=new Date(l);  //day中时间为1997年 1月6号星期一,13:3:00。
        System.out.println("day = " + day);
        TeachInVo teachInVo=new TeachInVo();
        teachInVo.setTime_search(day);
        System.out.println("teachInVo = " + teachInVo);
        List<TeachIn> all = teachInDAO.findAll(teachInVo);
        System.out.println("all = " + all);

    }

打印出的即通过如图

DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
date = Mon Feb 22 14:32:42 CST 2021
day = Sun Feb 21 13:03:00 CST 2021
teachInVo = TeachInVo(page=null, limit=null, time_search=Sun Feb 21 13:03:00 CST 2021)
DEBUG [main] - Creating a new SqlSession
DEBUG [main] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b67bb7e] was not registered for synchronization because synchronization is not active
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b67bb7e]

发现java.util.Date和数据库中的Datetime/Date所对应
于是查找错误:
最后一个 Caused by:中
Caused by: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
上网查询发现:

在mybatis 3.3.0中对于时间参数进行比较时引入了一个bug. 如果拿传入的时间类型参数与空字符串 ‘’ 进行对比判断则会引发异常.
所以在使用时间和字符串进行比较的代码,只保留非空判断就正常了。

就是把字段判空字符串删除就行了
修改前

            <if test="time_search != null and time_search !=''">
                <![CDATA[ and DATE_FORMAT(release_time, '%Y-%m-%d') = DATE_FORMAT(#{time_search}, '%Y-%m-%d')  ]]>
            </if>

在这里插入图片描述

修改后

            <if test="time_search != null ">
                <![CDATA[ and DATE_FORMAT(release_time, '%Y-%m-%d') = DATE_FORMAT(#{time_search}, '%Y-%m-%d')  ]]>
            </if>

最后
在这里插入图片描述

参考链接:
http://www.mamicode.com/info-detail-2302871.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值