LitePal 使用方法

    xiaoxiao2021-03-25  87

    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,继承 DataSupportid字段可写可不写,默认自动产生 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:saveAllBean: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/updateAllBean: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/markAsDeletedBean:delete/clearSavedStateBean必须是已持久化的对象,否则无效 DataSupport.delete(Song.class, id); // 删除 DataSupport.delete(Song.class); // 删除所有数据 DataSupport.deleteAll(Song.class, "duration > ?" , "350"); // 条件删除

    查询

    DataSupport:find/findFirst/findLast/findAll/findBySQL/isExistDataSupport: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();

    异步

    大部分方法都有对应的异步方法如果不需要返回接.listen(null) // 查询 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"); // 删库
    转载请注明原文地址: https://ju.6miu.com/read-14130.html

    最新回复(0)