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