Bladea

AndroidÃô½Ý¿ª·¢¿ò¼Ü

License

License

Categories

Categories

Blade User Interface Web Frameworks
GroupId

GroupId

com.janyee.bladea
ArtifactId

ArtifactId

bladea
Last Version

Last Version

1.2.4
Release Date

Release Date

Type

Type

aar
Description

Description

Bladea
AndroidÃô½Ý¿ª·¢¿ò¼Ü
Project URL

Project URL

https://github.com/kmlixh/Bladea
Source Code Management

Source Code Management

https://github.com/kmlixh/Bladea

Download bladea

How to add to project

<!-- https://jarcasting.com/artifacts/com.janyee.bladea/bladea/ -->
<dependency>
    <groupId>com.janyee.bladea</groupId>
    <artifactId>bladea</artifactId>
    <version>1.2.4</version>
    <type>aar</type>
</dependency>
// https://jarcasting.com/artifacts/com.janyee.bladea/bladea/
implementation 'com.janyee.bladea:bladea:1.2.4'
// https://jarcasting.com/artifacts/com.janyee.bladea/bladea/
implementation ("com.janyee.bladea:bladea:1.2.4")
'com.janyee.bladea:bladea:aar:1.2.4'
<dependency org="com.janyee.bladea" name="bladea" rev="1.2.4">
  <artifact name="bladea" type="aar" />
</dependency>
@Grapes(
@Grab(group='com.janyee.bladea', module='bladea', version='1.2.4')
)
libraryDependencies += "com.janyee.bladea" % "bladea" % "1.2.4"
[com.janyee.bladea/bladea "1.2.4"]

Dependencies

compile (2)

Group / Artifact Type Version
com.android.support » appcompat-v7 jar 25.0.0
com.alibaba : fastjson jar 1.2.10

Project Modules

There are no modules declared in this project.

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

使用方法,Maven:

<dependency>
  <groupId>com.janyee.bladea</groupId>
  <artifactId>bladeaLib</artifactId>
  <version>1.2.0</version>
  <type>pom</type>
</dependency>

Gradle:

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

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

Dao dao=Dao.getInstance(context);
List<UserInfo> 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就讲这么多,其他功能尚且弱小,现在不足为表。

Versions

Version
1.2.4
1.2.3
1.2.2
1.2.1
1.1.8