Java + MySQL 实现存储完整 Json
- 一、应用场景
- 二、数据库配置
- 三、后端代码配置
- 1、maven 依赖
- 2、实体类
- 3、Service 实现类
- 4、xml 文件
- 四、测试
- 1、新增接口
- 2、查询接口
- 3、数据表内容
一、应用场景
将前端传过来的 Json
完整存储到 MySQL
中,涉及技术栈为 Java
、MyBatis
、MySQL
。
注意:MySQL 5.7.8
以后才支持 json
类型。
二、数据库配置
将相应字段的类型设为 json
。
三、后端代码配置
1、maven 依赖
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency>
2、实体类
对应的属性使用 com.alibaba.fastjson.JSONObject
类型。
package com.example.demo.entity;import com.alibaba.fastjson.JSONObject;
import lombok.Data;import java.io.Serializable;@Data
public class Test implements Serializable {/*** 主键*/private String id;/*** 页面数据*/private JSONObject jsonData;
}
3、Service 实现类
package com.example.demo.service.impl;import com.alibaba.fastjson.JSONObject;
import com.example.demo.entity.Test;
import com.example.demo.mapper.TestMapper;
import com.example.demo.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class TestServiceImpl implements TestService {@Autowiredprivate TestMapper testMapper;@Overridepublic Test getDetailById(String id) {return testMapper.getDetailById(id);}@Overridepublic String saveTest(JSONObject req) {Test test = new Test();test.setJsonData(req);testMapper.insert(test);}
}
4、xml 文件
查询和新增都需要指明具体的 typeHandler
,不然查询会查不到数据,新增会报错。
typeHandler
的值对应实体类的 JSONObject
类型,这里是 typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"
。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.TestMapper"><resultMap id="BaseResultMap" type="com.example.demo.entity.Test"><id property="id" column="id" jdbcType="VARCHAR"/><result property="jsonData" column="json_data" jdbcType="OTHER"typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/></resultMap><insert id="insert">insert into test<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null and id != ''">id,</if><if test="jsonData != null">json_data,</if></trim>values<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null and id != ''">#{id},</if><if test="jsonData != null">#{jsonData,typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler}</if></trim></insert><select id="getDetailById" resultMap="BaseResultMap">select *from testwhere is_deleted = 0and id = #{id}</select>
</mapper>