Android SQLite轻量框架LitePal
简介
LitePal是一个开源的安卓库,允许程序员极其简单的操作SQLite数据库。甚至不用写一句SQL语句就能完成大多数SQLite数据库操作,包括创建去或者更新表,CRUD操作,聚合操作等等。
特点
- 使用对象关系映射模型(ORM)。
- 基本上0配置,仅仅需要一个配置文件。
- 自动与表保持联动(创建、修改或者删除)。
- 多数据库支持。
- 对SQL语句进行封装。
- 简洁的查询语句。
- 同时支持原生API的使用。
一,配置
1. 导入库
下载jar文件点击进入选择合适的版本进行下载
或者
直接在gradle中引入依赖:
JAVA
dependencies {
compile 'org.litepal.android:core:1.5.1'
}
2. 配置litepal.xml文件
创建assert文件夹(与res同级),在其中创建litepal.xml文件,在里面如下配置:
XML
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--
定义数据库的名称,默认情况下需要添加后缀.db,如果没有添加litepal内部将会自动添加该后缀
-->
<dbname value="demo" />
<!--
定义数据库的版本,每次你想升级数据库的时候在此处进行版本号定义.通常当你修改了下面mapping中的model类后需要升级,版本号加一
-->
<version value="1" />
<!--
定义模型类(如同javabean)在mapping标签中,litepal将会为每个类创建一个表,表中的列将是类中声明为private的成员.例如:
<list>
<mapping class="com.test.model.Reader" />
<mapping class="com.test.model.Magazine" />
</list>
-->
<list>
</list>
<!--
定义数据库文件创建在内部存储还是外部存储,值为internal或者external
默认为internal
例如:
<storage value="external" />
-->
<storage value="external" />
</litepal>
3. 配置LitePalApplication
为了避免每次使用都需要传递Context变量,可以直接在AndroidManifest.xml文件中使用LitePalApplication.
XML
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
如果有自定义的Application,让它继承至LitePalApplication即可.然后需要Application的onCreate方法中初始化:
JAVA
public class MyOwnApplication extends AnotherApplication {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
...
}
二,使用
1. 创建表
定义模型类,假如创建了一个Album类:
JAVA
public class Album extends DataSupport {
@Column(unique = true, defaultValue = "unknown")
private String name;
private float price;
private byte[] cover;
private List<Song> songs = new ArrayList<Song>();
// generated getters and setters.
...
}
然后在配置文件litepal.xml文件中配置:
XML
<list>
<mapping class="org.litepal.litepalsample.model.Album" />
</list>
之后在你下次操作数据库时该表自动创建.你就假设该表已经存在,当你打开,插入数据等操作时litepal检测到表不存在将会自动创建.
2. 更新表
直接对模型类进行修改:
JAVA
public class Album extends DataSupport {
@Column(unique = true, defaultValue = "unknown")
private String name;
@Column(ignore = true)
private float price;
private byte[] cover;
private Date releaseDate;
private List<Song> songs = new ArrayList<Song>();
// generated getters and setters.
...
}
这里添加了一个releaseDate变量(字段),price变量(字段)注释为忽略.
然后在litepal.xml文件中更新版本号:
XML
<!-- 假设之前版本号为1 -->
<version value="2" ></version>
表将会在下次对数据库进行操作时更新,添加一个releaseDate字段,移除price字段.
3. 保存数据
继承自DataSupport的子类将会有save方法,调用即可保存数据到数据库:
JAVA
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.save();
4. 查询数据
查询单条数据根据id:
JAVA
Album album = DataSupport.find(Album.class, id);
条件查询:
JAVA
//注意问号
List<Album> albums = DataSupport.where("name=?", "fantasy").order("price").find(Album.class);
5. 更新数据
查询到数据取得模型类的对象,调用set方法修改后调用save保存即可.
JAVA
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();
6. 删除数据
和查询数据用法类似.
根据id删除单条数据:
Java
DataSupport.delete(Song.class, id);
删除所有数据:
JAVA
DataSupport.deleteAll(Song.class, "duration > ?" , "350");
7. 异步操作
当操作的数据量过大时可能需要异步操作避免当前线程阻塞,litepal支持所有CRUD操作方法异步操作.(都有对应的async方法)
例如:
JAVA
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
@Override
public <T> void onFinish(List<T> t) {
List<Song> allSongs = (List<Song>) t;
}
});
如果需要的话,调用listen方法添加该操作的监听器.
以上还是有不少是借鉴各位大神的网志作为参考!
这一次可要我晕了好久,总是丢三落四的。
总算是把这次的网志给补上了!
还是和往常一样,给大家推荐一首歌!
Clsr (Aash Mehta Flip)
最后还是祝大家酷酷的!不知道会不会有人赞我。。。罒ω罒