Greendao 使用总结
来源:互联网 发布:淘宝动态评分查询 编辑:程序博客网 时间:2024/06/10 02:58
关于GreenDao的配置:http://itangqi.me/2015/07/26/orm-greendao-summary/
在上述配置中的第三步,生成DAO文件时,步骤如下:主菜单->Run -> Run…
然后就会弹出
选择ExampleDaoGenerator运行就ok了。
注意:可以用“RE文件管理器“来查看数据库,测试是否创建成功。
GreenDao 的基本使用方法
1、如何创建表
在daoexamplegenerator工程下的ExampleDaoGenerator.java文件中添加表,如下:
public class ExampleDaoGenerator { public static void main(String[] args) throws Exception{ //在更新的时候要更改版本号 Schema schema = new Schema(1,"com.example.baiyuanwei.commonlib"); //添加一个noto表 addNote(schema); //添加一个book表 addBook(schema); //添加一个学生表 addStudent(schema); //这行代码就可以自动生成我们需要的代码了 new DaoGenerator().generateAll(schema,"/Users/baiyuanwei/Documents/androidFiles/CommonLib/app/src/main/java-gen"); } /** * 这是一个note表 * @param schema */ private static void addNote(Schema schema){ Entity note = schema.addEntity("Note"); //默认id 是主键 note.addIdProperty(); note.addStringProperty("text").notNull(); note.addDateProperty("date"); note.addStringProperty("comment"); } /** * 书表 * @param schema */ private static void addBook(Schema schema){ Entity book = schema.addEntity("BookLib"); book.addIdProperty(); book.addStringProperty("name"); book.addIntProperty("price"); } /** * 这是一个新建的表 * @param schema */ private static void addStudent(Schema schema){ Entity entity = schema.addEntity("Student"); entity.addIdProperty(); entity.addStringProperty("name"); }}
注意:我们在测试的时候,如果修改了此文件,就要重新编译一次此文件,生成DAO文件,最好把测试手机上的此app删掉,重新编译安装,否则就得更改版本号更新。
2、如何使用生成的DAO 文件
我们自定义Application,如下:
public class MyApplication extends Application { private DaoMaster daoMaster; private DaoSession daoSession; private SQLiteDatabase sqLiteDatabase; @Override public void onCreate() { super.onCreate(); setupDataBase(); } private void setupDataBase() { DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, DbConstant.DB_NAME, null); sqLiteDatabase = helper.getWritableDatabase(); daoMaster = new DaoMaster(sqLiteDatabase); daoSession = daoMaster.newSession(); } public DaoSession getDaoSession() { return daoSession; }}
我们只要用DaoSession这个对象就可以完成数据库的增删改查了。其中主要的就是DaoMaster、DaoSession、SQLiteDatabase,这些在Application中创建好,我们就相当于在整个app中创建了一次这些变量。
然后我们新建一个DbHelper.java类,完成对数据库增删改查的封装,如下:
public class DbHelper { //note表 private NoteDao noteDao; //BookLib 表 private BookLibDao bookLibDao; private static DbHelper dbHelperInstance; private static Context mContext; /** * 单例模式得到DbHelper的对象 * * @param context * @return */ public static DbHelper getDbHelperInstance(Context context) { if (dbHelperInstance == null) { dbHelperInstance = new DbHelper(); if (mContext == null) { mContext = context; } DaoSession daoSession = ((MyApplication) mContext.getApplicationContext()).getDaoSession(); dbHelperInstance.noteDao = daoSession.getNoteDao(); dbHelperInstance.bookLibDao = daoSession.getBookLibDao(); } return dbHelperInstance; } /** * 如果不存在该书名,就增加数据 * @param bookLib */ public void insertBookLibData(BookLib bookLib) { if (!isSaveByName(bookLib.getName())){ bookLibDao.insert(bookLib); } } /** * 根据id删除数据 * 也可以根据其它列删除数据 * * @param id */ public void deleteBook(int id) { QueryBuilder<BookLib> qb = bookLibDao.queryBuilder(); //where的括号中就是条件,把其中的"Id"换成其它列名就ok了,"eq"代表相等 DeleteQuery<BookLib> dq = qb.where(BookLibDao.Properties.Id.eq(id)).buildDelete(); dq.executeDeleteWithoutDetachingEntities(); } /** * 删除BookLib表中的所有数据 */ public void deleteAll() { bookLibDao.deleteAll(); } /** * 修改数据 * 要知道该条目的主键的值 * @param bookLib */ public void updateBook(BookLib bookLib) { bookLibDao.update(bookLib); } /** * 查询booklib表中的所有数据 * * @return */ public List<BookLib> queryAllBookLib() { return bookLibDao.loadAll(); } /** * 查询 * 根据name这一列,查询是否已经存在此name * 也可以根据其它列来查询,只要修改where中的代码就ok了 * @param name * @return */ public boolean isSaveByName(String name) { QueryBuilder<BookLib> qb = bookLibDao.queryBuilder(); qb.where(BookLibDao.Properties.Name.eq(name)); int count = (int) qb.buildCount().count(); return count > 0 ? true : false; } /** * 查询 * 根据书的名字返回书的价格 * @param name * @return -1代表没有此书 */ public int getPriceByName(String name){ QueryBuilder<BookLib> qb = bookLibDao.queryBuilder(); qb.where(BookLibDao.Properties.Name.eq(name)); if (qb.list().size()>0){ //返回书的价格 return qb.list().get(0).getPrice(); }else { //没有此书,返回一个错误码 return -1; } } /** * 查询 * 根据多个条件来查询 * @param name * @param price * @return 返回符合条件的所有booklib */ public List<BookLib> getMoreQuery(String name,int price){ QueryBuilder<BookLib> qb = bookLibDao.queryBuilder(); qb.where(BookLibDao.Properties.Name.eq(name),BookLibDao.Properties.Price.eq(price)); return qb.list(); }}
增删改查中,这里只看一下“改“,其它的可以看下代码就应该懂了。在“改“的时候,需要注意:
public void updateBook(BookLib bookLib) { bookLibDao.update(bookLib); }
在bookLib这个变量中,每个属性的值都要有,只是修改需要改的属性,其中主键的值肯定是不能变的,在GreenDao中默认主键是id(暂时不知道怎么设置主键)。
代码下载请点我
0 0
- Greendao 使用总结
- greendao 3.2使用总结
- 使用greenDAO进行开发总结
- GreenDao总结
- GreenDao使用
- GreenDAO使用
- GreenDao使用
- GreenDAO使用
- GreenDao使用
- GreenDao使用
- greenDao 使用
- GreenDao使用
- GreenDAO使用
- GreenDao使用
- greenDao使用
- GreenDao使用
- 数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- 用Python读写word
- 算法学习之Dijkstra单源最短路问题
- 文档的作用和分类
- VS2013 Error LNK2019 about extern C
- C#中数组、ArrayList和List三者的区别
- Greendao 使用总结
- HDU 1358 Period
- Hello World
- Linux下安装Nginx详细图解教程
- iOS开发笔记--描边label
- 算法训练 P1103 【复数运算,指针】
- 详细解析Java中抽象类和接口的区别
- UIWebView 与 JavaScript 的交互
- 动态规划:求最长上升子序列