greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询;
创建java工程用来生成DaoMaster,DaoSession,DAO文件,实体文件;
 DaoMaster:一看名字就知道它是Dao中的最大的官了。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架; DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法; XXXDao:实际生成的某某DAO类,通常对应具体的java类,比如NoteDao等。其有更多的权限和方法来操作数据库元素; XXXEntity:持久的实体对象。通常代表了一个数据库row的标准java properties;
注:生成一对一或一对多表关系请参考这个 链接
public class MyKBang { public static void main(String args[]) throws Exception { //生成Greendao相关文件,需要参数版本号,生成bean类放的目录 //数据库变化重新生成,版本号需要加1或都大于之前 Schema schema = new Schema(1, "com.kbang.convenientlife.bean"); //设置一下生成的三个java文件(DaoMaster,DaoSession,***Dao)的目录 schema.setDefaultJavaPackageDao("com.kbang.convenientlife.greendao"); initUserBean(schema); //生成到那个路径 new DaoGenerator().generateAll(schema, "../android_kb_shangchao/kbang/src/main/java"); } /** * 生成实体配置 * 1.添加属性支持基本数据类型 * @param schema */ private static void initUserBean(Schema schema) { //用户信息表名 Entity userBean = schema.addEntity("UserInfo"); // 表重命名 //userBean.setTableName("phone"); //用来实现序列化的接口 userBean.implementsSerializable(); //方式一 建立自增的主键 //userBean.addLongProperty("id").primaryKey().index().autoincrement(); //方式二 建立自增的主键 userBean.addIdProperty(); userBean.addStringProperty("code"); userBean.addStringProperty("os"); userBean.addStringProperty("osVersion"); userBean.addStringProperty("name"); userBean.addStringProperty("phoneLocation"); userBean.addStringProperty("attachmentPath"); userBean.addStringProperty("cityId"); userBean.addStringProperty("sex"); userBean.addStringProperty("attachmentId"); } }将greenDAO工程生成文件拷贝到android项目中,存放路径跟生成路径保持一致; 在android项目build.gradle引入依赖库:
compile 'de.greenrobot:greendao-generator:2.1.0' compile 'de.greenrobot:greendao:2.1.0'创建简单类测试一下:
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "Test-db", null); db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); noteDao = daoSession.getNoteDao(); UserInfo note = new UserInfo(); userInfo.setName("kais"); userInfo.setSex("男"); noteDao.insert(note); //插入数据 noteDao.deleteByKey(id);//删除数据为升级数据库在这自己继承封装DaoMaster.DevOpenHelper代码如下: DatabaseHelper.java
public class DatabaseHelper extends DaoMaster.OpenHelper { public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { super(context, name, factory); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion){ case 1: break; } } }DatabaseLoader.java
public class DatabaseLoader { //数据库名称 private static final String DATABASE_NAME = "Test-db"; //用来获取Dao的 private static DaoSession daoSession; /** * 在Application中调用,初始化数据库 * * @param context */ public static void init(Context context) { //使用自定义的OpenHelper的到SQLiteDatabase DatabaseHelper helper = new DatabaseHelper(context, DATABASE_NAME, null); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } public static DaoSession getDaoSession() { return daoSession; } }