今天給你們介紹下#afinal#來操做android的數據庫sqlite。 java
#afinal#是一個android的orm、ioc快速開發框架,裏面包含了四大功能:空間的id綁定和事件綁定功能;網絡圖片的顯示功能(裏面包含了強大的緩存框架);數據庫sqlite的操做功能;http數據的讀取功能(支持ajax方式讀取); android
#afinal#開源網址:https://github.com/yangfuhai/afinal git
這篇文章主要是介紹afinal的功能之一FinalDb組件,其餘組件請關注個人博客吧,之後將會一一介紹: github
# afinal#的FinalDb組件是android的一個輕量級的orm框架,使用簡單,一行代碼就能夠完成數據庫的各類操做功能。 ajax
首先咱們來建立一個測試實體類 User.java sql
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 緩存
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("afinal@tsz.net"); 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自動給咱們建立來表: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配置一下:
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://download.csdn.net/detail/michael_yy/4740088
裏面沒有jar包,本身去afinal的廣發網站下載最新jar包