使用MyBatis-Plus处理JSON数组(Integer类型)时,可以通过自定义TypeHandler实现。 1. 创建自定义TypeHandler处理Integer数组与JSON字符串的转换: ```java import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import com.fasterxml.jackson.databind.ObjectMapper; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Arrays; import java.util.List; public class IntegerArrayTypeHandler extends BaseTypeHandler<Integer[]> { private static final ObjectMapper objectMapper = new ObjectMapper(); @Override public void setNonNullParameter(PreparedStatement ps, int i, Integer[] parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, toJson(parameter)); } @Override public Integer[] getNullableResult(ResultSet rs, String columnName) throws SQLException { return fromJson(rs.getString(columnName)); } @Override public Integer[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return fromJson(rs.getString(columnIndex)); } @Override public Integer[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return fromJson(cs.getString(columnIndex)); } private String toJson(Integer[] array) { try { return objectMapper.writeValueAsString(array); } catch (Exception e) { throw new RuntimeException("转换JSON失败", e); } } private Integer[] fromJson(String json) { try { if (json == null || json.isEmpty()) { return new Integer[0]; } return objectMapper.readValue(json, Integer[].class); } catch (Exception e) { throw new RuntimeException("解析JSON失败", e); } } } ``` 2. 在实体类字段上使用@TableField注解指定TypeHandler: ```java import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @TableName("your_table") public class YourEntity { @TableField(value = "json_array_column", typeHandler = IntegerArrayTypeHandler.class) private Integer[] integerArray; // Getter和Setter方法 public Integer[] getIntegerArray() { return integerArray; } public void setIntegerArray(Integer[] integerArray) { this.integerArray = integerArray; } } ``` 3. 在MyBatis配置中注册TypeHandler(若使用Spring Boot): ```yaml mybatis-plus: type-handlers-package: com.yourpackage.handler ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: - JSON序列化异常处理要完善,避免空指针或格式错误导致系统崩溃 - 数据库字段类型需设置为能够存储JSON字符串的格式,如VARCHAR或TEXT - 类型处理器性能考虑,大数据量时JSON解析可能成为瓶颈 [2025-08-26 11:22:23 | AI写代码神器 | 660点数解答]