greenDAO3基本使用
greenDAO3开始使用注解的方式定义实体类(entity),并且是通过安装gradle插件来生成代码。之前的版本则是通过建立一个独立的Java-lib工程来存放生成的文件。
greendao{
schemaVersion 1
targetGenDir 'src/main/java'
}
@Id注解选择 long / Long 属性作为实体ID。在数据库术语中,它是主键。参数自动增量,是使ID值不断增加(不会选用旧值)的标志。
@Property让你定义一个非默认的列名,其属性映射到。如果不存在,greenDAO将在SQL杂交方式使用字段名(大写,下划线,而不是骆驼情况下,例如 customName将成为 CUSTOM_NAME)。注意:您目前只能使用内联常量来指定列名。
@NotNull makes the property a “NOT NULL” column on the database side。通常是有意义的纪念原始类型(long, int, short, byte)与@NotNull,同时具有包装类(Long, Integer, Short, Byte)空的值。
@Transient表明这个字段不会被写入数据库,只是作为一个普通的java类字段,用来临时存储数据的,不会被持久化
@Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束 @Unique:向数据库添加了一个唯一的约束
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
@Id主键 Long 型,可以通过@Id(autoincrement = true)设置自增长
@NotNull 不为null
@Unique 唯一约束
@ToMany 一对多
@OrderBy 排序
@ToOne 一对一
@Transient 不存储在数据库中
@generated 由greendao产生的构造函数或方法
数据库侧的表和列名称派生自实体和属性名称。 而不是在Java中使用的骆驼案例样式,默认数据库名称使用大写,使用下划线分隔单词。
例如name在数据库中显示NAME,creationDate 显示CREATION_DATE
1.初始化数据库
SQLiteDatabase database = new DaoMaster.DevOpenHelper(this, "stu.db").getWritableDatabase(); DaoMaster master = new DaoMaster(database); DaoSession daoSession = master.newSession(); studentDao = daoSession.getStudentDao();
1. user-db是数据库名字(可以修改成别的,因为本来就不存在),应为我们之前创建了一个Entity叫做User,所以greenDAO自定帮我们生成的UserDao,拿到了这个UserDao,我们就可以操作User这张表了。
2. 一个DaoMaster就代表着一个数据库的连接;DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。
DaoMaster:使用greenDAO的切入点。 DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,在SQLite数据库中创建模式。
DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取。 DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。最后,DaoSession对象也跟踪标识范围。
DAO:数据访问对象(DAO)持续并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久化方法,例如:count,loadAll和insertInTx。
实体:持久对象。通常,实体是使用标准Java属性(如POJO或JavaBean)表示数据库行的对象。
2.插入数据
操作都是基于对象的了
Student student = new Student(1, "张三", 10); //插入 long insert = studentDao.insert(student); Log.e(TAG, "insert: " + insert);
3.查找数据
queryBuilder()方法,生成一个查找构造器,可以给构造器添加where条件判断、按照某某字段排序以及查询的条数等基本的数据库操作。list()方法表示查询的结果为一个集合.上述代码查询的就是ID号不等于999,按升序排序,做多5条,返回List类型
list()所有实体被加载到内存中。其结果通常是一个 ArrayList中,最容易使用。
listLazy()实体被装入点播存储器。一旦列表中的一个元素被首次访问,它被加载并高速缓存以供将来使用。必须关闭。
listLazyUncached()一个“虚拟”实体名单:任何接触到从数据库加载其数据的列表元素的结果。必须关闭。
修改数据
//1.where是查询条件,
//2.unique()表示查询结果为一条数据,若数据不存在,findUser为null。
5.删除数据
Student shan = studentDao.queryBuilder().where( StudentDao.Properties.Name.eq("李四")).build().unique(); if(shan!=null){ studentDao.deleteByKey(shan.getId()); text.setText(shan.getName() + "-" + shan.getAge() + "-" + shan.getId()); Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show(); }
原文地址http://www.bieryun.com/3091.html