使用android快速开发框架afinal的FinalDb操作android数据库
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
? ? ? ? ?今天給大家介紹下#afinal#來操作android的數(shù)據(jù)庫sqlite。
? ? ? ? ? ?#afinal#是一個android的orm、ioc快速開發(fā)框架,里面包含了四大功能:空間的id綁定和事件綁定功能;網(wǎng)絡(luò)圖片的顯示功能(里面包含了強大的緩存框架);數(shù)據(jù)庫sqlite的操作功能;http數(shù)據(jù)的讀取功能(支持ajax方式讀取);
? ? ? ? ? ?#afinal#開源網(wǎng)址:https://github.com/yangfuhai/afinal
? ? ? ? ? ? 這篇文章主要是介紹afinal的功能之一FinalDb組件,其他組件請關(guān)注我的博客吧,以后將會一一介紹:
? ? ? ? ? # afinal#的FinalDb組件是android的一個輕量級的orm框架,使用簡單,一行代碼就可以完成數(shù)據(jù)庫的各種操作功能。
?首先我們來創(chuàng)建一個測試實體類 User.java
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最終會調(diào)用setter去給實體類的屬性賦值。
現(xiàn)在實體類創(chuàng)建完畢了,我們來寫我們的第一個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功能,以后將會講到@Overridepublic 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", "用戶數(shù)量:"+ (userList!=null?userList.size():0));textView.setText(userList.get(0).getName()+":"+user.getRegisterDate());} } 很簡單吧,就一個FinalDb db = FinalDb.create(this),然后db.save(user);就可以把我們定義的實體類保存到數(shù)據(jù)庫去啦。我們來看輸出日志:什么?就這樣就保存到sqlite數(shù)據(jù)庫里面去了?可是我們還沒有創(chuàng)建數(shù)據(jù)庫,也沒有創(chuàng)建表呀?怎么可能?
這里,我要跟大家說的是afinal自己去創(chuàng)建啦,簡單吧。
我們來看下adt的File Exploer 查看database目錄,下面確實有一個afinal.db文件,如下圖:
我們把afinal.db導(dǎo)出來后,通過sqlite數(shù)據(jù)庫打開afinal.db,如下圖:
同時afinal自動給我們創(chuàng)建來表:com_devchina_ormdemo_User,由此看出afinal會以類名為表名自動創(chuàng)建表:我們再過來看下表的數(shù)據(jù):
到這里,相信大家能明白了,原理afinal自動給我們創(chuàng)建了數(shù)據(jù)庫afinal.db同時給我們創(chuàng)建了表com_devchina_ormdemo_User,保存的時候,afinal自動把數(shù)據(jù)保存到sqlite表里面去了。
這時候,估計大家的疑問又起來了
afinal自動創(chuàng)建了數(shù)據(jù)庫afinal.db,同時自動創(chuàng)建了表com_devchina_ormdemo_User。可是,我們不想創(chuàng)建數(shù)據(jù)庫afinal.db,也不想讓我們的表示com_devchina_ormdemo_User,那我們應(yīng)該怎么辦呢?
這一些呀,afinal都已經(jīng)想好了。
接下來,我們來介紹下afinal的orm注解功能。
第一個,配置數(shù)據(jù)庫中的表名 ?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,開發(fā)中不能省略 } 這里和上邊唯一不同的是 多了一個注解?@Table(name="user_test"),只要我們配置了這個以后,我們再來看下afinal創(chuàng)建的數(shù)據(jù)庫和表:
由此,我們可以看出來,afinal又自動給我們創(chuàng)建了表user_test,但是要注意的是com_devchina_ormdemo_User這個表afinal并沒有去刪除,所以這里也要提醒下大家,我們在重新設(shè)計了類的結(jié)構(gòu)或者屬性的時候,先手動刪除掉直接的數(shù)據(jù),否則就會有垃圾數(shù)據(jù)保存在數(shù)據(jù)庫里面,當然,不刪除也可以,不會有任何的影響。
在上面的講述中,細心的朋友可能會注意到了一個問題,afinal自動把user的id的這個屬性當做了主鍵。而且自動增長。
可是,可是在我們的開發(fā)過程中,我們的user可能沒有id這個屬性啊,可能是userId,或者又可能是其他我們喜歡的屬性,那怎么辦呢?
沒有關(guān)系:afinal有給我們準備了另一個注解:net.tsz.afinal.annotation.sqlite.Id,通過這個,我們就可以給我們的實體類定義主鍵啦
afinal的主鍵機制是:
當給某個屬性添加注解@id的時候,該屬性就是主鍵(一個類中只有一個主鍵),保存在數(shù)據(jù)庫中的列名為屬性的名稱,@Id(column="userId")給屬性添加注解的時候,保存在數(shù)據(jù)庫的列名是userId,當這個屬性沒有的時候,afinal自動回去該類查找_id屬性,_id屬性也沒有的時候,afinal就會自動去查找id屬性。如果連id屬性也沒有,那么afinal就報錯啦,afinal的orm規(guī)則中,表示必須有主鍵的,而且只能有一個(目前暫時不支持復(fù)合主鍵)。
回到剛才的問題,afinal給我們自動創(chuàng)建數(shù)據(jù)庫afinal.db,可是,我們不想創(chuàng)建讓數(shù)據(jù)庫名是afinal.db,那怎么辦呢?
afinal的創(chuàng)建時候有多個方法的重載。
在create的方法中,
isDebug表示是否是debug模式,debug模式中,使用afinal操作數(shù)據(jù)庫的時候就會答應(yīng)SQL語句的log,
dbName就是數(shù)據(jù)庫的名稱啦。
所以這里,我們傳入我們自己想要的數(shù)據(jù)庫名稱就行了。
其實afinal的FinalDb模塊中,還有很多其他的功能,比如一對多,多對一的配置和注解等等。等待大家挖掘了。
afinal的orm注解中有:
Id------->注解注解
Property------>屬性注解
Table------->數(shù)據(jù)表注解
ManyToOne-------->多對一注解
OneToMany--------->一對多注解
Transient------->忽略屬性注解(如果該屬性添加這個注解,afinal的orm功能將忽略該屬性)
源代下載地址:
http://download.csdn.net/detail/michael_yy/4740088 ?
里面沒有jar包,自己去afinal的廣發(fā)網(wǎng)站下載最新jar包
轉(zhuǎn)載于:https://my.oschina.net/yangfuhai/blog/87459
總結(jié)
以上是生活随笔為你收集整理的使用android快速开发框架afinal的FinalDb操作android数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载] 晓说——第8期:镖局——最后的
- 下一篇: linux cmake编译源码,linu