package frame.object.data; import java.util.List; import java.util.Map; import frame.object.dao.Filter; import frame.object.meta.EntityMeta; import frame.object.meta.EntityMetaLoader; import frame.persist.NamedSQL; import frame.persist.SQLRunner; public class DataObject { private static DataObjectContainer container; private static String SQL_GetEntity = "getEntity"; private static String SQL_InsertEntity = "insertEntity"; private static String SQL_UpdateEntity = "updateById"; private String tableName; private EntityMeta entityMeta; static { container = DataObjectContainer.getInstance(); } public DataObject(String tableName) { this.tableName = tableName; } public static DataObject getInstance(String dataName) throws Exception { DataObject result = container.get(dataName); if (result == null) { throw new DataException("DataNotExists", "dataobject not exists: " + dataName); } return result; } public static DataObject getInstance(String dataName, boolean nullThrowException) throws Exception { DataObject result = container.get(dataName); if (result == null && nullThrowException) { throw new DataException("DataNotExists", "dataobject not exists: " + dataName); } return result; } public Entity newEntity() throws Exception { return new Entity(entityMeta); } public EntitySet newEntitySet() throws Exception { return new EntitySet(entityMeta); } public int insertToDataBase(Entity entity) throws Exception { //1. check empty id if (entity.isEmptyValue("id")) { entity.set("id", ID.newValue()); } //2. insert NamedSQL namedSQL = NamedSQL.getInstance(SQL_InsertEntity); namedSQL.setTableName(tableName).setFieldNames(entity.getEntityMeta(), entity).setFieldValues(entity); return SQLRunner.execSQL(namedSQL); } public int updateToDateBaseWill(Entity entity, String updateColumn, Map excludeColumn) throws Exception { String updateValue = entity.getString(updateColumn); if (updateValue == null) { return -1; } NamedSQL namedSQL = NamedSQL.getInstance("updateByOther"); //namedSQL.setTableName(tableName).setFieldNames(entity.getEntityMeta(), entity, excludeColumn).setFieldValues(entity); namedSQL.setTableName(tableName).setFieldNameValues(entity, excludeColumn); namedSQL.setParam("appointColumn", updateColumn); namedSQL.setParam("appointValue", updateValue); return SQLRunner.execSQL(namedSQL); } public int updateToDataBase(Entity entity) throws Exception { String id = entity.getString("id"); if (id == null) { return 0; } NamedSQL namedSQL = NamedSQL.getInstance(SQL_UpdateEntity); namedSQL.setTableName(tableName).setFieldNameValues(entity).setParam("id", id); return SQLRunner.execSQL(namedSQL); } public EntityMeta getEntityMeta() throws Exception { if (entityMeta == null) { synchronized (this) { if (entityMeta == null) { loadEntityMeta(); } } } return entityMeta; } private void loadEntityMeta() throws Exception { NamedSQL namedSQL = NamedSQL.getInstance(SQL_GetEntity); Filter filter = new Filter(); filter.addItem("1", "<>", "1"); namedSQL.setTableName(tableName).setFilter(filter); EntityMetaLoader entityMetaLoader = new EntityMetaLoader(); entityMeta = entityMetaLoader.getEntityMetaByNamedSQL(namedSQL); } public String getTableName() { return tableName; } }