Java Json 存取 Mybatis 數據庫

題記

如何把前臺的json存入數據庫並正常讀取困擾了我4,5個小時,最後終於想了方案,非常開心,所以寫給同樣苦惱的人看下,本來有了更好的記錄方式已經不準備寫博客了,但是解決了這個問題心情很好,而且網上寫的很多都是亂七八糟的,爲了不浪費更多人的時間

正文

數據庫---類型需爲json格式

family_list      類型爲json

實體---對象類型Object就行,萬能的,之前弄的List<Map<String,String>>折騰半天

/**
 * 家庭信息
 */
@TableField("family_list")
private Object familyList;

實現----存入要轉成toJSONString,不然會報錯

entity.setFamilyList(JSONObject.toJSONString(dto.getFamilyList()));

XML---查出的數據一定要進行typeHandler,不然會報錯

<resultMap id="BaseResultMap" type="com.XXX">
<result property="familyList" column="family_list" typeHandler="com.XXX.JsonTypeHandler"/>
</resultMap>

 

附錄JsonTypeHandler

import com.alibaba.fastjson.JSON;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JsonTypeHandler extends BaseTypeHandler<Object> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter,
                                    JdbcType jdbcType) throws SQLException {

        ps.setString(i, JSON.toJSONString(parameter));
    }

    @Override
    public Object getNullableResult(ResultSet rs, String columnName)
            throws SQLException {

        return JSON.parseObject(rs.getString(columnName), Object.class);
    }

    @Override
    public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {

        return JSON.parseObject(rs.getString(columnIndex), Object.class);
    }

    @Override
    public Object getNullableResult(CallableStatement cs, int columnIndex)
            throws SQLException {

        return JSON.parseObject(cs.getString(columnIndex), Object.class);
    }

}

可以不看

另外一個坑,我沒解決掉所以用的這個方法,之前將前臺json轉成List<Map<String,String>>,是可以實現後來換了mybatis版本出問題了,map toString存入數據庫會有=,簡單的處理一下還行,複雜的List<Map<String,String>>有點不行,這種方法存入的沒有=,是:類型,json格式標準,處理方便

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章