Android數(shù)據(jù)庫之LitePal筆記

郭神博客傳送門

一. 什么是LitePal?

LitePal是郭神寫的開源Android數(shù)據(jù)庫框架,采用了對(duì)象-關(guān)系映射(ORM),并對(duì)數(shù)據(jù)庫常用操作進(jìn)行了封裝,Github地址是https://github.com/LitePalFramework/LitePal。

二. 優(yōu)點(diǎn)

  • 實(shí)現(xiàn)了ORM映射,不用自己對(duì)Cursor進(jìn)行封裝。
  • 簡化了SQLiteDatabase的CURD操作。

三. 使用方法

1. 先進(jìn)行各種配置

  • 添加依賴
compile 'org.litepal.android:core:1.5.1'//版本號(hào)以官方最新為準(zhǔn)
  • 在assets(Project\app\src\main\assets)文件夾下(若沒有該文件夾,手動(dòng)添加),添加配置文件litepal.xml(用來配置數(shù)據(jù)庫名、版本等信息)
<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--
        用來定義數(shù)據(jù)庫名,應(yīng)該以.db結(jié)束,但是可以不寫,LitePal會(huì)自動(dòng)添加
    -->
    <dbname value="demo" />

    <!--
        定義數(shù)據(jù)庫版本號(hào),每次升級(jí)數(shù)據(jù)庫配置的時(shí)候應(yīng)該將該值加1,初始版本為1
    -->
    <version value="1" />

    <!--
        在mapping子標(biāo)簽里定義要映射的類
        例如:
        <list>
            <mapping class="com.test.model.Reader" />
            <mapping class="com.test.model.Magazine" />
        </list>
    -->
    <list>
    </list>
    
    <!--
        定義數(shù)據(jù)庫文件存放的位置,internal代表儲(chǔ)存在內(nèi)置存儲(chǔ),external代表儲(chǔ)存在外部存儲(chǔ)??梢圆粚?,默認(rèn)是internal。
        例如:
        <storage value="external" />
    -->
<storage value="internal" />
</litepal>
  • 配置application
<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
        ...
    </application>
</manifest>

如果已經(jīng)配置過application,則在自己application的onCreate添加LitePal.initialize(this);

2. 配置完成,開始使用

  1. 新建數(shù)據(jù)庫
    • 新建JavaBean
public class Demo {
    /*@Column注解可以為映射的列添加約束,共有四個(gè)值
    * nullable 是否為空約束
    * unique 唯一約束
    * ignore 映射的時(shí)候忽略的屬性
    * defaultValue 默認(rèn)值設(shè)置
    * */
    @Column(nullable = false,unique = true,ignore = false,defaultValue = "123")
    private String name;

    @Column(nullable = false ,defaultValue = "18")
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 將bean添加到模型映射中
<list>
        <mapping class="bean1"/>
        <mapping class="bean2"/>
        <mapping class="bean3"/>
    </list>
  • 調(diào)用LitePal.getDatabase(),Lite Pal就會(huì)創(chuàng)建數(shù)據(jù)庫
  1. 升級(jí)數(shù)據(jù)庫
    • 升級(jí)的時(shí)候要是要加入新的Bean則添加映射,然后再將litepal.xml里面的版本號(hào)加1即可
    • 升級(jí)數(shù)據(jù)庫過程數(shù)據(jù)不會(huì)丟失
  2. 添加數(shù)據(jù)
    • 將bean類繼承自DataSupport
    • 實(shí)例化bean,設(shè)置參數(shù),調(diào)用save()方法就可以將數(shù)據(jù)插入數(shù)據(jù)庫了
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();
  1. 刪除數(shù)據(jù)
    • delete(bean.class,rowId)方法(刪除某張表中rowid對(duì)應(yīng)的行)
DataSupport.delete(Song.class, id);
  • deleteAll(bean.class,String...conditions)方法(根據(jù)conditions條件刪除表中的數(shù)據(jù))
DataSupport.deleteAll(Song.class, "duration > ?" , "350");
  1. 修改(更新)數(shù)據(jù)
    • save()(找到已經(jīng)存在的對(duì)象,然后重新設(shè)置屬性,重新save)
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();
  • update(int rowId)(新建對(duì)象,設(shè)置要更改的屬性,調(diào)用update方法,更新要更新的行)
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);
  • updateAll(bean.class,String... conditinos)(更新滿足條件的行)
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");
  1. 查詢數(shù)據(jù)
    • 通過find(bean.class,int rowId)查找指定行
Song song = DataSupport.find(Song.class, id);
  • 通過findAll(bean.class,long... ids)查找想要查找的行
List<Song> allSongs = DataSupport.findAll(Song.class);//查找所有行
List<Song> allSongs = DataSupport.findAll(Song.class,1,2,3);//查找前三行
  • 連綴查詢
連綴查詢
連綴查詢續(xù)
  • 原生查詢
Cursor cursor = DataSupport.findBySQL(String sql)

四. 更多操作

  • 分頁操作:采用連綴查詢,用limit限制每頁展示的條數(shù),用offset設(shè)置偏移量來查詢需要的數(shù)據(jù)
/**
     * 分頁查詢
     * @param offset 偏移量,用來查詢分頁數(shù)據(jù),剛開始o(jì)ffset為0,查詢前20條,然后offset設(shè)置為20,就查詢21-40的數(shù)據(jù),以此類推
     * @return 查詢到的數(shù)據(jù)List
     */
    public static List<User> queryPagingData(int offset){
        List<User> userList = DataSupport.select("name","age","gender")
                .where()
                .limit(20)
                .offset(offset)
                .find(User.class);
        return userList;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容