GeenDao
Android原生的api不方便之处
1.需要手动拼写sql
2.要自己写操作库的代码
3.不能自动的把数据库中的数据映射成对象
4.没有实现级联查询
GreenDao的好处
1.可以快速的开发数据库
了解GreenDao 1.GreenDao是一个android的开源框架 2.ORM(Object relation mapping)将数据库中的数据映射成数据库的对象,所有的开发语言都是 面向对象的操作而数据库的基于关系型的,java操作的都是对象,这样操作对象就可以过了 主流的开源框架 1.OrmLite 通过配置注解的操作,使用简单,也可以实现ORM机制i,性能差 2.SugarORM 也可以实现ORM 3.LItePai 可以实现多表的级联查询和数据库的升级降解 4.GreenDao 性能好
DaoMaster : 使用greenDAO的切入点。DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,它们在SQLite数据库中创建模式。
DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。最后,DaoSession对象还跟踪身份范围。有关更多详细信息,请查看
Dao:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法,例如:count,loadAll和insertInTx。
(1)@Entity 实体标识
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(2)@Id 每条数据对应的位置,必写项
(3)@Property(nameInDb = “”) 表示该属性将作为表的一个字段,其中nameInDb属性值是在数据库 中对应的字段名称,可以自定义字段名,例如可以定一个跟实体对象字段不一样的字段名
(4)@NotNull 不为null
(5)@Unique 唯一约束 该属性值必须在数据库中是唯一值
(6)@ToMany 一对多
(7)@OrderBy 排序
(8)@ToOne 一对一 关系表
(9)@Transient 不保存于数据库
(10)@generated 由greendao产生的构造函数或方法
GreenDao基本使用步骤
1.添加依赖
在build.gradle里添加依赖 compile 'org.greenrobot:greendao:3.2.2' // add library compile 'org.greenrobot:greendao-generator:3.2.2
2.在工程的bulid.gradle里面添加
buildscript { repositories { mavenCentral() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' }}
3.对greendao的generator生成文件配置
添加在头部apply plugin: 'org.greenrobot.greendao' greendao { schemaVersion 1 //版本 daoPackage '生成文件包名' // 一般为app包名+生成文件的文件夹名 targetGenDir 'src/main/java' //生成文件路径 }
4.创建实体的Dao文件
id不要忘了加自增
@Entitypublic class User { @Id(autoincrement = true) private Long id; @Property(nameInDb = "NAME") private String name;}
创建完成之后再User类中按Ctrl+F9刷新会出现以下文件
5.通过Application调用自动生成的三个类的数据库的操作
private static App app;private DaoMaster.OpenHelper data;private SQLiteDatabase database;private DaoMaster daoMaster;private DaoSession daoSession;
不要忘了咋清单文件里面初始化
@Overridepublic void onCreate() { super.onCreate(); app = this; setDataBase();}public static App getInstance(){ return app;}private void setDataBase() { // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO已经帮你做了。 // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 data = new DaoMaster.DevOpenHelper(this, "data", null); database = data.getWritableDatabase(); daoMaster = new DaoMaster(database); daoSession = daoMaster.newSession();}public SQLiteDatabase getDatabase() { return database;}public DaoSession getDaoSession() { return daoSession;}6.在Activity中调用Application中的方法做删改查 text = findViewById(R.id.text); number = findViewById(R.id.number); userDao = App.getInstance().getDaoSession().getUserDao();}public void insert(View view) { User user = new User(null, "李世强"); userDao.insert(user); Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();}public void delete(View view) { String trim = number.getText().toString().trim(); int i = Integer.parseInt(trim); User user = new User((long)i, "李世强"); userDao.deleteByKey(user.getId()); Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();}public void update(View view) { String trim = number.getText().toString().trim(); int i = Integer.parseInt(trim); User user = new User((long)i , "李世强0.0"); userDao.update(user); Toast.makeText(this, "xuigai成功", Toast.LENGTH_SHORT).show();}public void select(View view) { List users = userDao.loadAll(); String temp = ""; for(int i = 0 ; i < users.size() ; i++){ temp += ","+users.get(i).getName(); temp += users.get(i).getId(); } text.setText(temp);}
更多相关文章
- Java代理模式与Android的情结
- Android中的Sqlite数据库的简单使用
- android Handle
- Android(安卓)Binder 机制之ServiceManager 续
- Android中实现IPC的几种方式详细分析及比较
- android多线程机制
- Android4.2.2 Gallery2源码分析(8)——假装的Activity
- android通过Camera录制视频
- 如何通过日志来调试Web App