實體類使用JSONObject型別的屬性,如何轉成varchar型別儲存到資料庫
阿新 • • 發佈:2022-05-26
實體類使用JSONObject型別的屬性,如何轉成varchar型別儲存到資料庫
1. 實現TypeHandler介面
package com.springboot.sys.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; import org.apache.ibatis.type.TypeHandler; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes(JSONObject.class) public class JSONObjectToVarcharTypeHandler implements TypeHandler<JSONObject> { @Override public void setParameter(PreparedStatement preparedStatement, int i, JSONObject jsonObject, JdbcType jdbcType) throws SQLException { // 遍歷JSONObject型別的入參,拼接為String型別,使用Statement物件插入資料庫 preparedStatement.setString(i, jsonObject.toJSONString()); } @Override public JSONObject getResult(ResultSet resultSet, String s) throws SQLException { // 獲取String型別的結果,將String型別轉成JSONObject型別後返回 String jsonStr = resultSet.getString(s); if (StringUtils.isNotBlank(jsonStr)) { return JSON.parseObject(jsonStr); } return null; } @Override public JSONObject getResult(ResultSet resultSet, int i) throws SQLException { // 獲取String型別的結果,將String型別轉成JSONObject型別後返回 String jsonStr = resultSet.getString(i); if (StringUtils.isNotBlank(jsonStr)) { return JSON.parseObject(jsonStr); } return null; } @Override public JSONObject getResult(CallableStatement callableStatement, int i) throws SQLException { // 獲取String型別的結果,將String型別轉成JSONObject型別後返回 String jsonStr = callableStatement.getString(i); if (StringUtils.isNotBlank(jsonStr)) { return JSON.parseObject(jsonStr); } return null; } }
2. 修改xml檔案
<!-- 將jdbcType替換為typeHandler -->
<result column="address" property="address" typeHandler="com.springboot.sys.handler.JSONObjectToVarcharTypeHandler" />
<!--之後的sql語句中所有出現的jdbcType同理-->
注:xml檔案是使用mybatis逆向工程生成的
補充JSONObject的遍歷
1. forEach
jsonObject.forEach((key, value) -> { });
2. entrySet()
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
}
3. 迭代器
Iterator<String> it = jsonObject.keys(); while(it.hasNext()){ String key = it.next(); String value = jsonObject.getString(key); }