热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GreenDao3api、注解说明

这边使用的是GreenDao3.1,它的注解都在greendao-api-3.1.0下下面是常用注解的意义:Entity:publici

这边使用的是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 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 keys):使用事务操作删除数据库中给定的所有key所对应的实体
void deleteByKeyInTx(K... keys):使用事务操作删除数据库中给定的所有key所对应的实体
void deleteInTx(java.lang.Iterable entities):使用事务操作删除数据库中给定实体集合中的实体
void deleteInTx(T... entities):使用事务操作删除数据库中给定的实体 // 数据插入相关
long insert(T entity):将给定的实体插入数据库
void insertInTx(java.lang.Iterable entities):使用事务操作,将给定的实体集合插入数据库
void insertInTx(java.lang.Iterable entities, boolean setPrimaryKey):使用事务操作,将给定的实体集合插入数据库, 并设置是否设定主键
void insertInTx(T... entities):将给定的实体插入数据库
long insertOrReplace(T entity):将给定的实体插入数据库,若此实体类存在,则覆盖
void insertOrReplaceInTx(java.lang.Iterable entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖
void insertOrReplaceInTx(java.lang.Iterable entities, boolean setPrimaryKey):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖 并设置是否设定主键
void insertOrReplaceInTx(T... entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖
long insertWithoutSettingPk(T entity):将给定的实体插入数据库,但不设定主键 // 新增数据插入相关API
void save(T entity):将给定的实体插入数据库,若此实体类存在,则更新
void saveInTx(java.lang.Iterable entities):将给定的实体插入数据库,若此实体类存在,则更新
void saveInTx(T... entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则更新 // 加载相关
T load(K key):加载给定主键的实体
java.util.List loadAll():加载数据库中所有的实体
protected java.util.List loadAllAndCloseCursor(android.database.Cursor cursor) :从cursor中读取、返回实体的列表,并关闭该cursor
protected java.util.List 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 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 List queryRaw(Class entityClass, String conditions) {

List list = (List) mDaoSession.getDao(entityClass).queryRaw(conditions);

return list;}


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







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


还有一种原生的查询就是直接通过调用数据库db:

Cursor cursor = mDaoMaster.getDatabase().rawQuery(sql, params);
这种方式要自己去调用数据库关闭。





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




推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
author-avatar
真正的爱情是什么2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有