前提:最近写android项目,android自带数据库api有点复杂,于是偷懒用了greendao。greendao好处自己查,这里不赘述,但是零基础的的我用起来还是费了3天的功夫,取之于网络,特在此奉献与网络。

1、通过daoGenerator生成所需要的关键文件

步骤1、新建的java工程,起名daoGenerator

步骤2:导入两个jar包,分别是freemarker-2.3.20.jar和greendao-generator-1.3.1.jar,下载路径:http://search.maven.org,你可以在这里搜索上述两个包,自己导入到java工程中,

导入的时候记着不要有中文路径

步骤3:新建daoGenerator.java文件,文件格式如下

import de.greenrobot.daogenerator.DaoGenerator;import de.greenrobot.daogenerator.Entity;import de.greenrobot.daogenerator.Property;import de.greenrobot.daogenerator.Schema;import de.greenrobot.daogenerator.ToMany;public class daoGenerator {    public static void main(String[] args) throws Exception {        Schema schema = new Schema(1,"com.example.menu");                addMenuDetail(schema);        addMenuTable(schema);        new DaoGenerator().generateAll(schema, "./");    }        private static void addMenuTable(Schema schema)    {        Entity menuTable = schema.addEntity("MenuTable");        menuTable.addStringProperty("menuName");//菜单的名称(周一早餐通用版)        menuTable.addIntProperty("menuType");//0早餐 1午餐 2晚餐        menuTable.addLongProperty("menuId").primaryKey().autoincrement();//菜单id        menuTable.addStringProperty("menuCreateTime");//菜单创建时间        menuTable.addLongProperty("storeId");//店铺的编号            }            private static void addMenuDetail(Schema schema) {        Entity menuDetail = schema.addEntity("MenuDetail");        menuDetail.addStringProperty("menuDateId");        menuDetail.addLongProperty("menuId");//菜单id        menuDetail.addIntProperty("widgetId");//控件id        menuDetail.addStringProperty("type");//控件类型:textview、pic、line、verticalLine、theme、tips        menuDetail.addStringProperty("name");//控件内容 "疙瘩汤"        menuDetail.addDoubleProperty("x");//x        menuDetail.addDoubleProperty("y");//y    }        }

该工程运行完毕会在当前目录下产生一个文件夹com,进入example再进入到menu(为什么会产生这样一个文件夹,这是由我们在程序中Schema schema = new Schema(1,"com.example.menu"), new DaoGenerator().generateAll(schema, "./");这两行决定的,如果你运行出错,请查看你是不是路径写错),可以发现生成如下几个文件:

简要说明:menuDetail和menuTable就是我们在daoGenerator中指定生成的表,在生成的文件中每张表分别对应两个文件,举例:表menuTable对应的两个文件一个是menuTable,一个是menuTableDao。

menuTable.java文件主要是menuTable中取得和设置列中元素的方法,见下图,注意:这是自动生成的代码,如果要修改列中元素名称可以在daoGenerator中修改:

 1 package com.ShanFuBao.SmartCall.menu; 2  3 // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit.  4 /** 5  * Entity mapped to table MENU_TABLE. 6  */ 7 public class MenuTable { 8  9     private String menuName;10     private Integer menuType;11     private Long menuId;12     private String menuCreateTime;13     private Long storeId;14 15     public MenuTable() {16     }17 18     public MenuTable(Long menuId) {19         this.menuId = menuId;20     }21 22     public MenuTable(String menuName, Integer menuType, Long menuId, String menuCreateTime, Long storeId) {23         this.menuName = menuName;24         this.menuType = menuType;25         this.menuId = menuId;26         this.menuCreateTime = menuCreateTime;27         this.storeId = storeId;28     }29 30     public String getMenuName() {31         return menuName;32     }33 34     public void setMenuName(String menuName) {35         this.menuName = menuName;36     }37 38     public Integer getMenuType() {39         return menuType;40     }41 42     public void setMenuType(Integer menuType) {43         this.menuType = menuType;44     }45 46     public Long getMenuId() {47         return menuId;48     }49 50     public void setMenuId(Long menuId) {51         this.menuId = menuId;52     }53 54     public String getMenuCreateTime() {55         return menuCreateTime;56     }57 58     public void setMenuCreateTime(String menuCreateTime) {59         this.menuCreateTime = menuCreateTime;60     }61 62     public Long getStoreId() {63         return storeId;64     }65 66     public void setStoreId(Long storeId) {67         this.storeId = storeId;68     }69 70 }
View Code

menuTableDao.java文件就是执行的对表进行增删改查的封装。

  1 package com.ShanFuBao.SmartCall.menu;  2   3 import android.database.Cursor;  4 import android.database.sqlite.SQLiteDatabase;  5 import android.database.sqlite.SQLiteStatement;  6   7 import de.greenrobot.dao.AbstractDao;  8 import de.greenrobot.dao.Property;  9 import de.greenrobot.dao.internal.DaoConfig; 10  11 import com.ShanFuBao.SmartCall.menu.MenuTable; 12  13 // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. 14 /**  15  * DAO for table MENU_TABLE. 16 */ 17 public class MenuTableDao extends AbstractDao<MenuTable, Long> { 18  19     public static final String TABLENAME = "MENU_TABLE"; 20  21     /** 22      * Properties of entity MenuTable.<br/> 23      * Can be used for QueryBuilder and for referencing column names. 24     */ 25     public static class Properties { 26         public final static Property MenuName = new Property(0, String.class, "menuName", false, "MENU_NAME"); 27         public final static Property MenuType = new Property(1, Integer.class, "menuType", false, "MENU_TYPE"); 28         public final static Property MenuId = new Property(2, Long.class, "menuId", true, "MENU_ID"); 29         public final static Property MenuCreateTime = new Property(3, String.class, "menuCreateTime", false, "MENU_CREATE_TIME"); 30         public final static Property StoreId = new Property(4, Long.class, "storeId", false, "STORE_ID"); 31     }; 32  33  34     public MenuTableDao(DaoConfig config) { 35         super(config); 36     } 37      38     public MenuTableDao(DaoConfig config, DaoSession daoSession) { 39         super(config, daoSession); 40     } 41  42     /** Creates the underlying database table. */ 43     public static void createTable(SQLiteDatabase db, boolean ifNotExists) { 44         String constraint = ifNotExists? "IF NOT EXISTS ": ""; 45         db.execSQL("CREATE TABLE " + constraint + "'MENU_TABLE' (" + // 46                 "'MENU_NAME' TEXT," + // 0: menuName 47                 "'MENU_TYPE' INTEGER," + // 1: menuType 48                 "'MENU_ID' INTEGER PRIMARY KEY AUTOINCREMENT ," + // 2: menuId 49                 "'MENU_CREATE_TIME' TEXT," + // 3: menuCreateTime 50                 "'STORE_ID' INTEGER);"); // 4: storeId 51     } 52  53     /** Drops the underlying database table. */ 54     public static void dropTable(SQLiteDatabase db, boolean ifExists) { 55         String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "'MENU_TABLE'"; 56         db.execSQL(sql); 57     } 58  59     /** @inheritdoc */ 60     @Override 61     protected void bindValues(SQLiteStatement stmt, MenuTable entity) { 62         stmt.clearBindings(); 63   64         String menuName = entity.getMenuName(); 65         if (menuName != null) { 66             stmt.bindString(1, menuName); 67         } 68   69         Integer menuType = entity.getMenuType(); 70         if (menuType != null) { 71             stmt.bindLong(2, menuType); 72         } 73   74         Long menuId = entity.getMenuId(); 75         if (menuId != null) { 76             stmt.bindLong(3, menuId); 77         } 78   79         String menuCreateTime = entity.getMenuCreateTime(); 80         if (menuCreateTime != null) { 81             stmt.bindString(4, menuCreateTime); 82         } 83   84         Long storeId = entity.getStoreId(); 85         if (storeId != null) { 86             stmt.bindLong(5, storeId); 87         } 88     } 89  90     /** @inheritdoc */ 91     @Override 92     public Long readKey(Cursor cursor, int offset) { 93         return cursor.isNull(offset + 2) ? null : cursor.getLong(offset + 2); 94     }     95  96     /** @inheritdoc */ 97     @Override 98     public MenuTable readEntity(Cursor cursor, int offset) { 99         MenuTable entity = new MenuTable( //100             cursor.isNull(offset + 0) ? null : cursor.getString(offset + 0), // menuName101             cursor.isNull(offset + 1) ? null : cursor.getInt(offset + 1), // menuType102             cursor.isNull(offset + 2) ? null : cursor.getLong(offset + 2), // menuId103             cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // menuCreateTime104             cursor.isNull(offset + 4) ? null : cursor.getLong(offset + 4) // storeId105         );106         return entity;107     }108      109     /** @inheritdoc */110     @Override111     public void readEntity(Cursor cursor, MenuTable entity, int offset) {112         entity.setMenuName(cursor.isNull(offset + 0) ? null : cursor.getString(offset + 0));113         entity.setMenuType(cursor.isNull(offset + 1) ? null : cursor.getInt(offset + 1));114         entity.setMenuId(cursor.isNull(offset + 2) ? null : cursor.getLong(offset + 2));115         entity.setMenuCreateTime(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));116         entity.setStoreId(cursor.isNull(offset + 4) ? null : cursor.getLong(offset + 4));117      }118     119     /** @inheritdoc */120     @Override121     protected Long updateKeyAfterInsert(MenuTable entity, long rowId) {122         entity.setMenuId(rowId);123         return rowId;124     }125     126     /** @inheritdoc */127     @Override128     public Long getKey(MenuTable entity) {129         if(entity != null) {130             return entity.getMenuId();131         } else {132             return null;133         }134     }135 136     /** @inheritdoc */137     @Override    138     protected boolean isEntityUpdateable() {139         return true;140     }141     142 }
View Code

还有两个文件没有介绍,分别是DaoMaster.java和DaoSessi.java文件,这两个文件很重要,也是daoGenerator工程自动生成的,

daoMaster文件是干嘛的,看下图:

明白了吗?他知道你创建的所有的dao对象,对,通过他,你可以得到你想要操作的表格对应的对象。

daoSession文件又是干嘛的??通过session你可以得到和删除dao对象。

到这里应该明白了:

我们以往通过sql去创建的表格,在这里通过daoGennerator的java工程来完成

②我们通过sql对表格的操作,可以通过daoMaser得到表格,然后通过daoSession获取到具体的对象,这样就完成了数据库到对象的映射,对应了orm的主题。

2、避开sql使用dao来执行表操作

OpenHelper helper = new DaoMaster.DevOpenHelper(context,"test_db", null);

daoMaster = new DaoMaster(helper.getWritableDatabase());

daoSession = daoMaster.newSession();

menuTableDao = daoSession.getMenuTableDao();

menuDetailDao = daoSession.getMenuDetailDao();

一些简单的使用方法如下

 1 //查看对应的menuTable表是否存在 2             QueryBuilder qb = menuDetailDao.queryBuilder(); 3             qb.where(MenuDetailDao.Properties.MenuDateId.eq(CommonUtils.getNowDateString()+menu_type)); 4             List listResult = qb.list(); 5              6             QueryBuilder qbAll = menuDetailDao.queryBuilder(); 7             qbAll.orderAsc(MenuDetailDao.Properties.MenuDateId); 8             List listResultAll = qbAll.list(); 9             for(int k =0;k<listResultAll.size();k++)10             {11                 MenuDetail menu_detail_entity = (MenuDetail) listResultAll.get(k);12                 CommonUtils.LogWuwei(tag, menu_detail_entity.getName()+"   "+13                         menu_detail_entity.getMenuDateId());14             }15             
View Code

3、自学的时候借阅了很多资料,如果恰巧你刚接触到,你会用到的:

1、http://my.oschina.net/cheneywangc/blog/196354 greendao讲义,开源中国上的好文章

2、http://www.sllbeta.com/android/3/

3、http://greendao-orm.com/ 这个是官网,最权威的网站了

4、我是从哪里听说到这个greendao的呢,这得益于github上一个开源工程,在这个开源工程中,汇聚了android开发过程中开发者都有可能用到的,见下网址:

https://github.com/Trinea/android-open-project

5、http://blog.csdn.net/lan120576664/article/details/36204833(适合新手看看)

4、赠送所有开发者一句话,多看官网文档,如果需要看官网api,推荐一个工具,就是mac下的dash,dash支持代码片段和官网api(api包括很多,绝对是你想象不到的)

更多相关文章

  1. Android读取工程根目录下文件内容
  2. android 杂
  3. Android(安卓)中自定义控件和属性(attr.xml,declare-styleable,T
  4. Android开发工程师 技能要求
  5. android studio 编译高级篇-gradle多版本编译,定制任务
  6. 《第一行代码--android》笔记·第一章:认识资源
  7. 安卓ListView详解
  8. NDK 之大门开启
  9. 雷电android game学习笔记(1)

随机推荐

  1. Android调用WebService系列之对象构建传
  2. Android(安卓)ViewDragHelper实现QQ侧滑
  3. Appium Android(安卓)Bootstrap源码分析
  4. Android(安卓)从相册中选择照片并返回
  5. android 通过setalpha设置透明度 无效及3
  6. Developer分析Android新平台Honeycomb的
  7. 学无止尽
  8. Android(安卓)HandlerThread 的使用及其D
  9. android绝对布局
  10. Android中Context的详细使用