【美高梅网上注册平台】1、一个精简的库,因为
分类:美高梅网上注册平台

0 . Thanks To

玩转Android之数据库框架greenDAO3.0使用指南GreenDao3.0简单使用官网

GreenDao:

greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。

官网地址:http://greenrobot.org/greendao/

greenDAO 优势

1、一个精简的库

2、性能最大化

3、内存开销最小化

4、易于使用的 APIs

5、对 Android 进行高度优化

关于GreenDao

greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。关于greenDAO的概念可以看官网greenDAO

1 . 为什么用greenDAO

在数据库这一块,移动端现在已经有很多很优秀的数据库框架,数据库第三方。鉴于原生的数据库晦涩难用,所以涌现了一堆这样的数据库框架。其很多,都是基于ORM去设计的,如:OrmLite,Realm,等等,当然还有greenDAO。

美高梅4858app 11.png

ORM,Object Relational Mapping,把对象Mapping到DB中,使得上层调用者不需要关心底层的数据跟对象的转换,大大提高了开发的效率。但是,因为ORM是在原生的DB上再封装的框架,所以性能上会比原生要低。

但对于greenDAO,其某些操作的性能却比原生要好。

美高梅4858app 22.png

GreenDao 使用

1 配置gradle相关:

compile 'org.greenrobot:greendao:3.2.0'

2在build.gradle中进行配置:

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

3,自定义路径

greendao{
    schemaVersion 1
    daoPackage 'com.greendao.song.greendao'
    targetGenDir 'src/main/java'
}

schemaVersion--> 指定数据库schema版本号,迁移等操作会用到;
daoPackage --> dao的包名,包名默认是entity所在的包;
targetGenDir --> 生成数据库文件的目录;

greenDAO 优势

1、一个精简的库
2、性能最大化
3、内存开销最小化
4、易于使用的 APIs
5、对 Android 进行高度优化

GreenDao 3.0使用

GreenDao 3.0采用注解的方式来定义实体类,通过gradle插件生成相应的代码。

2 . 导入

  • app gradle:引入SDK包
compile 'org.greenrobot:greendao:3.2.0'compile 'org.greenrobot:greendao-generator:3.2.0'
  • 项目 build.gradle,引入plus
apply plugin: 'org.greenrobot.greendao'buildscript { repositories { jcenter() }}dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin }}
  • app gradle:加上greendao的配置
//配置greenDao的相关信息greendao { schemaVersion 4 daoPackage '<包名>.db' targetGenDir 'src/main/java'}

在gradle的根模块中加入上述代码,就完成了我们的基本配置了。属性介绍:schemaVersion--> 指定数据库schema版本号,迁移等操作会用到;daoPackage --> dao的包名,包名默认是entity所在的包;targetGenDir --> 生成数据库文件的目录;

主要代码

美高梅网上注册平台,一,在as中导入相关的包

<code>

compile'org.greenrobot:greendao:3.0.1'
compile'org.greenrobot:greendao-generator:3.0.0'

</code>

3 . 示例

@Entitypublic class TrackBean { @Id public Long trackId; public String trackTitle; public String amrUrl; public String m4aUrl; public String coverUrl; public long albumId;}

@Entity:标明这是greendao的实体类@Id:标明是主键。

创建一个Bean文件

实体注解:

@Entity(
        // 如果你有超过一个的数据库结构,可以通过这个字段来区分
        // 该实体属于哪个结构
        schema = "myschema",

        //  实体是否激活的标志,激活的实体有更新,删除和刷新的方法
        active = true,

        // 确定数据库中表的名称
        // 表名称默认是实体类的名称
        nameInDb = "AWESOME_USERS",

        // Define indexes spanning multiple columns here.
        indexes = {
                @Index(value = "name DESC", unique = true)
        },

        // DAO是否应该创建数据库表的标志(默认为true)
        // 如果你有多对一的表,将这个字段设置为false
        // 或者你已经在GreenDAO之外创建了表,也将其置为false
        createInDb = false
)
public class User {
    ...
}

基础注解:

@Entity
public classUser {
    @Id(autoincrement = true)
    private Long id;

    @Property(nameInDb = "USERNAME")
    private String name;

    @NotNull
    private int repos;

    @Transient
    private int tempUsageCount;

    ...
}

美高梅4858app,1.实体@Entity注解

