久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6058|回復: 0
收起左側

商城開發筆記-12-購物車數據存儲開發中使用開源ORM框架操作數據庫

[復制鏈接]
ID:109770 發表于 2016-3-22 17:29 | 顯示全部樓層 |閱讀模式
一、前言


       好吧,在正式記錄今天的開發筆記之前,先說一些題外話吧。今天(201623日)本來是個不錯的天氣,但是由于昨天晚上亂吃東西,今天起來又嘔又吐,肚子疼,拉肚子。。。。(好恐怖有木有。┍绢惛鷦e人約好去打球的結果沒打成,心中真是一萬只草泥馬在崩騰啊~
       由于直接把Word文檔中的文章復制到QQ空間日志不能顯示圖片,因此我以后盡量減少使用圖片吧,大家也可以到我的網盤去下載源word文件。


二、商城應用中購物車數據的存儲
       商城APP中,我們需要把用戶的添加到購物車的商品信息保存起來,其中每一條數據包含商品的基本信息(ID,圖片,名字,介紹,價格等)以及用戶添加的該商品的數量。

       購物車數據存儲在哪里?對于這個問題,解答有兩個:

1、保存在云端(服務器)。如果我們的客戶端有Android版本,IOS版本,Web版本等多版本的時候,這種方式可以進行不同版本的數據同步。因此,多版本下,必須使用這種方式存儲購物車數據。

2、保存在客戶端的系統的本地。

由于我們的APP開發只有Android版本,因此使用本地的方式存儲購物車數據。

那么問題又來了,如果保存在本地,應該如何保存?
Android中常用的數據存儲方式有:
1、使用數據庫。
2、使用文件來存儲。
3、使用SharePreference保存。

       至于三種方式的區別這里不贅述,詳細請去百度Android中常用的數據存儲方式以及區別和使用。

       我們的視頻教程中使用SharePreference存儲購物車數據:通過把List中的Bean對象轉換為JSON字符串數據來存起來,取出來的時候通過Gson重新把JSON轉換為Bean對象。在內存中維護了兩個數組,一個是我們常用的ArrayList,一個是稀疏數組SparseArrayArrayList用于Adapter的展示,SparseArray主要用于存儲(與JSON對象之間的轉換)。由于我們每一條Bean都是通過ID來區分的,因此一開始使用Map<int id , Bean b>的方式來存儲,但是Android Studio只能地提示我們使用SparseArray,因為SparseArray對鍵是int類型的Map做過優化。
       但是,這種方式需要同時維護兩個數組,顯然比較麻煩。因此我個人考慮使用其他方法來存儲購物車數據--數據庫。但是眾所周知數據庫的操作以及配置比較麻煩,還得去學習數據庫的SQL語句。但是幸好我們有開源ORM框架。下一節將開始介紹。


三、Android中開源ORM框架LitePal介紹
   本次筆記介紹GitHub上面非常著名的一個數據庫操作依賴庫,LitePalLitePal是一款開源的Android數據庫操作映射框架,它采用了對象關系映射(ORM)的模式,并將我們平時開發時最常用到的一些數據庫功能進行了封裝,使得不用編寫一行SQL語句就可以完成各種建表、増刪改查的操作。并且LitePal,jar包只有100k不到,而且近乎零配置,這一點和Hibernate這類的框架有很大區別。目前LitePal的源碼已經托管到了GitHub上,地址是 https://github.com/LitePalFramework/LitePal

       實為了方便我們對數據庫表進行管理,其實Android本身就提供了一個幫助類:SQLiteOpenHelper。這個類集創建和升級數據庫于一身,并且自動管理了數據庫版本,算是一個非常好用的工具。SQLiteOpenHelper是一個抽象類,這意味著如果我們想要使用它的話,就需要創建一個自己的幫助類去繼承它。SQLiteOpenHelper中有兩個抽象方法,分別是onCreate()onUpgrade(),我們必須在自己的幫助類里面重寫這兩個方法,然后分別在這兩個方法中去實現創建、升級數據庫的邏輯。

       上文提到過,與傳統的數據庫使用不同,LitePal框架采取的是對象關系映射(ORM)的模式,那么什么是對象關系映射呢?簡單點說,我們使用的編程語言是面向對象語言,而我們使用的數據庫則是關系型數據庫,那么將面向對象的語言和面向關系的數據庫之間建立一種映射關系,這就是對象關系映射了。但是為什么要使用對象關系映射模式呢?這主要是因為大多數的程序員都很擅長面向對象編程,但其中只有少部分的人才比較精通關系型數據庫。而且數據庫的SQL語言晦澀難懂,就算程序員很精通它,恐怕也不喜歡經常在代碼中去寫。而對象關系映射模式則很好地解決了這個問題,它允許程序員使用面向對象的方式來操作數據庫,從而可以從晦澀難懂的SQL語言中解脫出來。
四、LitePal的基本使用以及注意點
       1,LitePal的引入以及數據庫的創建

      LitePal來操作數據庫,首先應該在Gradle的配置文件當中把LitePal框架引入到項目中,代碼如下:
compile 'org.litepal.android:core:1.3.0'
       Application中配置LitePal,在自己的Application中的onCreate方法中進行LitePal的初始化:
       由于操作數據庫時需要用到Context,而我們顯然不希望在每個接口中都去傳一遍這個參數,那樣操作數據庫就顯得太繁瑣了。因此,LitePal使用了一個方法來簡化掉Context這個參數,只需要繼承LitePalApplication,然后在AndroidManifest.xml中配置一下LitePalApplication,所有的數據庫操作就都不用再傳Context了。
public class MyApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        LitePalApplication.initialize(this);
    }
}
將Application配置為自己的Application:
<application
        android:name=".MyApplication">
        .......
