摘要
mybatis用于bean和mysql字段映射,针对字段类型为JSONObject和JSONArray方式使用
ArrayTypeHandler:
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.alibaba.fastjson.JSONArray;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
/**
* @Author: Mickey
* @Date: 2019/7/1 10:22
* @Version 1.0
*/
@MappedTypes(JSONArray.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class ArrayTypeHandler extends BaseTypeHandler<JSONArray> {
/**
* 设置非空参数
*
* @param ps
* @param i
* @param parameter
* @param jdbcType
* @throws SQLException
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, JSONArray parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, String.valueOf(parameter.toJSONString()));
}
/**
* 根据列名,获取可以为空的结果
*
* @param rs
* @param columnName
* @return
* @throws SQLException
*/
@Override
public JSONArray getNullableResult(ResultSet rs, String columnName) throws SQLException {
String sqlJson = rs.getString(columnName);
if (null != sqlJson) {
return JSONArray.parseArray(sqlJson);
}
return null;
}
/**
* 根据列索引,获取可以为空的结果
*
* @param rs
* @param columnIndex
* @return
* @throws SQLException
*/
@Override
public JSONArray getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String sqlJson = rs.getString(columnIndex);
if (null != sqlJson) {
return JSONArray.parseArray(sqlJson);
}
return null;
}
@Override
public JSONArray getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String sqlJson = cs.getString(columnIndex);
if (null != sqlJson) {
return JSONArray.parseArray(sqlJson);
}
return null;
}
}
MySqlJsonHandler
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
/**
* @Author: Mickey
* @Date: 2019/7/1 10:22
* @Version 1.0
*/
@MappedTypes(JSONObject.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MySqlJsonHandler 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;
}
}
dao层使用
说明:
上面部分为字段类型映射
下面部分为具体使用设置参数时指定字段类型
@Results(id = "resultMap", value = {@Result(column = "task", property = "task", jdbcType = JdbcType.OTHER, typeHandler = com.geespace.microservices.data.computing.model.server.handler.MySqlJsonHandler.class),
====================================================================================
if (!StringUtils.isEmpty(dragSparkTask.getTask())) {
sql.VALUES("task", "#{task, jdbcType =OTHER, typeHandler =\n"
"com.geespace.microservices.data.computing.model.server.handler.MySqlJsonHandler}");
}