package org.sxkj.common.handler;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import org.apache.ibatis.type.BaseTypeHandler;
|
import org.apache.ibatis.type.JdbcType;
|
|
import java.sql.CallableStatement;
|
import java.sql.PreparedStatement;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.util.Collections;
|
import java.util.List;
|
|
public class ListToStringTypeHandler extends BaseTypeHandler<List<String>> {
|
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
@Override
|
public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
|
try {
|
String jsonString = objectMapper.writeValueAsString(parameter);
|
// 明确指定为 VARCHAR 或 JSON 类型
|
if (jdbcType == null) {
|
ps.setString(i, jsonString);
|
} else {
|
ps.setObject(i, jsonString, jdbcType.TYPE_CODE);
|
}
|
} catch (JsonProcessingException e) {
|
throw new SQLException("Could not convert list to JSON", e);
|
}
|
}
|
|
|
@Override
|
public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
|
String json = rs.getString(columnName);
|
return parseJsonToList(json);
|
}
|
|
@Override
|
public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
|
String json = rs.getString(columnIndex);
|
return parseJsonToList(json);
|
}
|
|
@Override
|
public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
|
String json = cs.getString(columnIndex);
|
return parseJsonToList(json);
|
}
|
|
private List<String> parseJsonToList(String json) {
|
if (json == null || json.trim().isEmpty()) {
|
return Collections.emptyList();
|
}
|
try {
|
return objectMapper.readValue(json, List.class);
|
} catch (JsonProcessingException e) {
|
return Collections.emptyList();
|
}
|
}
|
|
|
}
|