您的位置:首页 > 数据库

Afinal详解之数据库篇FianlDb

2016-04-12 09:13 447 查看
首先创建Bean

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;
}


}

在Bean创建完成之后,开始使用afinal.

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中其封装的操作为创建数据库,创建表,然后自动查询返回结果。一切都是使用少量简单代码来实现的。

这时候,估计大家的疑问又起来了

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”)//设置这个表单的Table name

public class User {

private int id;
private String name;
private String email;
private Date registerDate;
private Double money;

/////////////getter and setter///////////////
//代码太长,略getter setter,开发中不能省略


}



由此,我们可以看出来,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的创建时候有多个方法的重载。


补充:

1.FinalDb是一个单例对象,即不管使用哪个create对象都会得到单一的FinalDb对象,不会重复创建。

2. 查看save方法源码,可以得知,在进行数据插入之前会进行表的存在性判断,如果不存在则会先创建表后,再行插入数据。

原码为

public void save(Object entity)

{

checkTableExist(Object entity.getClass());

exeSqlInfo(SqlBuilder.builInsertSql(entity));

}

3.默认创建的表名为:packageName_db_BeanName

4.拿到afinal对象FinalDb db = FinalDb.create(MainDBActivity.this, “user.db”);

5.进行删除

// db.delete(user); //根据对象主键进行删除

// db.deleteById(user, 1); //根据主键删除数据

// db.deleteByWhere(User.class, “name=AoTuMan”); //自定义where条件删除

db.deleteAll(User.class); //删除Bean对应的数据表中的所有数据

6.数据查询

String searchKey = searchKeyET.getText().toString();

//拿到FinalDb对象引用

FinalDb db = FinalDb.create(MainDBActivity.this, “user.db”);

// 注意这里的”where”语句参数是没有where关键字的

List resultList = db.findAllByWhere(User.class, ” name=\”” + searchKey + “\”“);

// List resultList = db.findAll(User.class); //查找指定Bean的所有数据记录

StringBuilder _sb = new StringBuilder();

for(int i=0;i
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 bean