</application>
      
2,使用LitePal創建基本表
   根據對象關系映射模式的理念,每一張表都應該對應一個模型(Model),也就是說,如果我們想要建一張X表,就應該有一個對應的X模型類。所以應該新建一個X類,并且繼承DataSupport類,寫上必須的字段。其中id這個字段可寫可不寫,因為即使不寫這個字段,LitePal也會在表中自動生成一個id列,但是最好寫上,畢竟每張表都一定要有主鍵的。最后需要在上述的XML代碼中配置一下。
       這里要特別說明一下,LitePal的映射規則是非常輕量級的,不像一些其它的數據庫框架,需要為每個模型類單獨配置一個映射關系的XML,LitePal的所有映射都是自動完成的。根據LitePal的數據類型支持,可以進行對象關系映射的數據類型一共有8種,int、short、long、float、double、boolean、String和Date。只要是聲明成這8種數據類型的字段都會被自動映射到數據庫表中,并不需要進行任何額外的配置。既然是自動映射的話,如果X類中有一個字符串字段并不想讓它映射到數據庫表中,這時候LitePal同樣采用了一種極為輕量的解決方案:只有聲明成private修飾符的字段才會被映射到數據庫表中,如果你有某一個字段不想映射的話,只需要將它改成public、protected或default修飾符就可以了。
    接著開始動手創建基本表,比如我的基本表需要存儲Bean對象的數據,那么創建Bean的java類把,最好把成員longid加上,注意這個對象必須繼承DataSupport。例子:
import org.litepal.crud.DataSupport;
/**
* litepalbean對象
*/
public class Bean extends DataSupport {
    private long id;
    private String name;
    public Bean() {
    }
    public Bean(String name, long id) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
}
       接著在項目的assets目錄(AndroidStudio中,assets目錄創建方法:把當前空間從“Android”轉到“Project”,打開工程下面的“APP”目錄,選中“main”右擊新建文件夾“assets”),下面新建一個litepal.xml文件,并將以下的XML配置代碼代碼拷貝進去。其中ShoppingCart標簽是數據庫名,version是數據庫版本。list標簽底下的mapping標簽是表,也就是我們創建好的用于存儲Bean對象數據的表。
