Mybatis 中使用中java數據類型轉換成string或json

Mybatis 中使用中java數據類型轉換成string或json

在實際應用場景中我們經常會用到@onetoone @onetomany 這樣的表關聯 ,在mysql引入json類型後, 會發現有些關聯表並不需要單獨存儲爲一張表,這時可以直接存儲到主表中的一個json字段

這裏舉例實際用到的List<Object>轉 mysql中的json

配置typehandler的方法

  1. 在xml中配置(省略..)
  2. 在java bean中的字段配置
    @TableField(typeHandler = ListTypeHandler.class)
    private List<User> parameters;
    
  3. 在配置文件中全局配置
mybatis:
  type-handlers-package: com.xx.handlers

//  這裏是 plus
mybatis-plus:
  type-handlers-package: com.xx.mybatis.handlers
// handlers 是包

寫自定義的handlertype


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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;
import java.util.List;

public class ListTypeHandler extends BaseTypeHandler<List<Object>> {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, List<Object> objects, JdbcType jdbcType) throws SQLException {
        ObjectMapper mapper = new ObjectMapper();
        try {
            preparedStatement.setString(i,mapper.writeValueAsString(objects));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    @Override
    public List<Object> getNullableResult(ResultSet resultSet, String s) throws SQLException {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return  mapper.readValue(resultSet.getString(s),List.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    public List<Object> getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return null;
    }

    @Override
    public List<Object> getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return null;
    }
}
  • 注意 如果是用的@TableField 需要開啓bean的映射 否則查詢回來的數據是null
@TableName(autoResultMap = true)
public class User {
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章