以android快速支付框架afinal的FinalDb操作android数据库

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

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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);就好管我们定义的实体类保存及数据库去呀。我们来拘禁输出日志:图片 1

嗬?就这样就是保存到sqlite数据库里去了?可是咱们尚没有创造数据库,也从没开创表呀?怎么可能?

这边,我而和大家说的凡afinal自己去创造啦,简单吧。

咱们来拘禁下adt的File Exploer
查看database目录,下面确实发生一个afinal.db文件,如下图:

图片 2 我们管afinal.db导出来后,通过sqlite数据库打开afinal.db,如下图:

图片 3

并且afinal自动给咱们创建来阐明:com_devchina_ormdemo_User,由此看出afinal会以类名为表名自动创建表:我们还恢复看下表的多少:

图片 4

交此,相信大家能够领悟了,原理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配置一下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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创建的数据库及说明:

图片 5

透过,我们好拘留出来,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的创造时候发出多独道的重载。

图片 6

当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包

 

网站地图xml地图