hefeixia
2021-02-18 5b8c95c760840f09910730943b21391e47187315
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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;
    }
 
}