解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date

本文详细介绍了如何在XML配置中将字段类型设置为java.util.Date,包括bean定义、hibernate映射及数据库字段类型的调整。

解决方法是 设置xml里面字段的类型为:java.util.Date。加红部分。

1. beanl里面private Date ulLoginDate;

2.hibernate的xml里面是

<property name="ulLoginDate" type="java.util.Date">
            <column name="ul_loginDate" length="19">
                <comment>登录时间</comment>
            </column>
        </property>
3.数据库里面字段类型:datetime

这个错误信息: ``` Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String ``` 说明你在执行数据库查询时,试图将 `java.util.Date` 类型与 `String` 类型进行比较,而这种比较是不合法的,Java 不允许不同类型的对象直接比较,尤其是在使用如 Hibernate、MyBatis 等 ORM 框架时,或者在使用 `JPA` 查询时。 --- ## 🔍 问题原因详解 ### ✅ 你遇到的典型场景可能是: ### 场景1:在 **MyBatis XML 映射文件**中,你将 `Date` 类型参数与数据库中的 `VARCHAR` 类型字段进行了比较。 例如: ```xml <select id="selectByDate" resultType="..."> SELECT * FROM my_table WHERE create_time = #{dateParam} </select> ``` 而 `create_time` 是 `VARCHAR` 类型,`#{dateParam}` 是 `java.util.Date` 类型。这时就会报错。 --- ### 场景2:在 **HQL(Hibernate Query Language)** 或 **Spring Data JPA** 查询中,字段类型是 `String`,但你传入的是 `Date`。 ```java @Query("SELECT e FROM Entity e WHERE e.dateField = ?1") List<Entity> findByDate(Date date); ``` 而 `dateField` 是数据库中的 `VARCHAR` 字段,映射为 Java 中的 `String` 类型,这时就会类型不匹配。 --- ### 场景3:在 **Java 代码中直接比较 `Date` 和 `String`**,例如: ```java if (myDate.equals(myString)) { ... } ``` 这种比较在运行时也会抛出异常。 --- ## ✅ 解决方案 ### ✅ 方案1:确保类型一致(推荐) 将 `Date` 转换为 `String`,再传入查询参数。 #### Java代码示例: ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = sdf.format(dateParam); ``` #### XML 中使用: ```xml <select id="selectByDate" resultType="..."> SELECT * FROM my_table WHERE create_time = #{dateString} </select> ``` --- ### ✅ 方案2:修改数据库字段类型为 `DATE` 或 `DATETIME` 如果你的字段是 `VARCHAR` 类型但存储的是日期字符串,建议改为 `DATE`、`DATETIME` 或 `TIMESTAMP` 类型。 例如: ```sql ALTER TABLE my_table MODIFY create_time DATETIME; ``` 然后在 Java 中映射为 `java.util.Date` 类型即可。 --- ### ✅ 方案3:在查询时将字段转换为时间类型(MySQL 示例) 如果你不能修改字段类型,可以在 SQL 中进行类型转换: ```xml <select id="selectByDate" resultType="..."> SELECT * FROM my_table WHERE STR_TO_DATE(create_time, '%Y-%m-%d %H:%i:%s') > #{dateParam} </select> ``` --- ## ✅ 总结 | 问题 | 原因 | 解决方案 | |------|------|----------| | `invalid comparison: Date and String` | 数据库字段类型与 Java 参数类型不匹配 | 1. 修改字段类型<br>2. 转换 Java 参数为 String<br>3. SQL 中转换字段为 Date | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值