赞
踩
数组实体类
数据库表实体类
注意:
一定要加@TableField(typeHandler = MyJacksonTypeHandler.class)这个注解。
MyJacksonTypeHandler.class类是自定义写的继承了AbstractJsonTypeHandler,也可以继承BaseTypeHandler看自己的需求。
MyJacksonTypeHandler.class代码
@Slf4j @MappedTypes({Object.class}) @MappedJdbcTypes(JdbcType.VARCHAR) public class MyJacksonTypeHandler extends AbstractJsonTypeHandler<Object> { private static final ObjectMapper objectMapper; public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; static { /** 默认时间格式 */ objectMapper = new ObjectMapper(); // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 // Include.Include.ALWAYS 默认 // Include.NON_DEFAULT 属性为默认值不序列化 // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量 // Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 指定时区 objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); // 日期类型字符串处理 objectMapper.setDateFormat(DateTimeUtils.DATE_TIME_STANDARD_FORMATER_SIMPLE); // java8日期日期处理 JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeUtils.DATE_STANDARD_FORMATER)); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeUtils.DATE_TIME_STANDARD_FORMATER)); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeUtils.DATE_STANDARD_FORMATER)); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeUtils.DATE_TIME_STANDARD_FORMATER)); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); objectMapper.registerModule(javaTimeModule); } private final Class<Object> type; public MyJacksonTypeHandler(Class<Object> type) { if (log.isTraceEnabled()) { log.trace("MyJacksonTypeHandler(" + type + ")"); } Assert.notNull(type, "Type argument cannot be null"); this.type = type; } @Override protected Object parse(String json) { try { return objectMapper.readValue(json, type); } catch (IOException e) { throw new RuntimeException(e); } } @Override protected String toJson(Object obj) { try { return objectMapper.writeValueAsString(obj); } catch (JsonProcessingException e) { throw new RuntimeException(e); } }
找到数据库表实体类对应的Mapper文件
添加typeHandler="com.*.*.MyJacksonTypeHandler",文件路径
其实我们后面没有用到BaseResultMap和AliasResultMap,但是如果你用到了这些resultMap,那这个字段一定要加,不然你项目直接启动不了
mysql数据库表字段的类型为json
到这里已经可以将数据存入表中了
但是...
从数据查出来的数据durationMileage数组是空的;所以我重新写了查询语句,并设置返回类型。
一定要将resultMap设置成mybatis-plus_你的表的实体类名
这样查询出来的数组字段就不为空了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。