Afinal详解之数据库篇FianlDb
2016-04-12 09:13
447 查看
首先创建Bean
package com.devchina.ormdemo;
import java.util.Date;
public class User {
}
在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 {
}
在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 {
}
![](http://static.oschina.net/uploads/space/2012/1106/225317_JNS5_111634.png)
由此,我们可以看出来,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的创建时候有多个方法的重载。
![](http://static.oschina.net/uploads/space/2012/1106/225352_EezZ_111634.png)
补充:
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
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,开发中不能省略
}
![](http://static.oschina.net/uploads/space/2012/1106/225317_JNS5_111634.png)
由此,我们可以看出来,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的创建时候有多个方法的重载。
![](http://static.oschina.net/uploads/space/2012/1106/225352_EezZ_111634.png)
补充:
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
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马