2.x mybatisPlus使用LocalDateTime,LocalDate

可能發(fā)生的報(bào)錯(cuò)信息:

Cause: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.time.LocalDate栽烂;

解決方案:

mybatis-spring-boot-starter 升級(jí)至->2.1.1

com.alibaba.druid 升級(jí)至->1.2.1

mysql-connector-java 升級(jí)至->5.1.46,

升級(jí)之前的版本是:

mybatis-spring-boot-starter 1.3.0

com.alibaba.druid 1.0.7

mysql-connector-java 5.1.30

升級(jí)之后如果如果還有問(wèn)題

查詢(xún)可能會(huì)有以下報(bào)錯(cuò):

org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'orderTime' from result set. Cause: java.sql.SQLFeatureNotSupportedException: getObject with type

; SQL []; getObject with type; nested exception is java.sql.SQLFeatureNotSupportedException: getObject with type

Caused by: java.sql.SQLFeatureNotSupportedException: getObject with type

at io.shardingjdbc.core.jdbc.unsupported.AbstractUnsupportedOperationResultSet.getObject(AbstractUnsupportedOperationResultSet.java:223)

at org.apache.ibatis.type.LocalDateTimeTypeHandler.getNullableResult(LocalDateTimeTypeHandler.java:38)

at org.apache.ibatis.type.LocalDateTimeTypeHandler.getNullableResult(LocalDateTimeTypeHandler.java:28)

解決方案:

在自己項(xiàng)目下創(chuàng)建mybatis相同包路徑org.apache.ibatis.type的LocalDateTimeTypeHandler類(lèi).

package org.apache.ibatis.type;

import java.sql.*;

import java.time.Instant;

import java.time.LocalDateTime;

import java.time.ZoneOffset;

import java.time.format.DateTimeFormatter;

/**

* @className: LocalDateTimeTypeHandler

* @author: 112609

* @date: 2022-04-08 17:39

* @description: TODO

*/

public class LocalDateTimeTypeHandler implements TypeHandler<LocalDateTime> {

? ? private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

? ? @Override

? ? public void setParameter(PreparedStatement preparedStatement, int i, LocalDateTime localDateTime, JdbcType jdbcType) throws SQLException {

? ? ? ? if(localDateTime == null) {

? ? ? ? ? ? preparedStatement.setTimestamp(i, null);

? ? ? ? } else {

? ? ? ? ? ? long epochMilli = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();

? ? ? ? ? ? Timestamp date = new Timestamp(epochMilli);

? ? ? ? ? ? preparedStatement.setTimestamp(i, date);

? ? ? ? }

? ? }

? ? @Override

? ? public LocalDateTime getResult(ResultSet resultSet, String columnName) throws SQLException {

? ? ? ? Timestamp timestamp = resultSet.getTimestamp(columnName);

? ? ? ? if(timestamp == null){

? ? ? ? ? ? return null;

? ? ? ? }else {

? ? ? ? ? ? final Instant instant = timestamp.toInstant();

? ? ? ? ? ? return instant.atZone(ZoneOffset.of("+8")).toLocalDateTime();

? ? ? ? }

? ? }

? ? @Override

? ? public LocalDateTime getResult(ResultSet resultSet, int columnIndex) throws SQLException {

? ? ? ? Date date = resultSet.getDate(columnIndex);

? ? ? ? if (date == null) {

? ? ? ? ? ? return null;

? ? ? ? } else {

? ? ? ? ? ? final Instant instant = date.toInstant();

? ? ? ? ? ? return instant.atZone(ZoneOffset.of("+8")).toLocalDateTime();

? ? ? ? }

? ? }

? ? @Override

? ? public LocalDateTime getResult(CallableStatement callableStatement, int columnIndex) throws SQLException {

? ? ? ? Date date = callableStatement.getDate(columnIndex);

? ? ? ? if (date == null) {

? ? ? ? ? ? return null;

? ? ? ? } else {

? ? ? ? ? ? final Instant instant = date.toInstant();

? ? ? ? ? ? return instant.atZone(ZoneOffset.of("+8")).toLocalDateTime();

? ? ? ? }

? ? }

}

如果使用sharedingJdbc分表組件時(shí)

用了LocalDate類(lèi)型的字段作為分表邏輯渺氧,則可能還會(huì)出現(xiàn)java.sql.Date can not be cast to java.time.localDate, 此時(shí)localDate類(lèi)型的分表字段應(yīng)使用 java.sql.Date晦毙,而不應(yīng)該使用LocalDate, 原因也是顯而易見(jiàn)的乒裆,因?yàn)榉直磉壿嬙赑reparedStatment.setParameter()之后卷员,代碼清單如下所示:

public final class DayShardingTableAlgorithm implements PreciseShardingAlgorithm<Date> {

? ? @Override

? ? public String doSharding(Collection<String> tableNames, PreciseShardingValue<Date> shardingValue) {

? ? ? ? java.util.Date date = new java.util.Date(shardingValue.getValue().getTime());

? ? ? ? final LocalDate localDate = date.toInstant().atZone(ZoneOffset.of("+8")).toLocalDate();

? ? ? ? return tableNames.stream().filter(e ->e.endsWith(String.valueOf(localDate.getDayOfMonth()))).findFirst().orElseThrow(() -> new UnsupportedOperationException());

? ? }

}

如果這篇文章解決了你的問(wèn)題匣沼,請(qǐng)不要白嫖我泉唁,來(lái)個(gè)一鍵三連哦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吴趴,隨后出現(xiàn)的幾起案子菱蔬,更是在濱河造成了極大的恐慌,老刑警劉巖史侣,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴泌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惊橱,警方通過(guò)查閱死者的電腦和手機(jī)蚪腐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)税朴,“玉大人回季,你說(shuō)我怎么就攤上這事≌郑” “怎么了泡一?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)觅廓。 經(jīng)常有香客問(wèn)我鼻忠,道長(zhǎng),這世上最難降的妖魔是什么杈绸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任帖蔓,我火速辦了婚禮,結(jié)果婚禮上瞳脓,老公的妹妹穿的比我還像新娘塑娇。我一直安慰自己,他們只是感情好劫侧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布埋酬。 她就那樣靜靜地躺著,像睡著了一般烧栋。 火紅的嫁衣襯著肌膚如雪写妥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天劲弦,我揣著相機(jī)與錄音耳标,去河邊找鬼。 笑死邑跪,一個(gè)胖子當(dāng)著我的面吹牛次坡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播画畅,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼砸琅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了轴踱?” 一聲冷哼從身側(cè)響起症脂,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淫僻,沒(méi)想到半個(gè)月后诱篷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雳灵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年棕所,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悯辙。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琳省,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躲撰,到底是詐尸還是另有隱情针贬,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布拢蛋,位于F島的核電站桦他,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谆棱。R本人自食惡果不足惜瞬铸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望础锐。 院中可真熱鬧嗓节,春花似錦、人聲如沸皆警。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)信姓。三九已至鸵隧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間意推,已是汗流浹背豆瘫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菊值,地道東北人外驱。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓育灸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親昵宇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磅崭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容