配置:
導入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);
