LitePal 使用说明

LitePal

Android开源数据库框架

资料

Github

设置

导入

  • 配置模组的 build.gradle
compile 'org.litepal.android:core:1.5.0'

配置

  • assets 目录创建 litepal.xml


    
    
    
      
      
    
    

  • dbname 定义数据库名。默认以 .db 结尾,如未以此结尾,则自动添加。
  • version 定义数据库版本。辅助升级数据库。
  • list 根据标签 mapping 对应的类创建表,成员变量对应字段。
  • storage 定义数据库文件存储的地方,可选 internal 和 external, 默认为 internal

初始化

  • 在自定义的Application中初始化
LitePal.initialize(this);
  • 或者使用LitePal库的Application

    
    ...
    

基本用法

建表

  • 定义 Bean,继承 DataSupport
  • id字段可写可不写,默认自动产生
public class Album extends DataSupport {

    @Column(unique = true, defaultValue = "unknown")  // 唯一,默认值
    private String name;

    private float price;

    private byte[] cover;

    private List songs = new ArrayList(); // 关系:对多

    // getters/setters
}

public class Song extends DataSupport {

    @Column(nullable = false) // 非空
    private String name;

    private int duration;

    @Column(ignore = true)  // 忽略
    private String uselessField;

    private Album album; // 关系:对一

    // getters/setters
}
  • 修改 litepal.xml

    
    

  • 获取数据库
SQLiteDatabase db = LitePal.getDatabase();
  • 对应的SQL语句
CREATE TABLE album (
    id integer primary key autoincrement,
    name text unique default 'unknown',
    price real,
    cover blob
);

CREATE TABLE song (
    id integer primary key autoincrement,
    name text not null,
    duration integer,
    album_id integer
);

关系

  • 定义Bean时定义成员变量,即在建表时自动创建外键
  • 对一,成员变量为另一个Bean
  • 对多,成员变量为另一个Bean的集合
  • 多对多,两个Bean互相定义成员变量为另一Bean的集合
  • 数据表删除操作时,自动按外键进行删除

升级

  • 修改 Bean
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 songs = new ArrayList();

    // getters/setters
}
  • 修改 litepal.xml

版本号增加,数据自动保存


  • 丢失数据状况
    • 注解成员变量unique = true
    • 改变注解unique = true
    • 改变注解nullable = false

增加

  • DataSupport:saveAll
  • Bean:save/saveThrows/saveOrUpdate
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();

修改

  • DataSupport:update/updateAll
  • Bean:update/updateAll/setToDefault/assignBaseObjId
Album albumToUpdate = DataSupport.find(Album.class, 1); //查找
albumToUpdate.setPrice(20.99f);
albumToUpdate.save(); // 保存

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f);
albumToUpdate.update(id); // 更新

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f);
albumToUpdate.updateAll("name = ?", "album"); // 更新所有

Album albumToUpdate = new Album();
albumToUpdate.setToDefault("name"); // 更新为默认值
albumToUpdate.updateAll();

删除

  • DataSupport:delete/deleteAll/markAsDeleted
  • Bean:delete/clearSavedState
  • Bean必须是已持久化的对象,否则无效
DataSupport.delete(Song.class, id); // 删除
DataSupport.delete(Song.class); // 删除所有数据
DataSupport.deleteAll(Song.class, "duration > ?" , "350"); // 条件删除

查询

  • DataSupport:find/findFirst/findLast/findAll/findBySQL/isExist
  • DataSupport:select/where/order/limit/offset 查询条件
  • Bean:isSaved
Song song = DataSupport.find(Song.class, id);
Song song = DataSupport.findFirst(Song.class); // 查询第一条
Song song = DataSupport.findLast(Song.class); // 查询最后一条

List allSongs = DataSupport.findAll(Song.class);
List songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);
List songs = DataSupport.where("name like ?", "song%").order("duration").limit(3).offset(1).find(Song.class); // 分页查询

 // 联合查询,可以查询关联表
Album album = DataSupport.find(Album.class, id, true);
List songs = album.getSongs();

异步

  • 大部分方法都有对应的异步方法
// 查询
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
    @Override
    public  void onFinish(List t) {
        List allSongs = (List) t;
    }
});

// 增加
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) {

    }
});

聚合函数

count/average/max/min/sum

int result = DataSupport.count(Song.class);
int result = DataSupport.where("name like ?", "song%").count(Song.class);

double result = DataSupport.sum(Album.class, "price", double.class);

多库

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

LitePalDB litePalDB = LitePalDB.fromDefault("newdb");
LitePal.use(litePalDB); // 使用 litepal.xml 创建一个新库

LitePal.useDefault(); // 返回默认库

LitePal.deleteDatabase("newdb"); // 删库

你可能感兴趣的:(LitePal 使用说明)