
sf.database.jdbc.extension.ObjectFastJsonMapping Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sorm Show documentation
Show all versions of sorm Show documentation
java jpa tool for spring
The newest version!
package sf.database.jdbc.extension;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.JsonProcessingException;
import sf.common.exception.SmallOrmException;
import sf.database.dialect.DBDialect;
import sf.database.jdbc.type.TypeHandler;
import sf.database.meta.ColumnMapping;
import sf.spring.util.Assert;
import sf.tools.StringUtils;
import java.lang.reflect.Type;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
/**
* 扩展Java-DB的映射规则,将复杂对象转换为JSON与数据库中的文本进行对应
* @author
*/
public class ObjectFastJsonMapping implements TypeHandler {
private SerializerFeature feature = null;
private SerializerFeature[] features = new SerializerFeature[0];
private Class clazz = (Class) Object.class;
private Type genericType;
@Override
public void setDefaultJavaType(Class clz) {
Assert.notNull(clz, "自定义类型不能为空");
clazz = clz;
}
@Override
public Class getDefaultJavaType() {
return clazz;
}
@Override
public int getSqlType() {
return Types.CLOB;
}
@Override
public void setColumnMapping(ColumnMapping columnMapping) {
this.genericType = columnMapping.getFieldAccessor().getGenericType();
this.clazz = (Class) columnMapping.getClz();
}
@Override
public T get(ResultSet rs, int n) throws SQLException {
String o = rs.getString(n);
if (StringUtils.isEmpty(o))
return null;
return getObject(o);
}
@Override
public T get(ResultSet rs, String columnName) throws SQLException {
String o = rs.getString(columnName);
if (StringUtils.isEmpty(o))
return null;
return getObject(o);
}
@Override
public T get(CallableStatement cs, int index) throws SQLException {
String o = cs.getString(index);
if (StringUtils.isEmpty(o))
return null;
return getObject(o);
}
@Override
public T get(CallableStatement cs, String parameterName) throws SQLException {
String o = cs.getString(parameterName);
if (StringUtils.isEmpty(o))
return null;
return getObject(o);
}
private T getObject(String o) {
if (genericType != null) {
return JSON.parseObject(o, genericType);
} else {
return JSON.parseObject(o, clazz);
}
}
@Override
public void update(ResultSet rs, String columnLabel, Object value) throws SQLException {
String s = toJson(value);
rs.updateString(columnLabel, s);
}
@Override
public void update(ResultSet rs, int columnIndex, Object value) throws SQLException {
String s = toJson(value);
rs.updateString(columnIndex, s);
}
@Override
public Object set(PreparedStatement ps, Object obj, int index) throws SQLException {
if (obj == null) {
ps.setNull(index, getSqlType());
} else {
String s = toJson(obj);
ps.setString(index, s);
}
return null;
}
@Override
public Object set(CallableStatement cs, Object obj, String parameterName) throws SQLException {
if (obj == null) {
cs.setNull(parameterName, getSqlType());
} else {
String s = toJson(obj);
cs.setString(parameterName, s);
}
return null;
}
@Override
public String getSqlExpression(Object value, DBDialect profile) {
String s = JSON.toJSONString(value);
return ObjectJacksonMapping.wrapSqlStr(s);
}
public SerializerFeature getFeature() {
return feature;
}
public void setFeature(SerializerFeature feature) {
this.feature = feature;
this.features = new SerializerFeature[]{feature};
}
protected String toJson(Object obj) {
if (obj instanceof String) {
return (String) obj;
}
return JSON.toJSONString(obj, features);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy