敏捷开发 android,Bladea

Bladea是一个Android敏捷开发框架:

使用方法,Maven:

com.janyee.bladea

bladeaLib

1.2.0

pom

Gradle:

compile 'com.janyee.bladea:bladeaLib:1.2.0'

核心功能为数据库操作,灵感来自于nutz,举个简单的栗子:

Dao dao=Dao.getInstance(context);

List userList= dao.query(UserInfo.class);

大概的,UserInfo.java会长这个样子:

/**

* Created by kmlixh on 2016/4/19.

*/

@Table("user_info")

public class UserInfo {

@ID("user_id")

String userId;

@Column("user_name")

String userName;

@Column

String pass_word;

@Column

int age;

@Column

float money;

@Column

Calendar birthday;

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPass_word() {

return pass_word;

}

public void setPass_word(String pass_word) {

this.pass_word = pass_word;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public float getMoney() {

return money;

}

public void setMoney(float money) {

this.money = money;

}

public Calendar getBirthday() {

return birthday;

}

public void setBirthday(Calendar birthday) {

this.birthday = birthday;

}

}

这样你就可以通过各种方法来操作你的Pojo!大概可以做的操作有以下几种:

dao.query:数据查询类;

dao.fetch;数据查询,单个。其实是对query查询做了limit 0,1

dao.save;数据存储(忘记update那货吧,效果是一样的);

dao.insert:数据插入;真心不推荐这么玩。

dao.delete;输出删除;

dao.create;手动创建表;话说,创建表,维护表结构这些事情,亲都不用操心。Dao会自行处理。

Dao实现的基本原理是,使用注解+反射的方式来检查Pojo的结构,完成数据库到Pojo的映射。其中用到了一些简单的注解来实现表结构的优化,如下:

@Table,通过此注解指定表名,附加的,你可以指定一个自定义的DataOpenHelperFactory,此工厂类的作用是生成一个SQLiteOpenHelper,你可以自定义SQLiteOpenHelper来实现打开SD卡中的数据文件,甚至您可以导入一个远程的数据库文件。

@ID,此注解用来标记表中的主索引,主键。目前只允许一张表有一个主键(虽然官方允许多个主键,但是作者近期不打算实现多主键,所以,如果你用了多主键,那就会抛出异常)

@Column,顾名思义。@ID,@Column默认会取当前字段名作为数据库字段名称,当然,也同样允许自定义映射,可以写成@ID("user_id"),@Column("user_name")

最主要用到的字段就是以上三个,其他的比较有用的注解还有:

@DataParseBy,指定一个继承自IDataParser.java的类,可以自定义实现数据的读取和写入过程中的转换操作。

@Forget,这个很关键,当两个Pojo指间存在继承关系的时候,如果子类需要覆盖或者需要去除父类中的某些字段,则可以使用此标记注解到类名上。(没详细测试过,慎用,有bug就请告诉我!)

@NotNull,此注解用来标记某个字段不能为空,这会影响到两个事情,第一是做save,update之类的操作的时候,会检查此字段是否为空;第二就是,在数据库建表的时候,会同样带上“NOT NULL”的标记。

@Unique,主要影响建表时的sql语句,会增加“UNIQUE”标记。

@OnConflict,顾名思义,影响同上。

@Link,这个重点说明一下。

@Link是用来解决关联查询的问题的,诸如有一个视频,视频属于某个分类,分类Sort.java可以这么写:

@Table("video_sort")

public class Sort {

@ID(type = SqlDataType.NVARCHAR,length = 32)

String sort_id;

@Column

String sort_name;

@Link(target = Video.class,localField = "sort_id",targetField = "sort_id")

Video[] videoList;

public String getSort_id() {

return sort_id;

}

public void setSort_id(String sort_id) {

this.sort_id = sort_id;

}

public String getSort_name() {

return sort_name;

}

public void setSort_name(String sort_name) {

this.sort_name = sort_name;

}

public Video[] getVideoList() {

return videoList;

}

public void setVideoList(Video[] videoList) {

this.videoList = videoList;

}

}

其中有一句: @Link(target = Video.class,localField = "sort_id",targetField = "sort_id")

这里可以详细说明一下,target指定目标类,localField指定当前类对应的字段名称,注意,名称为数据库中列的名称,targetField指定对应类中相同取值的字段。

所以查询的时候的条件语句会指定为targetField等于某个值。之所以这么设定则是为了保证灵活性,被@Link注解的属性,可以是一个实体对象(必须保证和target指定的类一致),

也可以是一个List或者一个数组,Dao会自动判断并处理的。

关于Dao就讲这么多,其他功能尚且弱小,现在不足为表。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值