版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34178998/article/details/88998244
对最近的知识点做下总结吧,首先就是关于一个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格式