MybatisPlus 添加返回复杂类型字段数据
- 实体类 FoodMenu
@Data
@TableName
@ApiModel("食品菜单")
public class FoodMenu {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@ApiModelProperty("食品名称")
private String name;
@ApiModelProperty("食品图片")
private List<String> images;
@ApiModelProperty("口味")
private List<Flavors> flavors;
@CreatedAt
@ApiModelProperty("创建时间")
private LocalDateTime createdAt;
}
@Data
@ApiModel("食品口味")
public class Flavors{
@ApiModelProperty("口味名称")
private String title;
@ApiModelProperty("标签")
private List<String> tags;
}
在这样的情况下,使用BaseMapper中的insert进行添加时会抛出querying database. Cause: java.lang.IllegalStateException: 异常
,为了解决这个异常,需要对复杂类型的字段加上类型处理器FastjsonTypeHandler
如上方的images与flavors字段来举例:
FastjsonTypeHandler 是属于 com.baomidou.mybatisplus.extension.handlers
包下的
@TableField(typeHandler = FastjsonTypeHandler.class)
@ApiModelProperty("食品图片")
private List<String> images;
@TableField(typeHandler = FastjsonTypeHandler.class)
@ApiModelProperty("口味")
private List<Flavors> flavors;
但是这时候有有一个问题,当时用BaseMapper 中的任何查询方法进行查询时,例如 selectById
查出来的数据images
和flavors
为null,这时候我们需要让这个实体类自动映射结果集,需要加上@TableName(autoResultMap = true)
,这个的意思就是让 MyBatis-Plus 自动生成结果映射,确保正确地将数据库中的字段值映射到实体类的相应属性上,避免手动编写 @Results 注解,从而简化了代码编写。