您的位置:首页 > 其它

LitePal的CRUD操作

2015-11-10 19:28 330 查看
前面说到LitePalBase是LitePal所有组件的基类,因此这边很重要的DataHandler就是继承与它,不过依然是抽象类。所有CRUD操作的组件都继承于DataHandler。快来让我们看一下它做了哪些事。

1、mDatabase -> SQLiteDatabase 数据库
2、query(...) -> List<T>
查询一个给定的model的表,返回数据。让我们看下入参
Class<T> modelClass,比如我要查询Song表的数据,传入Song.class;
String[] columns,要查询的列名,比如{name, size},如果传入是null,则返回所有的列;
String selection,条件过滤,例如"name=? and size>0"
String[] selectionArgs,条件过滤中?的参数
String groupBy,分组过滤
String having
String orderBy,排序
String limit,数据项个数限制
List<AssociationsInfo> foreignKeyAssociations,外键关联

3、mathQuery
用来处理聚合操作,比如count、sum、average、max、min等。

4、putFieldsValue
遍历入参的所有属性,并且把属性对应的值存到表中。通过Java的映射机制去调用属性的get方法取到属性对应的值。

一、DeleteHandler
继承于DataHandler。这个类的使用基于DataSupport,主要用来处理数据库中删除的操作。

1、int
onDelete(DataSupport baseObj)
这是一个提供给其他类用来执行删除操作的开发接口。这里baseObj必须被保存,否则删除不生效。baseObj决定了要删除哪条记录。当记录被删除,所有引用的数据例如外键值也会被移除。下面列出几个不同条件下的删除操作:
int
onDelete(Class<?> modelClass,
long
id),删除指定表,指定数据;
int
onDeleteAll(String tableName, String... conditions),删除指定表某个条件下的数据;
int
onDeleteAll(Class<?> modelClass, String... conditions),删除指定表某个条件下的数据;

2、private
int
deleteCascade(Class<?> modelClass,
long
id)
通过private
void
analyzeAssociations(Class<?> modelClass)这个方法分析model类和存起来的关联表之间的关系,获取到相关联的外键。在deleteCascade的方法里面将要删除的外键删除。

[align=left]二、QueryHandler[/align]
[align=left]用来处理数据库中的查询操作。[/align]

1、<T> T onFind(Class<T> modelClass,
long
id,
boolean
isEager)查询指定id的记录,isEager表示是否激进查询,激进查询会将关联的表的数据取出来。非激进查询即懒惰查询。

2、<T> T onFindFirst(Class<T> modelClass,
boolean
isEager)查询第一条数据。

3、<T> T onFindLast(Class<T> modelClass,
boolean
isEager)查询最后一条数据。

4、<T> List<T> onFindAll(Class<T> modelClass,
boolean
isEager,
long... ids)查询所有的数据。

5、<T> List<T> onFind(Class<T> modelClass, String[] columns, String[]
conditions, String orderBy, String limit,
boolean
isEager)

[align=left]这里还提供了一些聚合函数。[/align]
int
onCount(String tableName, String[] conditions)
double
onAverage(String tableName, String column, String[] conditions)
[align=left]<T> T onMax(String tableName, String column, String[] conditions, Class<T> type)[/align]
[align=left]<T> T onMin(String tableName, String column, String[] conditions, Class<T> type)[/align]
[align=left]<T> T onSum(String tableName, String column, String[] conditions, Class<T> type)[/align]

[align=left]三、SaveHandler[/align]
[align=left]这个类和DeleteHandler使用的条件类似,基于DataSupport,还要处理关联表的数据保存。[/align]

[align=left]1、保存方法[/align]
void
onSave(DataSupport baseObj)
<T
extends
DataSupport>
void
onSaveAll(Collection<T> collection)
[align=left]首先baseObj将会被保存到数据库,然后分析它的关联表,最后再去处理保存操作。[/align]

[align=left]2、执行保存[/align]
privatevoid
doSaveAction(DataSupport baseObj, List<Field> supportedFields)
[align=left]在这里正式进行数据持久化处理。首先调用的是beforeSave方法将值放到ContentValues里面(包括属性数据和外键数据),然后调用insert方法存入数据,最后再调用afterSave,分配id给新的记录,更新外键值等。[/align]

[align=left]四、UpdateHandler[/align]
[align=left]基于DataSupport,处理更新操作。[/align]

[align=left]1、更新方法[/align]
int
onUpdate(DataSupport baseObj,
long
id)
int
onUpdate(Class<?> modelClass,
long
id, ContentValues values)
int
onUpdateAll(DataSupport baseObj, String... conditions)
int
onUpdateAll(String tableName, ContentValues values, String... conditions)

[align=left]五、AssociationsAnalyzer[/align]
[align=left]关联分析者[/align]

[align=left]1、get/set方法[/align]
[align=left]getReverseAssociatedModels[/align]
[align=left]getReverseAssociatedModels[/align]
[align=left]获取或者设置给定model的关联表[/align]

[align=left]2、如果表或者关联表是null了,清楚外键。[/align]
mightClearFKValue(DataSupport baseObj,
AssociationsInfo
associationInfo)

[align=left]3、获取外键名[/align]
[align=left]String getForeignKeyName(AssociationsInfo associationInfo)[/align]

[align=left]三个子类:Many2ManyAnalyzer、Many2OneAnalyzer、One2OneAnalyzer。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: