关于jsonObject数据,jsonArray数据,通过Mybatis从数据库的读取(上)

        对最近的知识点做下总结吧,首先就是关于一个json格式的问题,在以前的项目中做的数据处理都是表单提交,并没有注意到json格式传递数据的情况,在重构的项目中,大部分的数据都是json格式,所以后台能够直接用一个对象来接收,但是接收到的对象也是json格式,这时候就要转成对象了,在项目中是用的fastjson,用一个工具类将各种情况列出来,方便调用,

例如常用的将json格式转为对象

 public static <T> T getJsonToBean(String jsonData, Class<T> clazz) {
        return JSON.parseObject(jsonData, clazz);
    }

将java对象转成json

public static String getBeanToJson(Object object) {
        return JSON.toJSONString(object);
    }

等等方法,这里就不一一例举了

  1、查询方法

返回的对象中包含json字段,

实体中接收的对象中的字段定义为

private Long id;
private String 字段1;
private String 字段2;
private Integer 字段3;
private JSONObject json字段;

采用mybatis框架,查询的时候返回的类型需要做处理

<select id="selectList" resultMap="ResultMapWithJson">
		select
		id, 字段1, 字段2,
		字段3,json格式字段
		from table
</select>

返回结果为

<resultMap id="BaseResultMap" type="映射的实体">
	<id column="id" jdbcType="BIGINT" property="id" />
	<result column="字段1" jdbcType="VARCHAR" property="别名" />
	<result column="字段2" jdbcType="VARCHAR" property="别名" />
	<result column="字段3" jdbcType="INTEGER" property="别名" />
</resultMap>

<resultMap id="ResultMapWithJson"type="映射的实体" extends="BaseResultMap">
	<result column="json格式字段" property="json格式字段别名"  javaType="映射的实体"
		typeHandler="com.config.mybatisjsonhandler.JsonObjectTypeHandler" />
</resultMap>

其中json格式字段返货的typeHandler需要做处理,因为返回的是josn格式JsonObject

JsonObjectTypeHandler里面内容


import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.alibaba.fastjson.JSONObject;

/**
 * @description 用以mysql中json格式的字段,进行转换的自定义转换器,转换为实体类的JSONObject属性
 */
@MappedTypes(JSONObject.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class JsonObjectTypeHandler 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;
    }

    @Override
    public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String sqlJson = cs.getString(columnIndex);
        if (null != sqlJson){
            return JSONObject.parseObject(sqlJson);
        }
        return null;
    }
}

最后接收到这个实体之后还需要做处理,转成

List<JSONObject> listTest = new ArrayList<JSONObject>();
	for (包含json的实体 confg : rgService.selectList()) {
		JSONObject jobject = confg.get实体字段();
		jobject.put("id", confg.getId());
		listTest.add(jobject);
}

最后返回的list中的数据就是json格式

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值