|
|
|
@ -215,12 +215,15 @@ class DelegateFind extends AbsDelegate { |
|
|
|
|
} else { |
|
|
|
|
sql = sb.toString(); |
|
|
|
|
} |
|
|
|
|
boolean paged=false; |
|
|
|
|
if (page != -1 && num != -1) { |
|
|
|
|
sql = sql.concat(String.format(" LIMIT %s,%s", (page - 1) * num, num)); |
|
|
|
|
paged=true; |
|
|
|
|
sql = sql.concat(String.format(" Group by %s LIMIT %s,%s", pTableName.concat(".").concat(m.parentColumn()), (page - 1) * num, num)); |
|
|
|
|
} |
|
|
|
|
Cursor cursor = db.rawQuery(sql, null); |
|
|
|
|
List<T> data = |
|
|
|
|
newInstanceEntity(wrapperClazz, parentClazz, childClazz, cursor, pColumn, cColumn); |
|
|
|
|
newInstanceEntity(wrapperClazz, parentClazz, childClazz, cursor, pColumn, cColumn,paged, db,m.entityColumn(),m.parentColumn()); |
|
|
|
|
|
|
|
|
|
closeCursor(cursor); |
|
|
|
|
return data; |
|
|
|
|
} catch (ClassNotFoundException e) { |
|
|
|
@ -243,7 +246,7 @@ class DelegateFind extends AbsDelegate { |
|
|
|
|
Class<T> wrapperClazz, Class<P> parentClazz, |
|
|
|
|
Class<C> childClazz, |
|
|
|
|
Cursor cursor, |
|
|
|
|
List<Field> pColumn, List<Field> cColumn) { |
|
|
|
|
List<Field> pColumn, List<Field> cColumn,boolean paged,SQLiteDatabase db,String entityColumn,String parentColumn) { |
|
|
|
|
List<T> wrappers = new ArrayList<>(); |
|
|
|
|
SparseArray<List<DbEntity>> childs = new SparseArray<>(); // 所有子表数据
|
|
|
|
|
SparseArray<DbEntity> parents = new SparseArray<>(); // 所有父表数据
|
|
|
|
@ -255,7 +258,12 @@ class DelegateFind extends AbsDelegate { |
|
|
|
|
childs.put(pRowId, new ArrayList<DbEntity>()); |
|
|
|
|
parents.put(pRowId, createParent(pRowId, parentClazz, pColumn, cursor)); |
|
|
|
|
} |
|
|
|
|
childs.get(pRowId).add(createChild(childClazz, cColumn, cursor)); |
|
|
|
|
if(paged){ |
|
|
|
|
childs.get(pRowId).addAll(createChildren(db,childClazz,pColumn,entityColumn,parentColumn,parents.get(pRowId))); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
childs.get(pRowId).add(createChild(childClazz, cColumn, cursor)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<Field> wFields = SqlUtil.getAllNotIgnoreField(wrapperClazz); |
|
|
|
@ -285,7 +293,22 @@ class DelegateFind extends AbsDelegate { |
|
|
|
|
|
|
|
|
|
return wrappers; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* 创建子对象集合 |
|
|
|
|
*/ |
|
|
|
|
private <T extends DbEntity> List<T> createChildren(SQLiteDatabase db,Class<T> childClazz, List<Field> pColumn, |
|
|
|
|
String entityColumn,String parentColumn,DbEntity parents) |
|
|
|
|
throws IllegalAccessException { |
|
|
|
|
|
|
|
|
|
for (Field field : pColumn) { |
|
|
|
|
field.setAccessible(true); |
|
|
|
|
if(field.getName().equals(parentColumn)){ |
|
|
|
|
Object o = field.get(parents); |
|
|
|
|
return findData(db,childClazz,entityColumn+"='"+o+"'"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return new ArrayList<T>(); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* 创建子对象 |
|
|
|
|
*/ |
|
|
|
|