mybatis plus整合mysql json

最近项目中用到mysql json数据类型,写一个demo来加深自己的理解

  1. 建表语句如下:

create table t_test
(
id int auto_increment primary key,
name varchar(50) null,
salary int null,
info json null,
create_time datetime null
);

  1. 插入3条测试数,插入数据的json的key可以随便定义,毕竟是json类型的,插入json是可以是数组或者对象,此处完全是为了sql查询而故意不一样的。


    测试数据.png
  2. 用sql语句进行查询测试:

查询1:
select * from t_test where info->'$.address' = 'shanghai';
测试结果如下:

查询1.png

查询2:
select * from t_test where JSON_CONTAINS(info,JSON_OBJECT('major','math','height',1.87));
测试查询结果:

查询2.png

JSON_OBJECT里面的数据是键值对,key不能为null,参数也不能为奇数个。如果把height修改一下再查询,则查询不到对应的结果。

  1. 用该表结构生成mybatis plus对应的java类:
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_test")
@ApiModel(description="")
public class Test implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField("name")
    private String name;
    @TableField("salary")
    private Integer salary;
    @TableField("info")
    private String info;
    @TableField("create_time")
    private Date createTime;
}

可以看到mybatis plus默认生成的info字段类型是string的,早期版本是@TableField(el = "info,typeHandler = com.ccm.test.handler.ListTypeHandler")试了下并不起作用,并没有去深究,升级版本后

@TableField(typeHandler = JacksonTypeHandler.class)
    private List<Info> info;

试了下是可以的,测试的结果是后面重新建了表省去了几个字段


测试结果.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容