Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android ORM框架之GreenDAO(一) 初識

Android ORM框架之GreenDAO(一) 初識

編輯:關於Android編程

做Android開發,避免不了要和SQLite打交道,如果不使用任何框架,直接使用它時,我們往往需要做許多額外的工作,像編寫 SQL 語句與解析查詢結果等,那麼是比較麻煩的!目前市面都出現好多比較好用的ORM數據庫框架,例如郭神出的LitePal,OrmLite,GreenDAO等。那麼今天就來介紹一下GreenDAO的有關使用。

一、GreenDAO概述。

 

\

簡單的講,GreenDAO是一個將對象映射到 SQLite 數據庫中的輕量且快速的 ORM 解決方案。

GreenDAO是一個可以幫助Android開發者快速將Java對象映射到SQLite數據庫的表單中的ORM解決方案,通過使用一個簡單的面向對象API,開發者可以對Java對象進行存儲、更新、刪除和查詢。

1.GreenDAO官網,http://greendao-orm.com/。

2.項目地址,https://github.com/greenrobot/greenDAO。

GreenDAO設計的主要目標

(1). 一個精簡的庫
(2). 性能最大化
(3).內存開銷最小化
(4).易於使用的 APIs
(5).對 Android 進行高度優化

3.核心類說明

\

(1).DaoMaster 保存了數據庫對象和管理DAO類的classes,其提供了一些靜態方法創建和刪除表,內部類OpenHelper和DevOpenHelper 實現了SQLiteOpenHelper並創建數據庫的框架。

(2)DaoSession 管理所有可用的DAO對象,可以通過getter方法獲得。DaoSession還提供了一些通用的持久性方法比如插入、加載、更新,刷新和刪除實體。

(3).EntityDao 數據訪問對象,每一個實體類都有對應的greenDAO對象。

(4).Entity 實體類對象。

二、配置GreenDAO框架。

目前GreenDAO已經更新到3.*,新版本的使用方法和GreenDAO2.*有所不同,本文基於的是GreenDAO2.*,需要大家注意!

1.如果你使用的Android Studio,那麼配置使用GreenDAO很簡單,只需要在Gradle文件中加入依賴,

 

  compile "de.greenrobot:greendao:*"

 

就可以了!Gradle會幫你遠程下載這個GreenDAO框架。

2.如果你使用的還是Eclipse,那麼就需要下載jar,導入到項目即可使用,你可以在http://search.maven.org中搜索以下三個jar下載,

greendao-generator.jar,freemarker.jar,greendao.jar

三、創建Java工程,生成DAO 文件。

如果你使用的還是Eclipse需要創建一個Java工程,該工程主要用來生成生成數據庫表對應的java實體和處理業務的dao層代碼。需要導入包greendao-generator.jar和freemarker.jar。下面,是使用Android Studio實現的。

 

前提

打開Android Studio,新建一個Project,在module中‘src/main’目錄下,新建一個目錄,名稱為‘java-gen’,

\

\

然後需要在該module的build.gradle中,加入如下代碼,

 

  
  android {
  ...
   sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
        }
    }
  ...
  }
  
  dependencies {
   ...
   compile 'de.greenrobot:greendao:2.1.0'
}

1. 新建一個Java工程。在Project右鍵,“NEW-Module”,然後在頁面中選擇‘java Library’,

\

2.在該java工程的build.gradle中,需要引入依賴,

 

  compile 'de.greenrobot:greendao-generator:2.1.0'
