LitePal 数据库3.0使用方法

简介

LitePal是郭霖大神写的。是一个使用起来非常方便的数据库框架。
项目源码地址:

https://github.com/LitePalFramework/LitePal

以下内容参照郭霖大神给的文档的翻译。

一、初始化

1.1导入依赖

如果你使用Java:

dependencies {
    implementation 'org.litepal.android:java:3.0.0'
}

如果你使用Kotlin:

dependencies {
    implementation 'org.litepal.android:kotlin:3.0.0'
}

1.2创建一个名字为 litepal.xml 的文件

在app/src/main下新建assets/litepal.xml(与java目录平级)
如图:


litepal.xml的位置

然后填写litepal的内容,内容如下



    
    

    
    

    
    

    
    
    

    

所以配置文件拥有以下属性:

  • dbname:配置项目的数据库名称。
  • version:数据库的版本。如果你想要升级数据库,那就+1。
  • list:配置映射类,类和数据库中的表映射。
  • storage:配置数据库文件的存储方式,分为内部还是外部存储。内部和外部只能选择一个。

1.3对LitePal初始化

初始化的方式有两种。
第一种是直接在manifest.xml文件中设置application的name属性:


    
        ...
    

第二种是在自己的Application中初始化


    
        ...
    

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
    ...
}

二、使用方法

2.1 创建表 Create tables

public class Album extends LitePalSupport {
    
    @Column(unique = true, defaultValue = "unknown")
    private String name;
    
    private float price;
    
    private byte[] cover;
    
    private List songs = new ArrayList();

    // 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文件中设置映射


    
    

2.2增加

Java:

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();

Kotlin:

val album = Album()
album.name = "album"
album.price = 10.99f
album.cover = getCoverImageBytes()
album.save()
val song1 = Song()
song1.name = "song1"
song1.duration = 320
song1.album = album
song1.save()
val song2 = Song()
song2.name = "song2"
song2.duration = 356
song2.album = album
song2.save()

2.3删除

若果要删除某一条数据,使用delete()方法:
Java:

LitePal.delete(Song.class, id);

Kotlin:

LitePal.delete(id)

如果要删除多条记录,使用deleteAll()方法:
Java:

LitePal.deleteAll(Song.class, "duration > ?" , "350");

Kotlin:

LitePal.deleteAll("duration > ?" , "350")

2.4查询

通过id查询某一条数据

Song song = LitePal.find(Song.class, id);

Kotlin:

val song = LitePal.find(id)

查询所有数据
Java:

Kotlin:

val allSongs = LitePal.findAll()

构建复杂查询:
Java:

List songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find(Song.class);

Kotlin:

val songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find()

2.5更改

最简单的方式就是用save()方法去更新find()方法找到的数据:
Java:

Album albumToUpdate = LitePal.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();

Kotlin:

val albumToUpdate = LitePal.find(1)
albumToUpdate.price = 20.99f // raise the price
albumToUpdate.save()

你也可以通过update()更新某一条数据
Java:

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);

Kotlin:

val albumToUpdate = Album()
albumToUpdate.price = 20.99f // raise the price
albumToUpdate.update(id)

使用updateAll()方法更新多条数据
Java:

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");

Kotlin:

val albumToUpdate = Album()
albumToUpdate.price = 20.99f // raise the price
albumToUpdate.updateAll("name = ?", "album")

2.6异步操作

数据库操作默认在主线程执行。同时LitePal对所有crud方法支持异步操作。假如想你想对歌曲表进行异步操作,可以这样做:

Java:

LitePal.findAllAsync(Song.class).listen(new FindMultiCallback() {
    @Override
    public void onFinish(List allSongs) {
    
    }
});

Kotlin:

LitePal.findAsync().listen { allSongs ->

}

异步只能使用 findAllAsync() 而不是 findAll()。然后追加 listen() 方法,当操作执行完毕,会被回调至 onFinish() 方法。

异步存储也是一样的操作方法。
Java:

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) {

    }
});

Kotlin:

val album = Album()
album.name = "album"
album.price = 10.99f
album.cover = getCoverImageBytes()
album.saveAsync().listen { success ->

}

异步只能使用 saveAsync() 而不是 save()。当操作执行完毕,存储结果会被回调至 onFinish() 方法。

三、多数据库支持

3.1多数据库使用

LitePal支持多数据库,如果你想使用多个数据库,可以这样做:

LitePalDB litePalDB = new LitePalDB("demo2", 1);
litePalDB.addClassName(Singer.class.getName());
litePalDB.addClassName(Album.class.getName());
litePalDB.addClassName(Song.class.getName());
LitePal.use(litePalDB);

将会创建“demo2”数据库,并且创建singer, album 和song表。

如果你只是想创建一个和litepal.xml配置相同的数据库,你可以这样:

LitePalDB litePalDB = LitePalDB.fromDefault("newdb");
LitePal.use(litePalDB);

如果想切换到默认数据库,可以这样操作:

LitePal.useDefault();

可以通过数据库名称删除数据库:

LitePal.deleteDatabase("newdb");

3.2监听数据库的创建和更新

如果你需要监听数据库创建或升级事件,你可以这样做:

LitePal.registerDatabaseListener(new DatabaseListener() {
    @Override
    public void onCreate() {
        // fill some initial data
    }

    @Override
    public void onUpgrade(int oldVersion, int newVersion) {
        // upgrade data in db
    }
});

四、混淆

-keep class org.litepal.** {
    *;
}

-keep class * extends org.litepal.crud.DataSupport {
    *;
}

-keep class * extends org.litepal.crud.LitePalSupport {
    *;
}

你可能感兴趣的:(LitePal 数据库3.0使用方法)