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]
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]
相关文章推荐
- 软件架构师成长之路
- iOS开发之设计一个新闻客户端模板(Swift)
- 网络爬虫介绍及数据采集
- NVLink技术及影响解析
- 匿名内部类
- Android快速SDK(7)图像加载库ImageLoader【傻瓜模式】
- AndroidStudio快速入门二:Gradle快速构建Android项目(多个Module同时构建)
- LitePal中需要用到的Model
- 一些异常封装
- NoSQL:从关系型数据库到非关系型数据库
- java基础1
- ajax订单支付,提示订单过期 (传递data为普通格式)
- codeforces 150A 题解
- Generator数据库的管理者
- 题目1.2.4 The Seven Percent Solution(C++)
- 二孩成驱动力?母婴垂直电商坐等机遇不可取
- cookie和Jsessionid
- sicily 2015 A New Year Gift
- 使用/dev/kmem读取内核变量的值
- linux教程