android數(shù)據(jù)庫(kù)litepal使用記錄

簡(jiǎn)介:

litepal是郭霖的一款開源的android數(shù)據(jù)庫(kù)框架,采用關(guān)系映射(ORM)的模式,這是github
地址
,最新版本已經(jīng)更新到1.6,支持eclipse,gridle使用如下:

 compile 'org.litepal.android:core:1.6.0'

配置:

創(chuàng)建assets目錄,新建litepal.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--數(shù)據(jù)庫(kù)名字 -->
    <dbname value="demo" />

    <!--數(shù)據(jù)庫(kù)版本 -->
    <version value="1" />

    <!--數(shù)據(jù)庫(kù)實(shí)體類,用于映射-->
    <list>
            <mapping class="com.test.model.Reader" />
            <mapping class="com.test.model.Magazine" />
    </list>
 
</litepal>

litepal初始化有兩種方式:

1.將你清單文件的Application換成LitePalApplication

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

2.將你的Application繼承自Application,然后在onCreat(),進(jìn)行litepal的初始化

public class MyOwnApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
    ...
}

使用litepal

創(chuàng)建實(shí)體類

litepal需要用于映射的實(shí)體類需要繼承DataSupport,并生成get和set方法,關(guān)于這兩個(gè)方法,推薦一個(gè)庫(kù):
lombok,gridle使用添加:

compile 'org.projectlombok:lombok:1.16.18'

添加之后你的get和set方法只用在類名上面添加注解@Data就可以了,如下

@Data
public class Man{  

   @Column(unique = true, defaultValue = "unknown")
    private int age;  

    private String name;  
}

實(shí)體類支持注解約束:

@Column(unique = true)                //是否唯一
@Column(defaultValue = "unknown")    //指定字段默認(rèn)值
@Column(nullable = false)            //是否可以為空
@Column(ignore = true)                //是否可以忽略

修改litepal.xml

當(dāng)你添加表或修改表結(jié)構(gòu),都要修改litepal.xml,首先版本號(hào)要+1,如果添加表,還要添加

 <list>  
        <mapping class="com.example.alguojian.bean.Man"></mapping>  
 </list>  

添加數(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();

更新數(shù)據(jù)

1.指定id:

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(2);

2.條件更新:

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "小明");

3.多個(gè)條件用and連接

Album album= new Album();  
album.setTitle("第3次更新");  
album.updateAll("title = ? and age> ?", "第2次更新", "12");

4.更新全部數(shù)據(jù),將表所有數(shù)據(jù)名字修改:

Man values = new Man();  
values.put("Name", "小化工");  
DataSupport.updateAll(Man.class, values);

5.異步更新數(shù)據(jù)

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) {

    }
});

刪除數(shù)據(jù)

1.指定ID

DataSupport.delete(Man.class, id);

2.條件刪除,多個(gè)條件用and連接

DataSupport.deleteAll(Man.class, "age > ?" , "15");

3.刪除全表數(shù)據(jù)

DataSupport.deleteAll(Man.class);

查詢數(shù)據(jù)

1.查詢第一條以及最后一條

News firstNews = DataSupport.findFirst(News.class);

News lastNews = DataSupport.findLast(News.class);

2.指定id

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

//指定多個(gè)id如下
//方式一:
List<News> newsList = DataSupport.findAll(News.class, 1, 3, 5, 7);

//方式二:
long[] ids = new long[] { 1, 3, 5, 7 };  
List<News> newsList = DataSupport.findAll(News.class, ids);

3.查詢所有

List<Song> allSongs = DataSupport.findAll(Song.class);

4.條件查詢

查詢 Man表 中 年齡大于12 的 第5到20條 數(shù)據(jù),以插入時(shí)間倒序 排序方式呈現(xiàn),只取 “名字”和“性別”和“身高” 三列內(nèi)容。

List<Man> list = DataSupport.select("name", "sex","height")//需要的條目
                                 .where("age> ?", "12")//條件
                                 .order("inputTime desc")//倒序字段
                                 .offset(5)//開始查詢位置
                                 .limit(15)//數(shù)據(jù)長(zhǎng)度
                                 .find(Man.class);//查詢表

5.異步查詢,用于代替findAll

DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
    @Override
    public <T> void onFinish(List<T> t) {
        List<Song> allSongs = (List<Song>) t;
    }
});

刪除數(shù)據(jù)庫(kù)

LitePal.deleteDatabase("數(shù)據(jù)庫(kù)名");

完結(jié)

關(guān)于litepal更多用法可以查看源碼
github地址:https://github.com/LitePalFramework/LitePal

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容