エラーログは以下のとおりです。:
2020-07-29 17:46:47.767 ERROR 6976 --- [nio-8553-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'create_time' from result set. Cause: java.sql.SQLFeatureNotSupportedException
; null; nested exception is java.sql.SQLFeatureNotSupportedException] with root cause
java.sql.SQLFeatureNotSupportedException: null
依存バージョン
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
解決方法:
- グローバル・コンフィギュレーションでの dateType の設定。
gc.setDateType(DateType.ONLY_DATE);
- データソース構成での型変換
DataSourceConfig dsc = new DataSourceConfig();
dsc.setTypeConvert(new MySqlTypeConvert() {
// カスタムデータベーステーブルフィールド型変換オプション
@Override
public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("タイプを変換する:" + fieldType);
//データベースの日時を日付に変換する
if ( fieldType.toLowerCase().contains( "datetime" ) ) {
return DbColumnType.DATE;
}
return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
}
});
- ドルイド・バージョン1.1.18の改善(ただし、ある場所の問題のためにプロジェクト依存のバージョンを変更するのは決して良いことではありません)
最初の2つの解の解析
// コード生成オブジェクト
AutoGenerator mpg = new AutoGenerator();
// データソース構成オブジェクト
DataSourceConfig dsc = new DataSourceConfig();
// 型変換を表示する
dsc.setTypeConvert(new MySqlTypeConvert() {
// カスタムデータベーステーブルフィールド型変換オプション
@Override
public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("タイプを変換する:" + fieldType);
//データベースの日時を日付に変換する
if ( fieldType.toLowerCase().contains( "datetime" ) ) {
return DbColumnType.DATE;
}
return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
}
});
// データソース構成を設定する
mpg.setDataSource(dsc);
setDataSource(final DataSourceConfig dataSource)
// AutoGeneratorオブジェクトを返す
public AutoGenerator setDataSource(final DataSourceConfig dataSource) {
this.dataSource = dataSource;
return this;
}
// AutoGeneratorクラスのプロパティ
private DataSourceConfig dataSource; // データソース設定
// DataSourceConfig型変換インターフェースのプロパティを持つクラス
private ITypeConvert typeConvert;
ITypeConvertインターフェースのソースコード
public interface ITypeConvert {
default IColumnType processTypeConvert(GlobalConfig globalConfig, TableField tableField) {
return this.processTypeConvert(globalConfig, tableField.getType());
}
IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType);
}
processTypeConvertメソッドの実装
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
String t = fieldType.toLowerCase();
if (t.contains("char")) {
return DbColumnType.STRING;
} else if (t.contains("bigint")) {
return DbColumnType.LONG;
} else if (t.contains("tinyint(1)")) {
return DbColumnType.BOOLEAN;
} else if (t.contains("int")) {
return DbColumnType.INTEGER;
} else if (t.contains("text")) {
return DbColumnType.STRING;
} else if (t.contains("bit")) {
return DbColumnType.BOOLEAN;
} else if (t.contains("decimal")) {
return DbColumnType.BIG_DECIMAL;
} else if (t.contains("clob")) {
return DbColumnType.CLOB;
} else if (t.contains("blob")) {
return DbColumnType.BLOB;
} else if (t.contains("binary")) {
return DbColumnType.BYTE_ARRAY;
} else if (t.contains("float")) {
return DbColumnType.FLOAT;
} else if (t.contains("double")) {
return DbColumnType.DOUBLE;
} else if (!t.contains("json") && !t.contains("enum")) {
if (t.contains("date") || t.contains("time") || t.contains("year")) {
byte var5;
switch(globalConfig.getDateType()) {
case ONLY_DATE:
return DbColumnType.DATE;
case SQL_PACK:
var5 = -1;
switch(t.hashCode()) {
case 3076014:
if (t.equals("date")) {
var5 = 0;
}
break;
case 3560141:
if (t.equals("time")) {
var5 = 1;
}
break;
case 3704893:
if (t.equals("year")) {
var5 = 2;
}
}
switch(var5) {
case 0:
return DbColumnType.DATE_SQL;
case 1:
return DbColumnType.TIME;
case 2:
return DbColumnType.DATE_SQL;
default:
return DbColumnType.TIMESTAMP;
}
case TIME_PACK:
var5 = -1;
switch(t.hashCode()) {
case 3076014:
if (t.equals("date")) {
var5 = 0;
}
break;
case 3560141:
if (t.equals("time")) {
var5 = 1;
}
break;
case 3704893:
if (t.equals("year")) {
var5 = 2;
}
}
switch(var5) {
case 0:
return DbColumnType.LOCAL_DATE;
case 1:
return DbColumnType.LOCAL_TIME;
case 2:
return DbColumnType.YEAR;
default:
return DbColumnType.LOCAL_DATE_TIME;
}
}
}
return DbColumnType.STRING;
} else {
return DbColumnType.STRING;
}
}