springboot mybatis-plus 对接 sqlserver 数据库时间类型datetime date 转换实体类 LocalDateTime 报错

330 阅读1分钟

问题点 :

在对接sqlserver 什么都配置好了 在 做查询语句时 框架报错

Error attempting to get column ‘SDate’ from result set. Cause: java.sql.SQLException: Error ; uncategorized SQLException; SQL state [null]; error code [0]; Error; nested exception is java.sql.SQLException: Error

1.png

研究了 几个小时 找到了解决方案

框架版本 :

sprin boot 2.0 +

mybatis-plus 3.3.1

mybatis-plus 代码生成器 mybatis-plus-generator: 3.3.2

更改 SQL Server JDBC驱动 依赖 可以解决

    // 报错时 引用的是这个
    //    <dependency>
    //        <groupId>com.microsoft.sqlserver</groupId>
     //       <artifactId>sqljdbc4</artifactId>
   //         <version>4.0</version>
    //    </dependency>

    //最后改成了 这个 就不报错了
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>8.4.1.jre8</version>
        </dependency>

SQL Server JDBC驱动中

sqljdbc和sqljdbc4 应该是有区别的

大家想了解 百度就好

版本 我建议大家注意一下 因为 搜到 很多关于 mysql 数据库遇到这个问题的

我按照mysql 数据的解决方案

重写类

升级mybatis-plus 至 3.5.0+

把实体类型 改成 Date 弃用 LocalDateTime

只有第三种好使

但是我又想用 LocalDateTime

所以我使用了 更改SQL Server JDBC 驱动 依赖

下面再分享一下 我查询到的 mysql 的解决方案

如果遇到 mysql 的这要问题 可以做个参考

本人没尝试过

方案一2.png 3.png 4.png

方案二

重写类 5.png 6.png 7.png

重写类 代码:

package com.erp.yt.common.api.entities.base;

import org.apache.ibatis.type.LocalDateTimeTypeHandler;
import org.springframework.stereotype.Component;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
/**
 * User: Json
 * <p>
 * Date: 2023/3/2
 **/
@Component
public class LocalDateTimeTypeHandlerPlus  extends LocalDateTimeTypeHandler {
    @Override
     public LocalDateTime getResult(ResultSet rs, String columnName) throws SQLException {
             Object object = rs.getObject(columnName);
           if(object==null){
                    return  null;
               }
           return super.getResult(rs, columnName);
     }
}