springboot整合sql中的json字段
1. 数据库
新建个测试表,包含id和json类型的字段
2. springboot准备
1、pom引入
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
2、创建基础文件
其中对应字段类型为JSONObject,且在@TableField()中加入typeHandler = JacksonTypeHandler.class
@TableField(value = “jsonStr”,typeHandler = JacksonTypeHandler.class)
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@TableName(value = "test_table")
public class TestTable {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 测试json
*/
@TableField(value = "jsonStr",typeHandler = JacksonTypeHandler.class)
private JSONObject jsonstr;
}
3、创建映射xml
在对应的字段 标签中加入typeHandler=“com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler”
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qingning.mapper.TestTableMapper">
<resultMap id="BaseResultMap" type="com.qingning.bean.TestTable">
<!--@mbg.generated-->
<!--@Table test_table-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="jsonStr" jdbcType="VARCHAR" property="jsonstr" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, jsonStr
</sql>
<select id="listDetails" resultMap="BaseResultMap">
SELECT id,jsonStr FROM test_table
</select>
</mapper>
4、其他的正常操作即可
3、测试
1、创建接口
import com.qingning.bean.TeacherDetails;
import com.qingning.bean.TestTable;
import com.qingning.common.utils.SessionUtil;
import com.qingning.service.common.TestTableService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
@RequestMapping("/test/details")
public class TestController {
@Autowired
private TestTableService testTableService;
@GetMapping("/details")
@ResponseBody
public SessionUtil toDetails() {
try {
List<TestTable> testTables = this.testTableService.listDetails();
return SessionUtil.ok(testTables);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 保存教师详情
* @return
*/
@PostMapping("/add")
@ResponseBody
public SessionUtil addTeacherDetails(@RequestBody TestTable testTable) {
try {
this.testTableService.save(testTable);
return SessionUtil.ok();
}catch (Exception e){
e.printStackTrace();
}
}
}
2、结果
4、总结
1、用mybatisplus自带的类型转换即可,只要在类和映射文件的xml文件中配置即可
2、若想在列表中查询json的数据,不建议用mybatisplus自带的list()方法,查出的结果可能会为null,需要自己在xml中写查询sql!