GreenDao3 api、注解说明

这边使用的是GreenDao3.1,它的注解都在greendao-api-3.1.0下


下面是常用注解的意义:

@Entity:

public @interface Entity {  
  
    /** 
     * 在数据库中表的名称,默认为实体的类名 
     */  
    String nameInDb() default "";  
  
    /** 
     *  定义索引,可以跨越多个列(默认为实体类成员变量的个数) 
     */  
    Index[] indexes() default {};  
  
    /** 
     * 标记创建数据库表 
     * 若一个表映射多个实体类或者创建表外应的GreenDao,设置为false 
     */  
    boolean createInDb() default true;  
  
    /** 
     *  告知GreenDao当前实体属于哪个schema 
     */  
    String schema() default "default";  
  
    /** 
     *  实体活动状体标志位(默认为false) 
     *  若设置为true,实体有更新、删除和刷新方法 
     */  
    boolean active() default false;  
}  

@Convert:

这个类十分有用,可以讲数据库中字段类型与entity中的类型进行你需要的转换。
public @interface Convert {  
    /** 转换类*/  
    Class<? extends PropertyConverter> converter();  
  
    /** 
     * 在数据库中持久化的列 
     * 此受限于GreenDao所支持的类 
     */  
    Class columnType();  
}  

@Id

设置主键 Long型,可以通过@Id(autoincrement = true)设置自增长。通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。

public @interface Id {  
    /** 
      * 设置是否为自增长,默认为false 
      */  
    boolean autoincrement() default false;  
}  

@Index

