使用android快速開發框架afinal的FinalDb操做android數據庫


         今天給你們介紹下#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.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配置一下:

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包

相關文章
相關標籤/搜索