LitePal使用概要
2019-06-18 本文已影响0人
世外大帝
已经很久没用数据库了,litepal也更新到3.0了,不过使用方法还没什么变化,总体来说还是非常方便的。
安装步骤如下:
-
添加依赖
在 build.gradle 中添加依赖
implementation 'org.litepal.android:java:3.0.0'
-
配置 litepal.xml
在main目录下创建assets资源文件夹,并创建litepal.xml文件
<?xml version="1.0" encoding="utf-8"?> <litepal> <!-- 数据库名,加不加.db都行,如果没加默认会加 --> <dbname value="demo" /> <!-- 数据库版本,每次修改映射文件后+1 --> <version value="1" /> <!-- 添加映射文件如下所示: <list> <mapping class="com.test.model.Reader" /> <mapping class="com.test.model.Magazine" /> </list> --> <list> </list> <!-- 定义数据库文件存储位置,默认"internal",可选"external" <storage value="external" /> --> </litepal>
-
全局加载
在Application的create方法中添加
LitePal.initialize(this);
以初始化类库。Note:
- 尽早调用
- 避免使用Activity和Service的实例进行传参,以防内存泄漏
- 记得在 AndroidManifest.xml 中加上name属性
- 如果你不需要创建Application,可以直接在 AndroidManifest.xml 的name属性上添加
org.litepal.LitePalApplication
至此,安装完成。
使用步骤如下:
-
创建表
-
定义模型
public class Album extends LitePalSupport { @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. ... }
public class Song extends LitePalSupport { @Column(nullable = false) private String name; private int duration; @Column(ignore = true) private String uselessField; private Album album; // generated getters and setters. ... }
-
添加模型到 litepal.xml 文件的映射列表
<list> <mapping class="org.litepal.litepalsample.model.Album" /> <mapping class="org.litepal.litepalsample.model.Song" /> </list>
- 这就创建好了,下次调用时自动创建,如:
SQLiteDatabase db = LitePal.getDatabase();
-
-
更新表
- 在bean中随便改
- 然后去litepal中,把版本号+1
- 在下次调用时自动更新
-
无法处理的情况:(如果碰到这种情况,只有重新安装)
- 添加一个字段的注解为
unique = true
- 变更一个字段的注解为
unique = true
- 变更一个字段的注解为
nullable = false
- 添加一个字段的注解为
-
添加数据
从LitePalSupport继承的每个模型都可以使用save()方法来添加数据
Album album = new Album(); album.setName("album"); album.setPrice(10.99f); album.setCover(getCoverImageBytes()); album.save(); Song song1 = new Song(); song1.setName("song1"); song1.setDuration(320); song1.setAlbum(album); song1.save(); Song song2 = new Song(); song2.setName("song2"); song2.setDuration(356); song2.setAlbum(album); song2.save();
-
更新数据
-
最简单的方法是使用
save()
方法更新find()
找到的记录。Album albumToUpdate = LitePal.find(Album.class, 1); albumToUpdate.setPrice(20.99f); // raise the price albumToUpdate.save();
-
使用 update() and updateAll() 方法
Album albumToUpdate = new Album(); albumToUpdate.setPrice(20.99f); // raise the price albumToUpdate.update(id);
-
条件更新
Album albumToUpdate = new Album(); albumToUpdate.setPrice(20.99f); // raise the price albumToUpdate.updateAll("name = ?", "album");
-
-
删除数据
-
根据id删除
LitePal.delete(Song.class, id);
-
条件删除
LitePal.deleteAll(Song.class, "duration > ?" , "350");
-
-
查询数据
-
根据id查找
Song song = LitePal.find(Song.class, id);
-
全部查找
List<Song> allSongs = LitePal.findAll(Song.class);
-
条件查找
List<Song> songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find(Song.class);
-
-
异步操作
默认情况下,数据库操作都在主线程上,如果时间过长,可以使用异步操作:
// 异步查找 LitePal.findAllAsync(Song.class).listen(new FindMultiCallback<Song>() { @Override public void onFinish(List<Song> allSongs) { } }); // 异步存储 Album album = new Album(); album.setName("album"); album.setPrice(10.99f); album.setCover(getCoverImageBytes()); album.saveAsync().listen(new SaveCallback() { @Override public void onFinish(boolean success) { } });
-
多表操作
暂时用不到,可到官网查看
-
创建和升级监听
暂时用不到,可到官网查看
source code from here: https://github.com/LitePalFramework/LitePal