数据库5.7版本之后支持json类型的参数,但实体类参数定义不知道怎么做。
如果需要对json的内容进行校验规定,可以封装一个实体类接收,然后转为json存入
如果不需要校验,仅仅是为了存入然后查询使用:
@TableField(typeHandler = JacksonTypeHandler.class)
private JSONObject des;
可以使用fastjson的JSONobject接收,然后加上@TableField(typeHandler = JacksonTypeHandler.class)注解。
还必须在实体类上面加上注解:
@TableName(autoResultMap = true)
到这里就OK了,可以正常的接收json字段的参数。例如这样传参:
{
"name":"liubei",
"age":12,
"des":{"name1":"liubei"}
}
如果不加这个注解,可以正常添加json字段,但是查询为null。
MybatisPlus官方定义:
关于`jdbcType`和`typeHandler`以及`numericScale`的说明:
numericScale
只生效于 update 的sql.jdbcType
和typeHandler
如果不配合@TableName#autoResultMap = true
一起使用,也只生效于 update 的sql. 对于typeHandler
如果你的字段类型和set进去的类型为equals
关系,则只需要让你的typeHandler
让Mybatis加载到即可,不需要使用注解
MybatisPlus官方定义这个注解:
关于`autoResultMap`的说明:
mp会自动构建一个
ResultMap
并注入到mybatis里(一般用不上).下面讲两句: 因为mp底层是mybatis,所以一些mybatis的常识你要知道,mp只是帮你注入了常用crud到mybatis里 注入之前可以说是动态的(根据你entity的字段以及注解变化而变化),但是注入之后是静态的(等于你写在xml的东西) 而对于直接指定typeHandler
,mybatis只支持你写在2个地方:
- 定义在resultMap里,只作用于select查询的返回结果封装
- 定义在
insert
和update
sql的#{property}
里的property
后面(例:#{property,typehandler=xxx.xxx.xxx}
),只作用于设置值
而除了这两种直接指定typeHandler
,mybatis有一个全局的扫描你自己的typeHandler
包的配置,这是根据你的property
的类型去找typeHandler
并使用.
另外: JacksonTypeHandler.class还有一个FastjsonTypeHandler.class。
这二者的区别百度说:FastjsonTypeHandler不支持 MySQL JSON 解析,而JacksonTypeHandler支持。
姑且理解为:JacksonTypeHandler功能更强大。
目前仅仅知道实现,不明白原理。姑且记载,待后研究。