利弊
一、json类型的特性
1、保证了JSON数据类型的强校验,JSON数据列会自动校验存入此列的内容是否符合JSON格式,非正常格式则报错,而varchar类型和text等类型本身是不存在这种机制的。
2、MySQL同时提供了一组操作JSON类型数据的内置函数。
3、更优化的存储格式,存储在JSON列中的JSON数据会被转成内部特定的存储格式,允许快速读取。
4、可以基于JSON格式的特征支持修改特定的键值。(即不需要把整条内容拿出来放到程序中遍历然后寻找替换再塞回去,MySQL内置的函数允许你通过一条SQL语句就能搞定)
二、优点缺点
优点:
1、不需要设计复杂的关系表。
2、提高开发的效率。
3、可以任意的增减字段而无需修改数据表结构,甚至可以减少数据表的设计。
4、保存数据方便,只需要组装成数组。
5、可以减少数据表的查询,减少关联查询,一个查询的结果就可以代替几个查询的结果,降低数据库服务器的压力。
缺点:
1、从json中去统计某个字段数据之类的很麻烦,而且效率低。
2、查询相对效率较低,操作复杂。
3、更新其中某个字段效率较低,不适合存储业务逻辑复杂的数据。
4、统计数据复杂,建议需要做报表的数据不要存json。
总结:如果不需要根据json来统计数据或者局部更新json,仅是简单的读取或者整体覆盖,对于需要存取一个很大的有结构的数据,那json是较佳选择。大道至简!
使用方法
1.表字段类型为json
2.实体类上方加注解,否则会查不出来值
@TableName(autoResultMap = true)
关于
autoResultMap
的说明:
mp会自动构建一个ResultMap并注入到mybatis里(一般用不上).下面讲两句: 因为mp底层是mybatis,所以一些mybatis的常识你要知道,mp只是帮你注入了常用crud到mybatis里 注入之前可以说是动态的(根据你entity的字段以及注解变化而变化),但是注入之后是静态的(等于你写在xml的东西) 而对于直接指定typeHandler,mybatis只支持你写在2个地方:
定义在resultMap里,只作用于select查询的返回结果封装
定义在insert和updatesql的#{property}里的property后面(例:#{property,typehandler=xxx.xxx.xxx}),只作用于设置值 而除了这两种直接指定typeHandler,mybatis有一个全局的扫描你自己的typeHandler包的配置,这是根据你的property的类型去找typeHandler并使用.
3.字段是加上注解 @TableField(typeHandler = JacksonTypeHandler.class)
@TableField(typeHandler = JacksonTypeHandler.class)
private JSONObject properties;
版权归原作者 寻风庚辰 所有, 如有侵权,请联系我们删除。