美文网首页
LitePal 数据库3.0使用方法

LitePal 数据库3.0使用方法

作者: MaybeSix | 来源:发表于2020-02-22 12:48 被阅读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的内容,内容如下

    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <!--
            定义应用程序的数据库名称。默认情况下,每个数据库名称应以.db结束。如果你没有名字数据库以.db结束, LitePal将为您自动加上后缀。例如:    
            <dbname value="demo" />
        -->
        <dbname value="demo" />
    
        <!--
            定义数据库的版本。每一次当你想要数据库升级时,版本标记会有帮助。
            修改模型中定义的映射标签“version”,就使版本值+ 1,数据库的升级将自动处理而不会出现问题。例如:   
            <version value="1" />
        -->
        <version value="1" />
    
        <!--
            在映射标签列表中定义您的模型,LitePal将会为每个映射类创建表。支持类中字段被映射到列。例如:   
            <list>
                <mapping class="com.test.model.Reader" />
                <mapping class="com.test.model.Magazine" />
            </list>
        -->
        <list>
    
        </list>
        
        <!--
            定义.db文件的位置。
            “internal”表示.db文件将存储在内部存储的数据库文件夹中,无人可以访问。
            “external”表示.db文件将存储在主外部存储设备上目录的路径中,每个人都可以访问的永久文件。
            默认值为“内部 internal”。 例如:
            <storage value =“external”/>
        -->
    
        
    </litepal>
    

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

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

    1.3对LitePal初始化

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

    <manifest>
        <application
            android:name="org.litepal.LitePalApplication"
            ...
        >
            ...
        </application>
    </manifest>
    

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

    <manifest>
        <application
            android:name="com.example.MyApplication"
            ...
        >
            ...
        </application>
    </manifest>
    
    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<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>
    

    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<Song>(id)
    

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

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

    Kotlin:

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

    2.4查询

    通过id查询某一条数据

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

    Kotlin:

    val song = LitePal.find<Song>(id)
    

    查询所有数据
    Java:

    Kotlin:

    val allSongs = LitePal.findAll<Song>()
    

    构建复杂查询:
    Java:

    List<Song> 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<Song>()
    

    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<Album>(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<Song>() {
        @Override
        public void onFinish(List<Song> allSongs) {
        
        }
    });
    

    Kotlin:

    LitePal.findAsync<Song>().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使用方法

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