GreenDAO,一个开源的Android ORM

GreenDAO是一个开源的Android ORM,是SQLite数据库的开发变得简单,节省了开发时间。GreenDAO通过将Java对象映射到数据库表(称为ORM,”对象/关系映射”),这样我们可以使用简单的面向对象的接口来存储,更新,删除和查询Java对象。

GreenDAO的功能
- 最高性能
- 易于使用的API
- 最小的内存消耗
- 数据库加密
- 较小的文件体积,避免65K方法限制

GreenDAO 3.0与GreenDAO 2.0相比较,GreenDAO3.0采用注解的方式来定义实体类,通过gradle插件生成相应的代码。

一,导入相关的包

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

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

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

三,在gradle中配置greenDAO的相关属性

greendao {    
schemaVersion 1    
daoPackage 'com.example.administrator.greendao3demo.gen' 
targetGenDir 'src/main/java'
}
  • schemaVersion—->指定数据库schema版本号,迁移等操作会用到
  • daoPackage——–>通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
  • targetGenDir——–>这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不是build中,这样就不用额外的设置资源目录了

到此我们就完成了GreenDao的基本配置了。

四,编写实体类

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

编写完成之后点击as中Build菜单栏中的Make Project,make完成之后会发现我们的User类中突然多了好多代码,这就是greenDAO自动为你生成的了,代码如下:

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String age;
    private String phone;
    @Transient
    private int tempUsageCount; // not persisted
    public String getPhone() {
        return this.phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getAge() {
        return this.age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    @Generated(hash = 1982716926)
    public User(Long id, String name, String age, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.phone = phone;
    }
    @Generated(hash = 586692638)
    public User() {
    }


}

Make project之后自动生成了get和set方法,以及在目录文件下生成了三个文件,如图所示:

这里写图片描述

五,在BaseApplication中进行数据库的初始化操作

public class BaseApplication extends Application {
    public DaoSession daoSession;

    public SQLiteDatabase basedb;

    public DaoMaster.DevOpenHelper helper;

    public DaoMaster daoMaster;
    @Override
    public void onCreate() {
        super.onCreate();
        setupDatanase();
    }

    private void setupDatanase() {
        helper = new DaoMaster.DevOpenHelper(this,Constants.DB_NAME,null);
        basedb = helper.getWritableDatabase();
        daoMaster = new DaoMaster(basedb);
        daoSession = daoMaster.newSession();
    }

    public DaoSession getDaoSession() {

        return daoSession;

    }

    public SQLiteDatabase getDb() {

        return basedb;

    }
}

六,在Activity中进行增删改查的操作

String name = etName.getText().toString().trim();
String age = etAge.getText().toString().trim();
String phone = etPhone.getText().toString().trim();

if (TextUtils.isEmpty(name)) {
     Toast.makeText(this, "姓名不能为空", Toast.LENGTH_SHORT).show();
     return;
}
     User user = new User(null, name, age, phone);
     getUserDao().insert(user);
     cursor.requery();
     adapter.notifyDataSetChanged();

删,根据id来进行删除

getUserDao().deleteByKey(tId);
cursor.requery();
adapter.notifyDataSetChanged();

 String name = etName.getText().toString().trim();
 String age = etAge.getText().toString().trim();
 String phone = etPhone.getText().toString().trim();
 User user = new User(tId, name, age, phone);

 getUserDao().update(user);
 cursor.requery();
 adapter.notifyDataSetChanged();

查,根据姓名来查询结果

 String name = etName.getText().toString().trim();
 if(TextUtils.isEmpty(name)){
         Toast.makeText(this,"名字不能为空",Toast.LENGTH_SHORT).show();
         return;
 }
        Query<User> query=getUserDao().queryBuilder()
                  .where(UserDao.Properties.Name.eq(name))
                  .orderAsc(UserDao.Properties.Id)
                  .build();
        List<User> list = query.list();
        Toast.makeText(this,list.size()+"",Toast.LENGTH_SHORT).show();

七,最终的效果图

这里写图片描述

github地址:https://github.com/maguifeng1991/myGit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值