LitePal 使用说明

作者: 雨林雨林 | 来源:发表于2017-03-09 17:21 被阅读2146次

LitePal

Android开源数据库框架

资料

Github

设置

导入

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

配置

  • assets 目录创建 litepal.xml
<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo" />
    <version value="1" />
    <list>
      <mapping class="com.test.model.Reader" />
      <mapping class="com.test.model.Magazine" />
    </list>
    <storage value="external" />
</litepal>
  • dbname 定义数据库名。默认以 .db 结尾,如未以此结尾,则自动添加。
  • version 定义数据库版本。辅助升级数据库。
  • list 根据标签 mapping 对应的类创建表,成员变量对应字段。
  • storage 定义数据库文件存储的地方,可选 internal 和 external, 默认为 internal

初始化

  • 在自定义的Application中初始化
LitePal.initialize(this);
  • 或者使用LitePal库的Application
<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
    ...
    </application>
</manifest>

基本用法

建表

  • 定义 Bean,继承 DataSupport
  • id字段可写可不写,默认自动产生
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>(); // 关系:对多

    // 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
<list>
    <mapping class="org.litepal.litepalsample.model.Album" />
    <mapping class="org.litepal.litepalsample.model.Song" />
</list>
  • 获取数据库
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<Song> songs = new ArrayList<Song>();

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

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

<version value="2" />
  • 丢失数据状况
    • 注解成员变量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<Song> allSongs = DataSupport.findAll(Song.class);
List<Song> songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);
List<Song> songs = DataSupport.where("name like ?", "song%").order("duration").limit(3).offset(1).find(Song.class); // 分页查询

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

异步

  • 大部分方法都有对应的异步方法
// 查询
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
    @Override
    public <T> void onFinish(List<T> t) {
        List<Song> allSongs = (List<Song>) 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 使用说明

    LitePal Android开源数据库框架 资料 Github 设置 导入 配置模组的 build.gradle...

  • litepal数据库问题

    LitePal项目地址[https://github.com/guolindev/LitePal] litepal...

  • LitePal

    LitePal 最新dependencies compile 'org.litepal.android:core:...

  • LitePal学习(二)——数据库升级

    前言 在LitePal学习(一)——配置讲过了LitePal的基本配置,这里讲讲LitePal的数据库升级吧。 讲...

  • LitePal的使用

    不怕跌倒,所以飞翔 本文知识点介绍 LitePal的集成和简单的使用 LitePal中实现增删改查 LitePal...

  • LitePal For Android(替代SQLite传统操作

    Github地址 LitePal配置 引用jar包引用litepal-1.6.0.jarlitepal-1.6.0...

  • LitePal框架数据存储

    一、使用LitePal操作数据库 (1)将LitePal的jar包引入到项目当中LitePal的最新版本(2)在项...

  • LitePal数据库框架的简单介绍及使用

    相信我,当你用上 LitePal 之后,你将再也不想去碰 SQLiteDatabase 了。 LitePal是一款...

  • LitePal

    简介 LitePal是一款开源的Android数据库开发框架,采用了对象关系映射(ORM)的模式(即将面向对象的语...

  • LitePal

    首先在dependencies闭包添加依赖 在APP目录下创建assets 定义要写入数据库中的类 在Activi...

网友评论

  • w_不放弃:您好,请问如何指定数据库的路径呢

本文标题:LitePal 使用说明

本文链接:https://www.haomeiwen.com/subject/mqewgttx.html