一、
Generator继承于LitePalBase,用来动态关联数据库。创建或者更新litepal.xml里面需要映射的类。基类主要的任务是从映射类里面读取属性,并且格式化数据类型。具体的分析工作将在子类里面完成。
private
Collection<TableModel>
mTableModels
;
private
Collection<AssociationsModel>
mAllRelationModels
;
这边有两个属性是用来记录所有的表和关联表。
1、执行sql语句
protected
void
execute(String[] sqls, SQLiteDatabase db)
子类可以调用这个方法取执行sql语句,或者重写execute方法实现自己的逻辑。
2、添加关联/更新关联
private
static
void
addAssociation(SQLiteDatabase db,
boolean
force)
private
static
void
updateAssociations(SQLiteDatabase db)
3、更新表
private
static
void
upgradeTables(SQLiteDatabase db)
4、创建表
private
static
void
create(SQLiteDatabase db,
boolean
force)
5、删除表
private
static
void
drop(SQLiteDatabase db)
6、创建数据库
static
void
create(SQLiteDatabase db)
7、更新数据库
static
void
upgrade(SQLiteDatabase db)
二、
AssociationCreator
继承于Generator,处理表关联。
1、添加或更新表关联
- void addOrUpdateAssociation(SQLiteDatabase db, boolean force)
- void addAssociations(Collection<AssociationsModel> associatedModels, SQLiteDatabase db, boolean force)
2、生成SQL语句
- String generateCreateTableSQL(String tableName, Map<String, String> columnsMap, boolean autoIncrementId)
- String generateDropTableSQL(String tableName)
- String generateAddColumnSQL
3、添加外键
void
addForeignKeyColumn(String tableName, String associatedTableName,
String tableHoldsForeignKey, SQLiteDatabase db)
三、Creator
继承于AssociationCreator。用来创建表。它将自动创建一个TableMoel对应的表。如果数据库中已经有存在的同名表,LitePal将会先删除在创建。
1、根据TableModel创建表
void
createOrUpgradeTable(SQLiteDatabase db,
boolean
force)
2、获取创建表的SQL语句
String[] getCreateTableSQLs(TableModel tableModel, SQLiteDatabase db,
boolean
force)
3、获取删除表的SQL语句
String generateDropTableSQL(TableModel tableModel)
四、AssiciationUpdater
继承于Creator,用来更新表关联。
1、处理外键列
List<String> getForeignKeyColumns(TableModel tableModel)
boolean
isForeignKeyColumn(TableModel tableModel, String columnName)
void
removeForeignKeyColumns
List<String> findForeignKeyToRemove
(TableModel tableModel)
2、删除给定表名的表
void
dropTables(List<String> dropTableNames, SQLiteDatabase db)
五、Dropper
继承于AssociationUpdater,用来处理表删除操作。
1、删除映射列表中已经不存在的表。
void
dropTables()
2、遍历需要删除的表
List<String> findTablesToDrop()
3、判断一个表是否需要删除
boolean
shouldDropThisTable(String tableName,
int
tableType)
六、Upgrader
继承于AssociationUpdater,用来处理表更新操作。第一步是删除Model类中已经没有,但是数据库中海油的列。然后添加新增的列。最后再检查记录是否需要改变。
private
void
upgradeTable() {
removeColumns(findColumnsToRemove(),
mTableModel
.getTableName());
addColumn(findColumnsToAdd());
changeColumnsType(findColumnTypesToChange());
}