一直在使用Android自带的数据库SqliteDatabase,在使用的时候需要编写的内容比较多 ,现在大家都在使用greenDao,因此现在的项目中,使用greenDao,可能由于第一次,会有各种问题,但是,只是简单写个Demo,很难学习的比较深。

首先在项目build.gradle中导入

  dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' }

Android greenDao数据库的简单使用(一)_第1张图片

接着在module中build.gradle中导入

dependencies { compile 'org.greenrobot:greendao:3.2.0' compile 'org.greenrobot:greendao-generator:3.2.0' }

接着在module中build.gradle的顶部添加

apply plugin: ‘org.greenrobot.greendao

以及

  greendao {        schemaVersion 1     //数据库版本号        daoPackage 'com.jian.greendao.gen'//这个是生成代码保存的包名        targetGenDir 'src/main/java'//保存到java代码路径    }

全部代码如下:

apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao'android {    ......    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    greendao {        schemaVersion 1        daoPackage 'com.jian.greendao.gen'//这个是生成代码保存的包名        targetGenDir 'src/main/java'//保存到java代码路径    }}dependencies {      ...    compile 'org.greenrobot:greendao:3.2.0'    compile 'org.greenrobot:greendao-generator:3.2.0'}

同步后就可以使用greenDao.

创建实体类

UserBean

@Entitypublic class User {    @Id(autoincrement = true)    private Long id;    private String name;    private String sex;    private int age;    private int salary;}

@Entity 这个标志告诉greenDao,这个是我需要生成的表
@Id(autoincrement=true)是自动生成的id,注意:Long,不是long

然后点击Build->Make Project(Ctrl + F9) ,将会自动为我们生成需要的类和代码

生成的UserBean

@Entitypublic class User {    @Id(autoincrement = true)    private Long id;    private String name;    private String sex;    private int age;    private int salary;    @Generated(hash = 1815379757)    public User(Long id, String name, String sex, int age, int salary) {        this.id = id;        this.name = name;        this.sex = sex;        this.age = age;        this.salary = salary;    }    @Generated(hash = 1203313951)    public User() {    }    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    public String getName() {        return this.name;    }    public void setName(String name) {        this.name = name;    }    ...    public int getSalary() {        return this.salary;    }    public void setSalary(int salary) {        this.salary = salary;    }}

自动生成的类

Android greenDao数据库的简单使用(一)_第2张图片

创建App类,继承Application

public class App extends Application {    public static final boolean ENCRYPTED = true;    private DaoSession daoSession;    @Override    public void onCreate() {        super.onCreate();        DaoMaster.DevOpenHelper helper = new  DaoMaster.DevOpenHelper(this, ENCRYPTED ? "users-db-encrypted" : "users-db");        //注意这里是getWritableDb()        Database db =  helper.getWritableDb();        daoSession = new DaoMaster(db).newSession();    }    public DaoSession getDaoSession() {        return daoSession;    }}

tip:别忘记将创建的App添加到manifest中。

<application        android:name=".App"        ....        android:theme="@style/AppTheme"> application>

这个类起到防止重复创建数据库的操作,当然也可以使用单例模式来实现。

使用greenDao进行增删改查

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

  • 增加数据(直接inser一个对象即可,十分简便)
private UserDao mUserDao = GreenDaoHelper.getDaoSession().getUserDao();  public void insertData(){      //数据库的增删改查我们都将通过UserDao来进行,插入操作如下:      mUserDao.insert(new User(null,"david",23,"male"));//id传null 即自增。==> 这里是Long类型而不是long  }

  • 删除数据(删除数据和修改数据的思路一样,都是要先查找到数据)
//查询id等于3的所有行并删除User user = mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(3)).build().unique();if (user == null)   ToastUtils.show(getView(), "用户不存在!");else   mUserDao.deleteByKey(user.getId());
//查询id小于5的集合并删除List userList = (List) mUserDao.queryBuilder().where(UserDao.Properties.Id.le(5)).build().list();for (User user : userList) {    mUserDao.delete(user);}
//删除所有数据mUserDao.deleteAll();

#修改数据

//修改id为2的行 User user = new User((long) 2, "Nancy", 23, "female");mUserDao.update(user);

查询数据

//查询id>= 3 且like ("%david%")User user = mUserDao.queryBuilder()                .where(UserDao.Properties.Id.ge(3), UserDao.Properties.UserName.like("%david%")).build().unique();if (user == null) {    ToastUtils.show(getView(), "用户不存在!");} else {    user.setUserName("王五");    mUserDao.update(user);}
//查出所有数据List users = mUserDao.loadAll(); //查出所有数据List users = mUserDao.list(); //查询id为1~4之间的数,查出前2个List users = mUserDao.queryBuilder()                .where(UserDao.Properties.Id.between(1, 4)).limit(2).build().list();

greenDao 注解

@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean@Id 标明主键,括号里可以指定是否自增@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)@NotNull 非空@Transient 标识这个字段是自定义的不会创建到数据库表里@Unique 添加唯一约束@ToOne 是将自己的一个属性与另一个表建立关联(外键) @ToMany的属性referencedJoinProperty,类似于外键约束。@JoinProperty 对于更复杂的关系,可以使用这个注解标明目标属性的源属性。

以上就是greenDao的简单使用,下一篇将记录项目中的使用及版本更新。

Android greenDao3.0的开发实战,包括版本升级(二)

参考文章:
1.最详细GreenDao3.2的基本使用
2.greenDAO3 入门(配置,基本操作,数据库升级)

更多相关文章

  1. Android访问中央气象台的天气预报API得到天气数据 .
  2. 在android中利用多线程实现对控件的更新(动态修改文本框中的值)。
  3. 用HTML+JS实现Android闹钟功能,附带Alarm代码分享
  4. Android开发便签6:数据保存之File存储
  5. 8.1、Android中为Intent附加数据的两种写法
  6. Android中数据库操作框架greenDAO介绍与使用
  7. Android JUnit Test——批量运行测试代码
  8. Android 基础-3.0 数据存储方式
  9. Android开发中高效的数据结构

随机推荐

  1. Android(安卓)上,用普通的 am-linux-gcc
  2. Android(安卓)5.0+ 自定义普通按钮的ripp
  3. u3d与android通信1
  4. Android自动接听和挂断电话实现原理
  5. android与Web服务器交互时的cookie使用-
  6. Android(安卓)Developers:向其它应用发送
  7. android Paint和Color类介绍 使用示例
  8. Android(安卓)万能适配器 节省你的开发时
  9. Android(安卓)系统Handler用法简介
  10. android studio 试手