schema:告知GreenDao当前实体属于哪个schema
active:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法
nameInDb:在数据中使用的别名,默认使用的是实体的类名
indexes:定义索引,可以跨越多个列
createInDb:标记创建数据库表

2.基础属性注解

@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")
@NotNul:设置数据库表当前列不能为空
@Transient :添加次标记之后不会生成数据库表的列

3.索引注解

@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库列添加了一个唯一的约束

4.关系注解

@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系

编译项目,User实体类会自动编译,生成get、set方法并且会在com.greendao.gen目录下生成三个文件,DaoMaster 、DaoSession、Dao类;

二,在build.gradle(Project)中进行配置:

美高梅4858app 3

project.png

<code>

apply plugin: 'org.greenrobot.greendao'
buildscript { 
    repositories { 
        mavenCentral()    
}    
dependencies {
    classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'    
    }
}  

</code>

2)编译

在声明的目录下,会生成一些代码。这是由引入的plus编译生产。

美高梅4858app 43.png

然后,一般我们是再写一个DbManger类去管理增删查改。

编写帮助类

public class GreenDaoHelper {
    private static DaoMaster.DevOpenHelper mHelper;
    private static SQLiteDatabase db;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    /**
     * 初始化greenDao,这个操作建议在Application初始化的时候添加;
     */
    public static void initDatabase() {
        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
        mHelper = new DaoMaster.DevOpenHelper(MyApplication.context, "cache-db", null);
        db = mHelper.getWritableDatabase();
        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }
    public static DaoSession getDaoSession() {
        return mDaoSession;
    }
    public static SQLiteDatabase getDb() {
        return db;
    }

}
三,自定义路径,在build.gradle(Module.app)中进行配置

美高梅4858app 5

app.png

属性介绍:
schemaVersion--> 指定数据库schema版本号,迁移等操作会用到;
daoPackage --> dao的包名,包名默认是entity所在的包;
targetGenDir --> 生成数据库文件的目录;

<code>

apply plugin: 'org.greenrobot.greendao'
greendao {
    schemaVersion 1
    daoPackage 'com.anye.greendao.gen'
    targetGenDir 'src/main/java'
}

</code>

3)初始化

DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context.getApplicationContext(), GlobalVar.DB_NAME, null);DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb;DaoSession daoSession = daoMaster.newSession();trackBeanDao = daoSession.getTrackBeanDao();

Dao代表一个操作对象,session代表一条数据库链接。

增删改查

首先获取UserDao对象:

mUserDao = GreenDaoHelper.getDaoSession().getUserDao();
四,创建一个User的实体类

<code>

@Entity
public class User {
    @Id 
    private Long id; 
    private String name; 
    @Transient 
    private int tempUsageCount; // not persisted  
}

</code>

4)增

/** * 插入数据 * @param trackBean 插入 */public void insert(TrackBean trackBean) { TrackBean trackBean1 = queryByTrackId(trackBean.trackId); if (trackBean1==null && trackBean!=null) trackBeanDao.insert(trackBean);}/** * 查询,根据id * @param id id * @return bean */public TrackBean queryByTrackId { return trackBeanDao.queryBuilder().where(TrackBeanDao.Properties.TrackId.eq.build().unique();}

这里,我先做了一个查询,如果这条数据不存在,就插入。所有的操作,都是由Dao去操作。这里可以这样:

//第一个null是主键。传入空代表让其自增。TrackBean b = new TrackBean(null,"titile","url",m4a","cover",1);dao.insert;

数据库的增删改查我们都将通过UserDao来进行,插入操作如下:

mUser = new User((long)1,"张三");
mUserDao.insert(mUser);//添加一个

User的第一个参数为id,如果这里传null的话在插入的过程中id字段会自动增长(现在知道为什么id要为Long类型了吧!)

五,MakeProject

编译项目,User实体类会自动编译,生成get、set方法并且会在com.anye.greendao.gen目录下生成三个文件;

美高梅4858app 6

本文由美高梅网上注册平台发布于美高梅网上注册平台,转载请注明出处:【美高梅网上注册平台】1、一个精简的库,因为

上一篇:美高梅网上注册平台你看到的消息提示框就是通 下一篇:一种是进程间,注册广播的方式一般有两种
猜你喜欢
热门排行
精彩图文