MyBatis-Plus处理Integer类型JSON数组:自定义TypeHandler实现及注意事项
使用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解析可能成为瓶颈 ######[AI写代码神器 | 660点数解答 | 2025-08-26 11:22:23]
- @biuem2.com假人系统私人申明:红尘脚本定制版本关键参数揭秘(字节豆包 | 37点数解答 | 2024-07-30 18:26:07)316
- MySQL 数据库操作:用德鲁伊连接池和 Spring JDBC 实现 MVC 架构下 Student 表操作及事务测试全解析(字节豆包 | 1115点数解答 | 2025-03-19 11:17:31)290
- Spring JDBC+德鲁伊连接池:MVC架构下MySQL学生表查询、事务验证及代码实现全解析(DeepSeek | 1275点数解答 | 2025-03-19 11:21:32)275
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)345
- 巧用 MyBatis Plus 自定义拦截器实现数据权限控制(讯飞星火 | 567点数解答 | 2024-05-29 22:59:21)258
- MyBatis-Plus 纯代码实现联表查询:附详细示例代码(字节豆包 | 284点数解答 | 2024-10-17 11:46:14)211
- MyBatis-Plus 轻松实现:获取表中特定字段最大值全流程指南(阿里通义 | 527点数解答 | 2024-10-17 14:52:50)374
- MyBatis-Plus 代码示例:轻松实现取某个字段最大值! (字节豆包 | 237点数解答 | 2024-12-10 10:12:49)161
- MyBatis-Plus 轻松实现取某个字段最大值:附代码示例及注意事项(阿里通义 | 247点数解答 | 2024-12-10 10:13:04)315
- MyBatis-Plus处理Integer类型JSON数组:自定义TypeHandler实现及注意事项(DeepSeek | 660点数解答 | 2025-08-26 11:22:23)96
- MyBatis-Plus:自定义TypeHandler实现JSON数组转List<Integer>及注意事项(DeepSeek | 656点数解答 | 2025-08-26 11:26:36)136
- Android开发自定义 Handler :七大策略有效规避内存泄漏!(百度文心 | 526点数解答 | 2023-11-09 17:34:21)285