专做ppt的网站,seo外包公司兴田德润,做网站报价出名的,wordpress多语言包Mybatis以及Mybatis-Plus中实体类使用Map类型时如何处理
发现问题
以前在项目中存json数据, 一般都是前端把json类型转为string类型, 然后后端直接用一个string类型的字段来存取, 这次想直接用后端直接转化不再需要前端转为string, 一直保持字段为Map, 存到数据库位varchar或…Mybatis以及Mybatis-Plus中实体类使用Map类型时如何处理
发现问题
以前在项目中存json数据, 一般都是前端把json类型转为string类型, 然后后端直接用一个string类型的字段来存取, 这次想直接用后端直接转化不再需要前端转为string, 一直保持字段为Map, 存到数据库位varchar或者text类型
这就需要持久层能在存入和查出的数据的时候, 自动转化其类型 !
解决问题
1. Mybatis-Plus解决方式
以如下代码为例, 解决持久层自动转化问题
Data
TableName(value service_config, autoResultMap true)
public class ServiceConfig extends BaseEntity {ApiModelProperty(服务名称)private String name;ApiModelProperty(HTTP检测URL)private String url;ApiModelProperty(HTTP请求方法)private HttpType method;ApiModelProperty(HTTP请求体)private String requestBody;ApiModelProperty(HTTP请求头)TableField(value headers, typeHandler JacksonTypeHandler.class)private MapString, String headers;}首先TableName注解需要加autoResultMap true参数 autoResultMap true 的主要作用是自动生成并注册一个 ResultMap用于处理带有类型处理器如 JacksonTypeHandler的字段。
具体功能解析 自动创建 ResultMap 当设置为 true 时MyBatis-Plus 会为这个实体类自动生成一个 ResultMap 这个 ResultMap 会包含所有字段的映射关系特别是那些使用了 TableField(typeHandler xxx) 的字段 启用类型处理器 对于使用 typeHandler 的字段如你的 MapString, Object 字段 自动生成的 ResultMap 会正确配置这些字段的类型处理器 确保查询时能正确进行类型转换 解决查询时类型处理器不生效的问题 没有这个配置时简单的查询可能不会应用类型处理器 特别是当使用 selectById() 等便捷方法时 在Map字段上添加TableField(value headers, typeHandler JacksonTypeHandler.class) 说明该字段需要进行json转化, mybatis-plus使用的是Jackson吗这也是springboot默认的json转化工具 数据库使用varchar或者text类型, 如使用varchar类型, 设置的长度要大一点, 不然还可能出现空间太小导致报错
2. Mybatis解决方式
需要在mapper.xml文件中配置
在你的Map字段的result标签加上如下配置 typeHandlercom.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler
resultMap idyour_table_name typeYourEntityid propertyid columnid jdbcTypeBIGINT/result propertyheaders columnheaders jdbcTypeVARCHAR typeHandlercom.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler/
/resultMap注意: 因为自动转换json功能, mybatis接mybatis-plus默认使用的是jackjson, 请务必保证项目中有jackjson的依赖 依赖坐标如下, 版本根据spring版本选择合适的版本: dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactId/dependency