最新代码
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package com.starry.admin.common.conf;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.TypeReference;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.type.BaseTypeHandler;
|
||||
import org.apache.ibatis.type.JdbcType;
|
||||
import org.apache.ibatis.type.MappedJdbcTypes;
|
||||
import org.apache.ibatis.type.MappedTypes;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.sql.CallableStatement;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@MappedJdbcTypes(JdbcType.VARCHAR) //数据库类型
|
||||
@MappedTypes({List.class}) //java数据类型
|
||||
public abstract class ListTypeHandler<T> extends BaseTypeHandler<List<T>> {
|
||||
@Override
|
||||
public void setNonNullParameter(PreparedStatement ps, int i, List<T> parameter, JdbcType jdbcType) throws SQLException {
|
||||
String content = StringUtils.isEmpty(parameter) ? null : JSON.toJSONString(parameter);
|
||||
ps.setString(i, content);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> getNullableResult(ResultSet rs, String columnName) throws SQLException {
|
||||
return this.getListByJsonArrayString(rs.getString(columnName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
|
||||
return this.getListByJsonArrayString(rs.getString(columnIndex));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
|
||||
return this.getListByJsonArrayString(cs.getString(columnIndex));
|
||||
}
|
||||
|
||||
private List<T> getListByJsonArrayString(String content) {
|
||||
return StringUtils.isEmpty(content) ? new ArrayList<>() : JSON.parseObject(content, this.specificType());
|
||||
}
|
||||
|
||||
/**
|
||||
* 具体类型,由子类提供
|
||||
*
|
||||
* @return 具体类型
|
||||
*/
|
||||
protected abstract TypeReference<List<T>> specificType();
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.starry.admin.common.conf;
|
||||
|
||||
import com.alibaba.fastjson2.TypeReference;
|
||||
import java.util.List;
|
||||
|
||||
public class StringTypeHandler extends ListTypeHandler<String> {
|
||||
// 将ListTypeHandler<T>(T为任意对象),具体为特定的对象String
|
||||
@Override
|
||||
protected TypeReference<List<String>> specificType() {
|
||||
return new TypeReference<List<String>>() {
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user