android快速開發框架afinal(數據庫篇)

今天給你們介紹下#afinal#來操做android的數據庫sqlite。java

#afinal#是一個android的orm、ioc快速開發框架,裏面包含了四大功能:空間的id綁定和事件綁定功能;網絡圖片的顯示功能(裏面包 含了強大的緩存框架);數據庫sqlite的操做功能;http數據的讀取功能(支持ajax方式讀取);android

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

這篇文章主要是介紹afinal的功能之一FinalDb組件,其餘組件請關注個人博客吧,之後將會一一介紹:github

# afinal#的FinalDb組件是android的一個輕量級的orm框架,使用簡單,一行代碼就能夠完成數據庫的各類操做功能。web

 

首先咱們來建立一個測試實體類 User.javaajax

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:sql

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.db導出來後,經過sqlite數據庫打開afinal.db,以下圖:

 

到這裏,相信你們能明白了,原理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又自動給咱們建立了表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://my.oschina.net/yangfuhai/blog/87459

相關文章
相關標籤/搜索