3. 新建一個類 ExampleDaoGenerator,具體代碼如下,

 

 

  public static void main(String[] args) throws Exception {
        //第一個參數是數據庫版本號,第二個參數是包的根目錄的包
        int version=1;
        String defaultPackage="cn.xinxing.model";
        Schema schema = new Schema(version, defaultPackage);
        //指定自動生成的dao對象的包名,不指定則都DAO類生成在defaultPackage包中
        schema.setDefaultJavaPackageDao("cn.xinxing.dao");
        //添加實體
        addEntity(schema);
        addNote(schema);
        try {
            //第二個參數是src-gen文件夾路徑
            String outDir="E:/as_workspace/test/greendaotest/src/main/java-gen";
            new DaoGenerator().generateAll(schema,outDir);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void addEntity(Schema schema) {
        //一個實體(類)就關聯到數據庫中的一張表
        Entity entity = schema.addEntity("Student");
        //指定表名,如不指定,表名則為 Entity(即實體類名)
        entity.setTableName("student");
        //給實體類中添加屬性(即給表中添加字段)
        entity.addIdProperty().autoincrement();//添加Id,自增長
        entity.addStringProperty("name").notNull();//添加String類型的name,不能為空
        entity.addIntProperty("age");//添加Int類型的age
        entity.addDoubleProperty("score");//添加Double的score
    }


    private static void addNote(Schema schema) {
        // 一個實體(類)就關聯到數據庫中的一張表,此處表名為「Note」(既類名)
        Entity note = schema.addEntity("Note");
        // 指定表名,如不指定,表名則為實體類名
         note.setTableName("note");
        // greenDAO 會自動根據實體類的屬性值來創建表字段,並賦予默認值
        //給實體類中添加屬性(即給表中添加字段)
        note.addIdProperty().autoincrement();//添加Id,自增長
        note.addStringProperty("text").notNull();//不能為空
        note.addStringProperty("comment");
        note.addDateProperty("date");
    }
說明,

 

(1).創建模型或者說創建表 需要用到Schema類(數據庫對象的集合),

 

// 第一個參數是數據庫版本號,第二個參數是根目錄的包路徑
  int version=1;
  String defaultPackage="cn.xinxing.model";
  Schema schema = new Schema(version, defaultPackage);
(2).指定自動生成的dao對象的包名,不指定則都DAO類生成在defaultPackage包中
    schema.setDefaultJavaPackageDao("cn.xinxing.dao");
(3).添加實體(通過實體類創建出表以及字段)
  private static void addEntity(Schema schema) {
        //一個實體(類)就關聯到數據庫中的一張表
        Entity entity = schema.addEntity("Student");
        //指定表名,如不指定,表名則為 Entity(即實體類名)
        entity.setTableName("student");
        //給實體類中添加屬性(即給表中添加字段)
        entity.addIdProperty().autoincrement();//添加Id,自增長
        entity.addStringProperty("name").notNull();//添加String類型的name,不能為空
        entity.addIntProperty("age");//添加Int類型的age
        entity.addDoubleProperty("score");//添加Double的score
    }

(4). 生成DAO,

 

            String outDir="E:/as_workspace/test/greendaotest/src/main/java-gen";
            new DaoGenerator().generateAll(schema,outDir);  //第二個參數是src-gen文件夾相對路徑

 

寫完以上代碼後,運行該java工程,在控制台如果輸入如下信息,說明成功了,如果出錯,請按照錯誤提示處理。

 

\

然後我們打開java-gen目錄,便會看到

\

至此,生成DAO已經完成了,下面就看如何使用這些文件,

 

四、使用。

為了管理以及使用方便,我們創建一個DbHelper 類,通過它來管理有關數據庫操作。

DbHelper 的具體實現如下,

 

public class DbHelper {

    private static DbHelper instance;

    private DaoMaster.DevOpenHelper helper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private StudentDao mStunentDao;
   

    public static synchronized DbHelper getInstance(Context context) {
        if (instance == null)
            instance = new DbHelper(context);
        return instance;
    }

    private DbHelper(Context context) {
        helper = new DaoMaster.DevOpenHelper(context, "xinxing-db", null);
        db = helper.getWritableDatabase();
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
        mStunentDao = mDaoSession.getStudentDao();
        mStunentDao.getDatabase();
    }

    /**
     * 向student表中插入一條數據
     *
     * @param student
     */
    public void insertStudent(Student student) {
        mStunentDao.insert(student);
    }

   

    /**
     * 向student表中插入多條數據
     *
     * @param list
     */
    public void insertStudent(List list) {
        for (Student s : list) {
            mStunentDao.insert(s);
        }
    }

    /**
     * 獲取所有的student表中數據
     *
     * @return
     */
    public List getAllStudents() {
        return mStunentDao.loadAll();
    }



    public void closeDb() {
        if (db.isOpen())
            db.close();
    }
}

 

上面是簡單操作數據庫的方法,下面在Activity中編寫測試代碼,

 

 

public class MainActivity extends AppCompatActivity {

    Button btn;
    TextView tv;
    Student mStudent;
    StringBuffer stringBuffer;
    int i = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DbHelper.getInstance(MainActivity.this).deleteAllStudent();
        stringBuffer = new StringBuffer();
        btn = (Button) findViewById(R.id.addData);
        tv = (TextView) findViewById(R.id.tv);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                i++;
                stringBuffer.setLength(0);
                mStudent=new Student();
                mStudent.setName("job" + i);
                mStudent.setAge(i);
                mStudent.setScore(100d-i);
                DbHelper.getInstance(MainActivity.this).insertStudent(mStudent);
                List list = DbHelper.getInstance(MainActivity.this).getAllStudents();
                for (Student s : list) {
                    stringBuffer.append(s.getName() + s.getAge() + s.getScore()+"\n");
                }
                tv.setText(stringBuffer.toString());
            }
        });
    }
}
下面是運行後點擊多次按鈕的效果截圖,

 

\

下面是數據庫中的student表數據截圖,

\
 


至此,使用GreenDAO創建數據庫以及表,插入數據,顯示數據都已經成功了!是不是很簡單呢!偷笑下篇文章講解使用GreenDAO來做一些復雜的查詢操作以及更新!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved