Android原生的api不方便之处
1.需要手动拼写sql
2.要自己写操作库的代码
3.不能自动的把数据库中的数据映射成对象
4.没有实现级联查询
GreenDao的好处
1.可以快速的开发数据库

       了解GreenDao       1.GreenDao是一个android的开源框架       2.ORM(Object relation mapping)将数据库中的数据映射成数据库的对象,所有的开发语言都是  面向对象的操作而数据库的基于关系型的,java操作的都是对象,这样操作对象就可以过了         主流的开源框架        1.OrmLite            通过配置注解的操作,使用简单,也可以实现ORM机制i,性能差        2.SugarORM            也可以实现ORM        3.LItePai             可以实现多表的级联查询和数据库的升级降解        4.GreenDao              性能好

DaoMaster : 使用greenDAO的切入点。DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,它们在SQLite数据库中创建模式。

DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。最后,DaoSession对象还跟踪身份范围。有关更多详细信息,请查看

Dao:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法,例如:count,loadAll和insertInTx。

(1)@Entity 实体标识
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(2)@Id 每条数据对应的位置,必写项
(3)@Property(nameInDb = “”) 表示该属性将作为表的一个字段,其中nameInDb属性值是在数据库 中对应的字段名称,可以自定义字段名,例如可以定一个跟实体对象字段不一样的字段名
(4)@NotNull 不为null
(5)@Unique 唯一约束 该属性值必须在数据库中是唯一值
(6)@ToMany 一对多
(7)@OrderBy 排序
(8)@ToOne 一对一 关系表
(9)@Transient 不保存于数据库
(10)@generated 由greendao产生的构造函数或方法

GreenDao基本使用步骤

1.添加依赖

   在build.gradle里添加依赖    compile 'org.greenrobot:greendao:3.2.2' // add library    compile 'org.greenrobot:greendao-generator:3.2.2     

2.在工程的bulid.gradle里面添加

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

3.对greendao的generator生成文件配置

 添加在头部apply plugin: 'org.greenrobot.greendao'    greendao {        schemaVersion 1  //版本        daoPackage '生成文件包名' // 一般为app包名+生成文件的文件夹名        targetGenDir 'src/main/java' //生成文件路径    }

4.创建实体的Dao文件
id不要忘了加自增

@Entitypublic class User {    @Id(autoincrement = true)    private Long id;    @Property(nameInDb = "NAME")    private String name;}

创建完成之后再User类中按Ctrl+F9刷新会出现以下文件

5.通过Application调用自动生成的三个类的数据库的操作

private static App app;private DaoMaster.OpenHelper data;private SQLiteDatabase database;private DaoMaster daoMaster;private DaoSession daoSession;

不要忘了咋清单文件里面初始化

@Overridepublic void onCreate() {    super.onCreate();    app = this;    setDataBase();}public static App getInstance(){    return app;}private void setDataBase() {    // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。    // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO已经帮你做了。    // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。    // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。    data = new DaoMaster.DevOpenHelper(this, "data", null);    database = data.getWritableDatabase();    daoMaster = new DaoMaster(database);    daoSession = daoMaster.newSession();}public SQLiteDatabase getDatabase() {    return database;}public DaoSession getDaoSession() {    return daoSession;}6.在Activity中调用Application中的方法做删改查    text = findViewById(R.id.text);    number = findViewById(R.id.number);    userDao = App.getInstance().getDaoSession().getUserDao();}public void insert(View view) {    User user = new User(null, "李世强");    userDao.insert(user);    Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();}public void delete(View view) {    String trim = number.getText().toString().trim();    int i = Integer.parseInt(trim);    User user = new User((long)i, "李世强");    userDao.deleteByKey(user.getId());    Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();}public void update(View view) {    String trim = number.getText().toString().trim();    int i = Integer.parseInt(trim);    User user = new User((long)i , "李世强0.0");    userDao.update(user);    Toast.makeText(this, "xuigai成功", Toast.LENGTH_SHORT).show();}public void select(View view) {    List users = userDao.loadAll();    String temp = "";    for(int i = 0 ; i < users.size()  ; i++){        temp += ","+users.get(i).getName();        temp += users.get(i).getId();    }    text.setText(temp);}

更多相关文章

  1. Java代理模式与Android的情结
  2. Android中的Sqlite数据库的简单使用
  3. android Handle
  4. Android(安卓)Binder 机制之ServiceManager 续
  5. Android中实现IPC的几种方式详细分析及比较
  6. android多线程机制
  7. Android4.2.2 Gallery2源码分析(8)——假装的Activity
  8. android通过Camera录制视频
  9. 如何通过日志来调试Web App

随机推荐

  1. 在Android中使用Handler和Thread线程执行
  2. Android消息机制Message消息池
  3. Android传感器编程入门(二)
  4. android sdk+eclipse+adt 配置与开发
  5. android中的选择器selector
  6. 浅谈Android中的ClassLoader
  7. AppBarLayout中android:fitsSystemWindow
  8. 修改Android手机的“虚拟机堆大小”和and
  9. Android核心模块及相关技术
  10. Android性能调优出发点