使用android快速開發架構afinal的FinalDb操作android資料庫

來源:互聯網
上載者:User

標籤:

原文地址:http://my.oschina.net/yangfuhai/blog/87459 

 今天給大家介紹下#afinal#來操作android的資料庫sqlite。

           #afinal#是一個android的orm、ioc快速開發架構,裡麵包含了四大功能:空間的id綁定和事件綁定功能;網狀圖片的顯示功能(裡麵包含了強大的緩衝架構);資料庫sqlite的操作功能;http資料的讀取功能(支援ajax方式讀取);

           #afinal#開源網址:https://github.com/yangfuhai/afinal

            這篇文章主要是介紹afinal的功能之一FinalDb組件,其他組件請關注我的部落格吧,以後將會一一介紹:

          # afinal#的FinalDb組件是android的一個輕量級的orm架構,使用簡單,一行代碼就可以完成資料庫的各種操作功能。

 

 首先我們來建立一個測試實體類 User.java

?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 package com.devchina.ormdemo; import java.util.Date; public class User {         private int id;    private String name;    private String email;    private Date registerDate;    private Double money;         /////////////getter and setter 不能省略哦///////////////    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public Date getRegisterDate() {        return registerDate;    }    public void setRegisterDate(Date registerDate) {        this.registerDate = registerDate;    }    public Double getMoney() {        return money;    }    public void setMoney(Double money) {        this.money = money;    }               }

這個實體類要注意一點就是getter和setter是不能省略的哦,,,,因為afinal的finalDb最終會調用setter去給實體類的屬性賦值。

 

 

現在實體類建立完畢了,我們來寫我們的第一個demo:

AfinalOrmDemoActivity.java

?
1234567891011121314151617181920212223242526272829303132333435363738 package com.devchina.ormdemo; import java.util.Date;import java.util.List; import net.tsz.afinal.FinalActivity;import net.tsz.afinal.FinalDb;import net.tsz.afinal.annotation.view.ViewInject;import android.os.Bundle;import android.util.Log;import android.widget.TextView; public class AfinalOrmDemoActivity extends FinalActivity {              @ViewInject(id=R.id.textView) TextView textView; //這裡使用了afinal的ioc功能,以後將會講到         @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                 FinalDb db = FinalDb.create(this);                 User user = new User();        user.setEmail("[email protected]");        user.setName("探索者");        user.setRegisterDate(new Date());                 db.save(user);                 List<User> userList = db.findAll(User.class);//查詢所有的使用者                 Log.e("AfinalOrmDemoActivity", "使用者數量:"+ (userList!=null?userList.size():0));                 textView.setText(userList.get(0).getName()+":"+user.getRegisterDate());    }}

很簡單吧,就一個FinalDb db = FinalDb.create(this),然後db.save(user);就可以把我們定義的實體類儲存到資料庫去啦。我們來看輸出日誌:

什嗎?就這樣就儲存到sqlite資料庫裡面去了?可是我們還沒有建立資料庫,也沒有建立表呀?怎麼可能?

這裡,我要跟大家說的是afinal自己去建立啦,簡單吧。

我們來看下adt的File Exploer 查看database目錄,下面確實有一個afinal.db檔案,如:

 我們把afinal.db匯出來後,通過sqlite資料庫開啟afinal.db,如:

同時afinal自動給我們建立來表:com_devchina_ormdemo_User,由此看出afinal會以類名為表名自動建立表:我們再過來看下錶的資料:

到這裡,相信大家能明白了,原理afinal自動給我們建立了資料庫afinal.db同時給我們建立了表com_devchina_ormdemo_User,儲存的時候,afinal自動把資料儲存到sqlite表裡面去了。

 

這時候,估計大家的疑問又起來了

afinal自動建立了資料庫afinal.db,同時自動建立了表com_devchina_ormdemo_User。可是,我們不想建立資料庫afinal.db,也不想讓我們的表示com_devchina_ormdemo_User,那我們應該怎麼辦呢?

這一些呀,afinal都已經想好了。

接下來,我們來介紹下afinal的orm註解功能。

第一個,設定資料庫中的表名  net.tsz.afinal.annotation.sqlite.Table,我們來給user,java配置一下:

?
123456789101112131415161718 package com.devchina.ormdemo; import java.util.Date; import net.tsz.afinal.annotation.sqlite.Table; @Table(name="user_test")public class User {         private int id;    private String name;    private String email;    private Date registerDate;    private Double money;         /////////////getter and setter///////////////    //代碼太長,略getter setter,開發中不能省略}

這裡和上邊唯一不同的是 多了一個註解 @Table(name="user_test"),只要我們配置了這個以後,我們再來看下afinal建立的資料庫和表:

由此,我們可以看出來,afinal又自動給我們建立了表user_test,但是要注意的是com_devchina_ormdemo_User這個表afinal並沒有去刪除,所以這裡也要提醒下大家,我們在重新設計了類的結構或者屬性的時候,先手動刪除掉直接的資料,否則就會有垃圾資料儲存在資料庫裡面,當然,不刪除也可以,不會有任何的影響。

 

在上面的講述中,細心的朋友可能會注意到了一個問題,afinal自動把user的id的這個屬性當做了主鍵。而且自動成長。

可是,可是在我們的開發過程中,我們的user可能沒有id這個屬性啊,可能是userId,或者又可能是其他我們喜歡的屬性,那怎麼辦呢?

沒有關係:afinal有給我們準備了另一個註解:net.tsz.afinal.annotation.sqlite.Id,通過這個,我們就可以給我們的實體類定義主鍵啦

afinal的主鍵機制是:

當給某個屬性添加註解@id的時候,該屬性就是主鍵(一個類中只有一個主鍵),儲存在資料庫中的列名為屬性的名稱,@Id(column="userId")給屬性添加註解的時候,儲存在資料庫的列名是userId,當這個屬性沒有的時候,afinal自動回去該類尋找_id屬性,_id屬性也沒有的時候,afinal就會自動去尋找id屬性。如果連id屬性也沒有,那麼afinal就報錯啦,afinal的orm規則中,表示必須有主鍵的,而且只能有一個(目前暫時不支援複合主鍵)。

 

回到剛才的問題,afinal給我們自動建立資料庫afinal.db,可是,我們不想建立讓資料庫名是afinal.db,那怎麼辦呢?

afinal的建立時候有多個方法的重載。

在create的方法中,

isDebug表示是否是debug模式,debug模式中,使用afinal操作資料庫的時候就會答應SQL語句的log,

dbName就是資料庫的名稱啦。

所以這裡,我們傳入我們自己想要的資料庫名稱就行了。

其實afinal的FinalDb模組中,還有很多其他的功能,比如一對多,多對一的配置和註解等等。等待大家挖掘了。

 

afinal的orm註解中有:

Id------->註解註解

Property------>屬性註解

Table------->資料表註解

ManyToOne-------->多對一註解

OneToMany--------->一對多註解

Transient------->忽略屬性註解(如果該屬性添加這個註解,afinal的orm功能將忽略該屬性)

 

源代:

http://pan.baidu.com/s/1i3vWSkP  

裡面沒有jar包,自己去afinal的廣髮網站下載最新jar包

使用android快速開發架構afinal的FinalDb操作android資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.