使用@Index作为一个属性来创建一个索引;定义多列索引(@link Entity#indexes())

public @interface Index {  
    /** 
     * 通过逗号间隔创建表的属性索引,例如 “propertyA,propertyB,propertyC” 
     * 若要指定排序, 需在列明以后添加 ASC(升序) 或者DESC(降序) ,  例如 "propertyA DESC, propertyB ASC" 
     *  只有实体类中使用 {@link Entity#indexes()} 才可设置 
     */  
    String value() default "";  
  
    /** 
     * 表的可选索引 
     * 默认为实体类中的成员变量 
     */  
    String name() default "";  
  
    /** 
     * 是否为属性设置唯一属性,默认为false 
     */  
    boolean unique() default false;  
}  

@JoinEntity

定义表连接关系
public @interface JoinEntity {  
    /** 添加的实体类 */  
    Class<?> entity();  
  
    /** 源表的列索引 */  
    String sourceProperty();  
  
    /** 连接表内拥有源实体的属性*/  
    String targetProperty();  
}  

@JoinProperty

定义名称和引用名称属性关系

public @interface JoinProperty {  
    /** 实体中的名称,对应于引用的名称 */  
    String name();  
  
    /** 引用的名称 */  
    String referencedName();  
}  

@OrderBy

排序

public @interface OrderBy {  
    /** 
     * 通过逗号间隔创建表的属性索引,例如 “propertyA,propertyB,propertyC” 
     * 若要指定排序, 需在列明以后添加 ASC(升序) 或者DESC(降序) ,  例如 "propertyA DESC, propertyB ASC" 
     *  默认按升序排序 
     *  若不设置默认根据主键排序 
     */  
    String value() default "";  
}  

@Property

指定数据库数据表名

public @interface Property {  
    /** 
     * 默认是的使用字段名 
     */  
    String nameInDb() default "";  
}   

@Unique

向数据库列添加了一个唯一的约束



部分API

AbstractDao

dao是GreenDao中增、删、改所用的关键类,下面是它的一些关键api:

void    attachEntity(T entity):  
  
long    count():获取数据库中数据的数量  
  
// 数据删除相关  
void    delete(T entity):从数据库中删除给定的实体  
void    deleteAll() :删除数据库中全部数据  
void    deleteByKey(K key):从数据库中删除给定Key所对应的实体  
void    deleteByKeyInTx(java.lang.Iterable<K> keys):使用事务操作删除数据库中给定的所有key所对应的实体  
void    deleteByKeyInTx(K... keys):使用事务操作删除数据库中给定的所有key所对应的实体  
void    deleteInTx(java.lang.Iterable<T> entities):使用事务操作删除数据库中给定实体集合中的实体  
void    deleteInTx(T... entities):使用事务操作删除数据库中给定的实体  
  
// 数据插入相关  
long    insert(T entity):将给定的实体插入数据库  
void    insertInTx(java.lang.Iterable<T> entities):使用事务操作,将给定的实体集合插入数据库  
void    insertInTx(java.lang.Iterable<T> entities, boolean setPrimaryKey):使用事务操作,将给定的实体集合插入数据库,  
                                                                                                                并设置是否设定主键  
void    insertInTx(T... entities):将给定的实体插入数据库  
long    insertOrReplace(T entity):将给定的实体插入数据库,若此实体类存在,则覆盖  
void    insertOrReplaceInTx(java.lang.Iterable<T> entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖  
void    insertOrReplaceInTx(java.lang.Iterable<T> entities, boolean setPrimaryKey):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖  
                                                                                                                            并设置是否设定主键  
void    insertOrReplaceInTx(T... entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖  
long    insertWithoutSettingPk(T entity):将给定的实体插入数据库,但不设定主键  
  
// 新增数据插入相关API  
void    save(T entity):将给定的实体插入数据库,若此实体类存在,则更新  
void    saveInTx(java.lang.Iterable<T> entities):将给定的实体插入数据库,若此实体类存在,则更新  
void    saveInTx(T... entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则更新  
  
// 加载相关  
T   load(K key):加载给定主键的实体  
java.util.List<T>     loadAll():加载数据库中所有的实体  
protected java.util.List<T>   loadAllAndCloseCursor(android.database.Cursor cursor) :从cursor中读取、返回实体的列表,并关闭该cursor  
protected java.util.List<T>   loadAllFromCursor(android.database.Cursor cursor):从cursor中读取、返回实体的列表  
T   loadByRowId(long rowId) :加载某一行并返回该行的实体  
protected T     loadUnique(android.database.Cursor cursor) :从cursor中读取、返回唯一实体  
protected T     loadUniqueAndCloseCursor(android.database.Cursor cursor) :从cursor中读取、返回唯一实体,并关闭该cursor  
  
//更新数据  
void    update(T entity) :更新给定的实体  
protected void  updateInsideSynchronized(T entity, DatabaseStatement stmt, boolean lock)   
protected void  updateInsideSynchronized(T entity, android.database.sqlite.SQLiteStatement stmt, boolean lock)   
void    updateInTx(java.lang.Iterable<T> entities) :使用事务操作,更新给定的实体  
void    updateInTx(T... entities):使用事务操作,更新给定的实体 


GreenDao查询语句

GreenDao的查询主要是通过QueryBuilder类
QueryBuilder qb = userDao.queryBuilder();
qb.where(Properties.FirstName.eq("Joe"),
qb.or(Properties.YearOfBirth.gt(1970),
qb.and(Properties.YearOfBirth.eq(1970), Properties.MonthOfBirth.ge(10))));
List youngJoes = qb.list();
其实很简单移动,就是把一些where 、and语句封装成了方法

执行原生的查询
public  <T> List<T> queryRaw(Class<T> entityClass, String conditions) {
	List<T> list = (List<T>) mDaoSession.getDao(entityClass).queryRaw(conditions);
return list;}

上面这个方法可以通过传入entity类,condition写入的内容相当于 “select * from entityTable”+conditions,例如







List<TableEntity> resultlist = queryRaw(TableEntity.class,"where name='张三'")

还有一种原生的查询就是直接通过调用数据库db:
Cursor cursor = mDaoMaster.getDatabase().rawQuery(sql, params);

这种方式要自己去调用数据库关闭。

上面就是一些GreenDao的常用注解和api方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值