Mybatis——关于实体构造函数与Mybatis字段映射的坑

本文记录了一位开发者遇到的MyBatis在处理查询结果时字段类型匹配错误的问题。错误源于实体类缺少默认构造函数,导致字段顺序匹配错误。解决方案是为实体类添加无参数构造函数。问题总结强调了实体类构造函数的重要性以及使用MyBatis的Example或Wrapper类可以避免此类问题。
摘要由CSDN通过智能技术生成

现象

今天一位同事找我看一个很奇怪的问题:
执行一个单表的查询语句,结果老是报字段类型不匹配的错误,错误日志如下:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'user_name' from result set.  Cause: java.sql.SQLDataException: Cannot convert string 'admin' to java.sql.Timestamp value
; Cannot convert string 'admin' to java.sql.Timestamp value; nested exception is java.sql.SQLDataException: Cannot convert string 'admin' to java.sql.Timestamp value] with root cause

com.mysql.cj.exceptions.DataConversionException: Cannot convert string 'admin' to java.sql.Timestamp value
	at com.mysql.cj.result.AbstractDateTimeValueFactory.createFromBytes(AbstractDateTimeValueFactory.java:123) ~[mysql-connector-java-8.0.21.jar:8.0.21]
	at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeByteArray(MysqlTextValueDecoder.java:134) ~[mysql-connector-java-8.0.21.jar:8.0.21]
	at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:133) ~[mysql-connector-java-8.0.21.jar:8.0.21]
	at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:241) ~[mysql-connector-java-8.0.21.jar:8.0.21]

实体文件:


@Builder
@Data
@Table(name = "sys_logininfor")
public class SysLogininfor implements Serializable
{
   
    private static final long serialVersionUID = 1L;

    @Id
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值