<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="ShoppingCart"/>
    <version value="1"/>
    <list>
        <mapping class="com.nan.recycleviewdemo.bean.Bean"/>
    </list>
</litepal>
3,使用LitePal對基本表進行基本操作(增刪改查)
       插入:下面的代碼是在筆記表中插入一條數據。LitePal操作數據是通過使用面型對象編程的,因此通過創建對象并且設置各個鍵的值就可以非常方便地插入一條新數據最后只需要調用save()方法保存到本地數據庫就可以了。
Bean b = new Bean("new data ", id);
//添加數據需要調用保存方法
b.save();
   刪除:先得到我們的bean對象,然后調用DataSupport的方法進行刪除。
//先得到我們的bean對象,然后調用DataSupport的方法進行刪除
Bean bean = mDatas.get(position);
DataSupport.delete(Bean.class, bean.getId());
   修改:以筆記表為例,需要先判斷數據是否已經保存過,如果是,就可以修改數據了,具體操作就是調用set()方法。最后保存一下就可以了。
if(bean.isSaved()) {
    bean.setName(.....);
    bean.save();
}
   
   查詢:通過DataSupportfind方法,通過ID查找我們的bean對象。
Bean b = DataSupport.find(Bean.class, id));


四、DataSupport的的重要方法以及使用注意點
       由上面的介紹知道,LitePal的很多數據庫操作都是通過DataSupport來進行的,因此我們有必要去了解DataSupport這個類的一些常用而且重要方法(參數省略)。

//查找某一個bean對象
DataSupport.find();
//找出所有bean對象,返回List<Bean>
DataSupport.findAll();
//刪除一個bean對象
DataSupport.delete();
//刪除所有bean對象
DataSupport.deleteAll();
//求某一列的平均值
DataSupport.average();
//求所有數據的數量
DataSupport.count();
//排序
DataSupport.order();
//求某一列的的最小值的對象
DataSupport.min();
//求某一列的的最大值的對象
DataSupport.max();
//保存所有bean對象
DataSupport.saveAll();

       其中,最值得注意的是findAll()方法,他返回的是List<Bean對象>,因此需要我們去強制轉換為ArrayList,不然在add等操作的時候會報錯,因為我們使用的都是List的子類而不是List對象本身。強轉可能Android Studio會提示沒有類型檢查的警告,但是我們可以忽略。

       好了今天的筆記到這里了,再賤ヾ( ̄▽ ̄)Bye~Bye~。


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区国语对白 | 黄色永久免费 | 精品国产乱码久久久久久闺蜜 | 国产精品一区二区三 | 在线成人免费视频 | 中文字幕第三页 | 欧美精品久久久久久 | 日韩欧美三级 | 国产精品美女久久久 | 99这里只有精品视频 | 午夜视频在线播放 | 精精国产xxxx视频在线 | 久久看片 | 欧美激情精品久久久久久变态 | 国产激情网 | 日韩在线视频一区 | 国产一区二区三区在线 | 日本超碰| 女同av亚洲女人天堂 | 国产精品美女久久久久久久久久久 | 精品免费视频一区二区 | 欧美一区二区三区四区在线 | 亚洲小视频在线观看 | 中文字幕av一区二区三区 | 久久午夜剧场 | 亚洲36d大奶网 | 天天色图 | 蜜桃在线一区二区三区 | 免费人成激情视频在线观看冫 | 亚洲精品视频在线看 | 久久精品91久久久久久再现 | 亚洲综合色视频在线观看 | 亚洲视频一区二区 | 国产午夜精品一区二区三区四区 | 欧美一区二区三区在线播放 | 午夜影院 | 在线看免费| 国产成人精品一区二区三区四区 | 福利视频网 | 一区二区日韩精品 | 在线一区观看 |