1.实体类中字段类型
- import com.alibaba.fastjson.JSONObject;
- @Data
- public class TestDto {
- private String name;
- //对应数据库的JSON字段
- private JSONObject page_detail;
- }
复制代码 2.自界说实现typeHandler
- package base.utils;
- import com.alibaba.fastjson.JSONObject;
- import org.apache.ibatis.type.*;
- import java.sql.CallableStatement;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- @MappedTypes(JSONObject.class)
- @MappedJdbcTypes(JdbcType.VARCHAR)
- public class JsonTypeHandler extends BaseTypeHandler<JSONObject>{
- /**
- * 设置非空参数
- * @param ps
- * @param i
- * @param parameter
- * @param jdbcType
- * @throws SQLException
- */
- @Override
- public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {
- ps.setString(i,String.valueOf(parameter.toJSONString()));
- }
- /**
- * 根据列名,获取可以为空的结果
- * @param rs
- * @param columnName
- * @return
- * @throws SQLException
- */
- @Override
- public JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {
- String sqlJson = rs.getString(columnName);
- if (null != sqlJson) {
- return JSONObject.parseObject(sqlJson);
- }
- return null;
- }
- /**
- * 根据列索引,获取可以为内控的接口
- * @param rs
- * @param columnIndex
- * @return
- * @throws SQLException
- */
- @Override
- public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
- String sqlJson = rs.getString(columnIndex);
- if (null != sqlJson) {
- return JSONObject.parseObject(sqlJson);
- }
- return null;
- }
- /**
- *
- * @param cs
- * @param columnIndex
- * @return
- * @throws SQLException
- */
- @Override
- public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
- String sqlJson = cs.getNString(columnIndex);
- if (null != sqlJson) {
- return JSONObject.parseObject(sqlJson);
- }
- return null;
- }
- }
复制代码 3.SQL文件
- <insert id="addTest">
- insert into test (name,page_detail)
- values (#{name},#{page_detail})
- </insert>
复制代码 4.修改配置文件
4.1 mybatis-spring-boot-starter
由于mybatis-spring-boot-starter可无需Mybatis配置文件,可直接在项目配置文件application.properties中举行配置
- #指定类型处理器的所在包的路径
- mybatis.type-handlers-package=base.utils
复制代码 4.1 mybatis-spring
mybatis-spring则在mybatis-config.xml中增加typeHandler
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <settings>
- //略...
- </settings>
- <typeAliases>
- //略...
- </typeAliases>
- <typeHandlers>
- <typeHandler handler="base.utils.JsonTypeHandler"/>
- </typeHandlers>
- </configuration>
复制代码 5.JDBC URL 增加配置
- #jdbc增加配置stringtype=unspecified
- spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/test?stringtype=unspecified
复制代码 6.附加说明
jdbc url 使用stringtype=unspecified 的话,字符串字段会报无法判断数据类型,都必要增加类型转换,比力贫苦。
还是建议jdbc url不使用stringtype=unspecified,在json字段的SQL中,为json字段的写入增加::json的转型,如:
- <insert id="addTest">
- insert into test (name,page_detail)
- values (#{name},#{page_detail}::json)
- </insert>
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |