package jef.database.dialect.extension; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; import jef.database.dialect.DatabaseDialect; import jef.database.dialect.type.AColumnMapping; import jef.database.jdbc.result.IResultSet; import jef.tools.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; /** * 扩展Java-DB的映射规则,将复杂对象转换为JSON与数据库中的文本进行对应 * @author jiyi * */ public class ObjectJsonMapping extends AColumnMapping{ private SerializerFeature feature = null; private SerializerFeature[] features=new SerializerFeature[0]; @Override public Object jdbcSet(PreparedStatement st, Object value, int index, DatabaseDialect dialect) throws SQLException { if (value == null) { st.setNull(index, Types.VARCHAR); return null; } else { String s=JSON.toJSONString(value,features); st.setString(index, s); return s; } } @Override public int getSqlType() { return Types.VARCHAR; } @Override public Object jdbcGet(IResultSet rs, int n) throws SQLException { String o = rs.getString(n); if(StringUtils.isEmpty(o))return null; return JSON.parseObject(o, this.getFieldAccessor().getGenericType()); } @Override protected Class<?> getDefaultJavaType() { return Object.class; } @Override protected String getSqlExpression(Object value, DatabaseDialect profile) { String s=JSON.toJSONString(value); return wrapSqlStr(s); } public SerializerFeature getFeature() { return feature; } public void setFeature(SerializerFeature feature) { this.feature = feature; this.features=new SerializerFeature[] {feature}; } }