greenDao3.0 的基本使用
来源:互联网 发布:淘宝双肩包店推荐 编辑:程序博客网 时间:2024/05/24 06:32
greenDao3.0 的基本使用
前言:
greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。greenDao3.0 相对于2.0版本使用起来更简单易懂,大大降低学习成本。
如果要详细了解的小伙伴可以访问greenDao的官方地址:greenDao
优势:
- 访问速度快.
- 易于使用的api.
- 内存消耗较少.
- 支持数据库加密.
- 库精简,从而避免65535的大小限制.
集成步骤:
gradle配置
添加库
buildscript { repositories { jcenter() mavenCentral() //<-- add repository } dependencies { classpath 'com.android.tools.build:gradle:2.3.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' //<-- add plugin }}
添加插件
apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao'
配置版本/Dao文件生成路径
greendao { schemaVersion 1000 //版本配置,如果版本升级中有修改表结构,需要修改此版本号 daoPackage 'org.greenrobot.greendao.example.Dao' //生成的DaoMaster,DaoSession,NoteDao的包名,不设置默认为项目包名 targetGenDir 'src/main/java' //生成的DaoMaster,DaoSession,NoteDao的位置,不设置默认为build\generated\source\greendao}
Compile配置
dependencies { compile 'org.greenrobot:greendao:3.2.0' //<-- add library}
greenDao初始化
greenDao在使用之间需要对其进行初始化,建议在application中进行实例化并拿到daoSession。
public class App extends Application { /** * A flag to show how easily you can switch from standard SQLite to the encrypted SQLCipher. */ public static final boolean ENCRYPTED = true; private DaoSession daoSession; @Override public void onCreate() { super.onCreate(); DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? "notes-db-encrypted" : "notes-db"); Database db = ENCRYPTED ? helper.getEncryptedWritableDb("super-secret") : helper.getWritableDb(); daoSession = new DaoMaster(db).newSession(); } public DaoSession getDaoSession() { return daoSession; }}
通过application拿到daoSession,然后在Activity和Fragment中获取noteDao
注:这里的noteDao是自定义的实体类note编译后生成的数据库操作类。后面会有用urse类生成userDao与这个一样。
// do this in your activities/fragments to get hold of a DAOnoteDao = daoSession.getNoteDao();
使用:
新建实体类
这里新建一个实体类,使用注解,最后编译后会在数据库notes-db中生成一张名为User的表。id,name是表的列名。注解@transient 表示该字段不作为列名。
@Entitypublic class User { @Id private Long id; private String name; @Transient private int tempUsageCount; // not persisted @Generated(hash = 873297011) public User(Long id, String name) { this.id = id; this.name = name; }}
编译
先进行编译,greenDao 3.0会在User中生成对应的set,get方法。同时会在gradle指定的路径和包中生成userDao,DaoMaster,DaoSession。
初始化
在前面已经有介绍,这里不做详细解释了。
使用
这里需要注意的是,greenDao并不支持json不转为实体类直接存入数据库。以后也许会支持,但至少目前不允许。
拿到userDao对象,数据库的基本操作通过它来实现。
DaoSession daoSession = ((App) getApplication()).getDaoSession(); userDao = daoSession.getUserDao();
增
User user = new User((long)1,"user1"); userDao.insert(user);
删
userDao.deleteByKey(userId);
改
User user = new User((long)2,"anye0803");userDao.update(user);
查
1.全部查询:
如果要排序的话:
Query<User> usersQuery;usersQuery = userDao.queryBuilder().orderAsc(UserDao.Properties.Id).build(); //查询user,根据ID排序List<User> users = usersQuery.list();
如果不排序的话:
List<User> users = userDao.loadAll();String userName = "";for (int i = 0; i < users.size(); i++) { userName += users.get(i).getName()+",";}
2.查询单条数据(根据条件查询)
usersQuery = userDao.queryBuilder().orderAsc(UserDao.Properties.Id).build();QueryBuilder qb = userDao.queryBuilder();qb.where(UserDao.Properties.Name.eq("Joe"), //名字等于Joe qb.or(UserDao.Properties.Id.gt(2), //gt表示> qb.and(UserDao.Properties.Id.eq(3), UserDao.Properties.Date.ge(1489161600)))); //ge表示>= 2017/03/10 24:00:00List youngJoes = qb.list();
greendao中的注解(没有一一尝试,可以都试试)
(一) 定义实体(类名上的注解)
@Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(二) 属性和方法上的注解
@Id
@NotNull 不为null
@Unique 唯一约束
@ToMany 一对多
@OrderBy 排序
@ToOne 一对一
@Transient 不存储在数据库中
@generated 由greendao产生的构造函数或方法
总结:
greenDao 3.0 暂时写到这,还有一些操作自己慢慢探索中。
- greenDao3.0 的基本使用
- GreenDao3.0 的基本使用
- greenDao3的基本使用
- GreenDao3的基本使用
- GreenDao3.2的基本使用
- GreenDao3.0的使用
- GreenDao3.0的使用
- 最详细GreenDao3.2的基本使用
- GreenDao3.2的基本使用入门
- 关于GreenDao3.0的使用
- GreenDao3.0基本配置
- Android ORM框架 GreenDao3.0的使用
- 关于greenDao3.0的使用心得
- (一)GreenDao3.0的简单使用
- Android Greendao3.0框架的使用
- GreenDao3.0使用时的心得体会
- Android ORM框架 GreenDao3.0的使用
- greenDAO3.2的使用
- 手机App通过http协议从web服务器上获取json格式的数据
- spring scheduled定时任务
- java入门之“Hello World”
- 浅谈HTTP中Get与Post的区别
- Android Studio中使用NDK/JNI
- greenDao3.0 的基本使用
- HDU 1559 最大子矩阵
- stack,deque,queue的区别
- 基于Beautiful Soup 4.2.0文档的学习记录(2)——CSS选择器
- MIT_线性代数笔记_08_求解Ax=b:简化行阶梯形式R
- RM64 ventry实现
- 项目实战:几十行代码实现更加强大的Log,全方位输出类-方法-行数-信息
- Linux USB 鼠标驱动程序解析
- 纪录一下我看过的那些书籍