LitePal數據庫框架的使用


    
配置:
  導入jar包
  在assets目錄下新建litepal.xml,指定數據庫名字和版本以及映射關系
<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="litepal_demo"></dbname>
    <version value="1"></version>
    <list>
        <mapping class="com.cbooy.litepal.domain.News"></mapping>
        <mapping class="com.cbooy.litepal.domain.Comment"></mapping>
        <mapping class="com.cbooy.litepal.domain.Category"></mapping>
        <mapping class="com.cbooy.litepal.domain.Introduction"></mapping>
    </list>
</litepal>
  在Application中配置,android:name="org.litepal.LitePalApplication"
 
 
初始化數據庫
  Connector.getWritableDatabase(); 調用此方法即可完成數據庫的創建
        
數據庫的修改和升級:
     直接修改實體映射關系和字段,然后將數據庫的version加1,就可以自動完成數據庫的更新操作
 
關聯關系:
     一對一,一對多,多對多,只要在實體中自然描述即可,映射關系會自動生成。
 
實體類的crud操作:
  保存:普通的實體類繼承自 DataSupport即可完成save()保存一個,saveAll()保存一個集合的數據
  修改數據:
        修改一條數據,直接使用靜態方法
    
DataSupport.update(Class<?> modelClass, ContentValues values, long id)
        修改多條,直接使用靜態方法
    
DataSupport.updateAll(modelClass, values, conditions)
        conditions數組,由於它的類型是一個String數組,我們可以在這里填入任意多個String參數,其中最前面一個String參數用於指定約束條件,后面所有的String參數用於填充約束條件中的占位符(即?號),
        比如約束條件中有一個占位符,那么后面就應該填寫一個參數,如果有兩個占位符,后面就應該填寫兩個參數,以此類推
        例: DataSupport.updateAll(News.class, values, "title = ? and commentcount > ?", "xxxxx", "0"); 
        由於實體類繼承了DataSupport,因此可以使用update方法直接修改
News updateNews = new News();  
updateNews.setTitle("new title");  
updateNews.update(2); 
        修改成默認值,比如說將評論數修改成0,只是調用updateNews.setCommentCount(0)這樣是不能修改成功的,因為即使不調用這行代碼,commentCount的值也默認是0。
            所以如果想要將某一列的數據修改成默認值的話,還需要借助setToDefault()方法。用法也很簡單,在setToDefault()方法中傳入要修改的字段名就可以了(類中的字段名)
News updateNews = new News();  
updateNews.setToDefault("commentCount");  
updateNews.updateAll();  
    刪除數據:
        DataSupport.delete(News.class, 2);    刪除一條數據
        DataSupport類中提供了一個isSaved()方法,這個方法返回true就表示該對象是經過持久化的,返回false則表示該對象未經過持久化。
 
    查詢:
        通用的幾個查詢方式,使用id
  
News news = DataSupport.find(News.class, 1);
News firstNews = DataSupport.findFirst(News.class);
News lastNews = DataSupport.findLast(News.class);
List<News> newsList = DataSupport.findAll(News.class, 1, 3, 5, 7);
List<News> newsList = DataSupport.findAll(News.class, new long[] { 1, 3, 5, 7 });
List<News> allNews = DataSupport.findAll(News.class);

 

其他查詢條件

List<News> news = DataSupport.where("id>?","0").find(News.class);
List<News> newsList = DataSupport.select("title", "content").where("commentcount > ?", "0").find(News.class);    // 指定某些列
List<News> newsList = DataSupport.select("title", "content").where("commentcount > ?", "0").order("publishdate desc").find(News.class);   //排序
List<News> newsList = DataSupport.select("title", "content").where("commentcount > ?", "0").order("publishdate desc").limit(10).find(News.class);   // limit
List<News> newsList = DataSupport.select("title", "content").where("commentcount > ?", "0").order("publishdate desc").limit(10).offset(10).find(News.class);  // 分頁

 

如何查詢關聯表中的數據,每一個類型的find()方法,都對應了一個帶有isEager參數的方法重載,設置成true就表示激進查詢,這樣就會把關聯表中的數據一起查詢出來了。 (不推薦)

最好的做法是在實體類中封裝關聯對象的查詢操作。
public class News extends DataSupport{  
    public List<Comment> getComments() {  
        return DataSupport.where("news_id = ?", String.valueOf(id)).find(Comment.class);  
    }    
}

 

原生SQL查詢支持:
Cursor cursor = DataSupport.findBySQL("select * from news where commentcount>?", "0"); 

 

聚合函數的支持,LitePal中一共提供了count()、sum()、average()、max()和min()這五種聚合函數

int result = DataSupport.count(News.class); 
int result = DataSupport.where("commentcount = ?", "0").count(News.class); 
int result = DataSupport.sum(News.class, "commentcount", int.class);  
double result = DataSupport.average(News.class, "commentcount");
int result = DataSupport.max(News.class, "commentcount", int.class);
int result = DataSupport.min(News.class, "commentcount", int.class);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM