Android数据库——GreenDAO3.2.2的使用
来源:互联网 发布:算量软件有哪些 编辑:程序博客网 时间:2024/06/06 07:10
废话不多说,今天我们来学习:开源的Android数据库ORM框架——greenDAO。
GreenDao介绍
greenDAO是Android的一个对象/关系映射(ORM)工具。它为关系数据库SQLite提供面向对象的界面。
了解更多,详见官网:http://greenrobot.org/greendao
github地址:https://github.com/greenrobot/greenDAO
GreenDao优点
- 性能最大化(Android平台最快的ORM框架)
- 简洁直观的API
- 支持SQLCipher加密数据库
- 依赖体积小
- 内存开销最小化
- 对Android进行高度优化
GreenDao的使用
在Android Studio项目 build.gradle(Project:项目名称)文件中引入:
buildscript { repositories { jcenter() mavenCentral() // add repository } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin }}
在 build.gradle(Module.app)文件中引入:
apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao' // apply plugin...//greendao配置greendao { schemaVersion 1 //数据库版本号 daoPackage 'app.hjw.com.greendao.gen' //生成Dao,DaoMaster和DaoSession的包名(默认实体的包名) targetGenDir 'src/main/java' //自定义生成源文件的路径}dependencies { ... compile 'org.greenrobot:greendao:3.2.2' // add library}
编写代码示例
创建User实体类中的代码
@Entitypublic class User { @Id(autoincrement = true) private Long id; @NotNull private String name; @NotNull private int age; @Transient private int tempUsageCount; ...}
MakeProject
编译项目,自动编译User实体类,并在User类中生成get、set方法以及在app.hjw.com.greendao.gen目录下生成三个文件,如下:
编写Application中的代码
public class MyApplication extends Application { private DaoMaster.DevOpenHelper mHelper; private SQLiteDatabase db; private DaoMaster mDaoMaster; private DaoSession mDaoSession; public static MyApplication instances; public static MyApplication getInstances() { return instances; } @Override public void onCreate() { super.onCreate(); instances = this; setDataBase(); } private void setDataBase() { mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null); //通过DaoMaster.DevOpenHelper得到SQLiteOpenHelper对象 db = mHelper.getWritableDatabase(); //该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); } public DaoSession getmDaoSession() { return mDaoSession; } public SQLiteDatabase getDb() { return db; }}
最后不要忘记在我们的AndroidManifest.xml中指定MyApplication。
在MainAcitivity中onCreate获取Dao对象
daoSession = MyApplication.getInstances().getmDaoSession(); userDao = daoSession.getUserDao();
Insert
private void insertData() { User user = new User(); try { user.setName("hjw"); user.setAge(23); userDao.insert(user); Log.d(TAG, "insertData: " + user.getId()); } catch (Exception e) { e.printStackTrace(); } }
当我们点击Insert按钮,观察日志如下:
Delete
根据条件删除数据:
private void deleteData(long id) { List<User> userList = null; try { userList = (List<User>) userDao.queryBuilder().where(UserDao.Properties.Id.le(id)).build().list(); for (User user : userList) { userDao.delete(user); } } catch (Exception e) { e.printStackTrace(); } }
当我们点击Delete按钮,就可以根据Id删除想要删除的数据。
首先我们通过where查询条件,这里id传入的小于等于id的数据,where可以有多个参数(多个查询条件),最后list()表示查询结果是一个List集合。(unique表示查询一条数据)。
根据主键删除:
private void deleteDataById(long id){ userDao.deleteByKey(id); }
删除所有的数据:
private void deleteDataAll() { userDao.deleteAll(); }
Update
根据Id修改数据:
private void updateData(long id) { try { User user = new User(id,"hxn",18); userDao.update(user); Log.d(TAG, "updateData: " + user.getName()); } catch (Exception e) { Log.d(TAG, "updateData failed" + e.getMessage()); } }
当我们点击Update按钮,观察日志如下:
Query
查询全部数据:
private void queryAll() { try { List<User> users = userDao.loadAll(); for (User u : users) { Log.d(TAG, "queryAll: " + " id:" + u.getId() + " name" + u.getName() + " age" + u.getAge()); } } catch (Exception e) { e.printStackTrace(); } }
当我们点击Query按钮时,观察打印日志如下:
查询单个数据:
private void queryByName() { User hjw = userDao.queryBuilder().where(UserDao.Properties.Name.eq("hjw")).unique(); Log.d(TAG, "queryByName: " + " name" + hjw.getName() + " age" + hjw.getAge() + " id" + hjw.getId()); }
数据库升级
升级数据库分为两个步骤:
- 修改gradle
首先module中的gradle文件中修改数据库的版本号:
schemaVersion 2 //最新版本号
- 修改实体类(比如增加或删除字段)
最后我们MakeProject编译项目即可。一般的数据库升级这样就可以了,特殊情况可能需要自己编写数据库迁移脚本。
注解
实体@Entity注解
schema:告知GreenDao当前实体属于哪个schemaactive:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法nameInDb:在数据中使用的别名,默认使用的是实体的类名indexes:定义索引,可以跨越多个列createInDb:标记创建数据库表
基础属性注解
@Id :主键 Long型,通过@Id(autoincrement = true)设置自增长@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")@NotNul:设置数据库表当前列不能为空@Transient :添加次标记之后不会生成数据库表的列
索引注解
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束@Unique:向数据库列添加了一个唯一的约束
关系注解
@ToOne:定义与另一个实体(一个实体对象)的关系@ToMany:定义与多个实体对象的关系
总结
本教程主要总结了GreenDao基本语法和配置,欢迎童鞋们学习。
最后附上源代码地址:https://github.com/HjwJack/GreenDao
- Android数据库——GreenDAO3.2.2的使用
- Android数据库GreenDAO3.2.2的使用(二,数据库使用)
- Android数据库GreenDAO3.2.2的使用(一,集成数据库)
- Android数据库GreenDAO3.2.2的使用(四、数据库升级)
- Android框架之路——GreenDao3.2.2的使用
- Android数据库框架——GreenDao3.2的配置 升级
- Android数据库GreenDAO3.2.2的使用(三,GreenDao操作外部数据库----操作.db数据库)
- Android实战——GreenDao3.2的使用,爱不释手
- Android实战——GreenDao3.2的使用,爱不释手
- Android实战——GreenDao3.2的使用,爱不释手
- Android实战——GreenDao3.2的使用,爱不释手
- Android数据库GreenDAO3.2.2的使用(五,SQLiteConstraintException因为主键报错)
- Android GreenDao3.2.2简单使用
- android GreenDAO3.2.2简单使用
- greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级
- android stdudio 数据库框架greendao3.2使用
- GreenDao3.2.2集成使用以及数据库的升级
- Android ORM框架 GreenDao3.0的使用
- 洛谷1464
- 设计模式-适配器模式
- Spring MVC 学习之基于注解的控制器
- C#委托与事件
- 与零值比较
- Android数据库——GreenDAO3.2.2的使用
- 深入理解DOM事件机制系列第三篇——事件对象
- 内存对齐和位域
- 数据库SQL优化大总结之 百万级数据库优化方案
- probe函数
- 轻量级Android6.0动态权限解决方案
- mysql中一条insert语句批量插入多条记录
- poj1426Find The Multiple
- 架构模式--函数回调机制、异步函数回调机制图例详解