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<String, String> 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;
|
}
|
|
}
|