GreenDao 學習

源碼

Eclipse:

1、新建Android 項目 (GreenDaoEclipseDemo)
2、複製freemarker-2.3.20.jargreendao-generator-1.3.0.jargreendao-1.3.7.jar(3個)或者freemarker-2.3.23.jargreendao-generator-2.0.0.jar(2個)到libs目錄下
3、新建類:com.doris.greendaoeclipsedemo.test.Test.java

package com.doris.greendaoeclipsedemo.test;

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Property;
import de.greenrobot.daogenerator.Schema;

public class Test {

    public static void main(String[] args) {

        Schema schema = new Schema(1, "com.doris.greendaoeclipsedemo.dao");
        // 學生
        Entity student = schema.addEntity("Student"); // 參數首字母必須大寫
        student.addIdProperty(); // id
        student.addStringProperty("name"); // 姓名
        student.addIntProperty("age"); // 性別
        Property classId= student.addLongProperty("classId").getProperty();
        Property cardId = student.addLongProperty("cardId").getProperty();
        // 學生證
        Entity card = schema.addEntity("Card");
        card.addIdProperty(); 
        card.addStringProperty("cardNumber"); // 證件號碼
        // 一對一
        student.addToOne(card, cardId);
        // 班級
        Entity clas = schema.addEntity("Clas");
        clas.addIdProperty(); 
        clas.addStringProperty("name");
        // 一對多
        student.addToOne(clas, classId);
        clas.addToMany(student, classId).setName("students");
        try {
            new DaoGenerator().generateAll(schema, "../GreenDaoEclipseDemo/src");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

運行:
運行成功

刷新項目:
自動生成的類

4、基本的操作數據

// 增
private void insertStudent() {
    Student student = new Student();
    student.setName("張三");
    student.setAge(23);
    Card card = new Card();
    card.setCardNumber("101");
    cardDao.insert(card);
    // 查詢班級是否存在
    Clas clas = clasDao.queryBuilder().where(ClasDao.Properties.Name.eq("1")).unique();
    if(clas == null ){
        clas = new Clas();
        clas.setName("1");
        clasDao.insert(clas);
    }
    student.setCard(card);
    student.setClas(clas);
    studentDao.insert(student);
}

// 刪
private void delete(Student student, Clas clas){
    cardDao.delete(student.getCard());
    studentDao.delete(student);

    for(Student student : clas.getStuents()){
        cardDao.delete(student.getCard());
        studentDao.delete(student);
    }
    clasDao.delete(clas);
}

// 改
public void updateStudent(Student studen) {
    student.setName("張三丰");
    student.setAge(33);
    student.getCard().setCardNumber(100);
    cardDao.update(student.getCard());
    // 查詢班級是否存在
    Clas clas = clasDao.queryBuilder().where(ClasDao.Properties.Name.eq("2")).unique();
        if(clas == null ){
            clas = new Clas();
            clas.setName(studentClass);
            clasDao.insert(clas);
        }else{
            clas.setName(studentClass);
            clasDao.update(clas);
        }
        student.setClas(clas);
        studentDao.update(student);
}

// 查所有
private void queryAll(){
    List<Student> students = studentDao.queryBuilder().list();
    List<Clas> classList = clasDao.queryBuilder().list();
    List<Card> cards = cardDao.queryBuilder().list();
}

Android Studio:

1、新建Android項目 (GreenDaoStudioDemo)
2、
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

3、新建Java Library (GreenDaoStudioDemoLibrary)
這裏寫圖片描述

這裏寫圖片描述

4、和2步驟一樣,給GreenDaoStudioDemoLibrary添加依賴
這裏寫圖片描述

5、GreenDaoStudioDemoLibrary

build.gradle

apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'java.Test'

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'de.greenrobot:greendao-generator:2.1.0'
}

com.example.Test.java

package com.example;

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Property;
import de.greenrobot.daogenerator.Schema;

public class Test {

    public static void main(String[] args){

        Schema schema = new Schema(1, "com.doris.greendaostudiodemo.dao");
        // 學生
        Entity student = schema.addEntity("Student"); // 參數首字母必須大寫
        student.addIdProperty(); // id
        student.addStringProperty("name"); // 姓名
        student.addIntProperty("age"); // 性別
        Property classId= student.addLongProperty("classId").getProperty();
        Property cardId = student.addLongProperty("cardId").getProperty();
        // 學生證
        Entity card = schema.addEntity("Card");
        card.addIdProperty();
        card.addStringProperty("cardNumber"); // 證件號碼
        // 一對一
        student.addToOne(card, cardId);
        // 班級
        Entity clas = schema.addEntity("Clas");
        clas.addIdProperty();
        clas.addStringProperty("name");
        // 一對多
        student.addToOne(clas, classId);
        clas.addToMany(student, classId).setName("students");
        try {
            new DaoGenerator().generateAll(schema,"app/src/main/java");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("ok");

    }
}

這裏寫圖片描述

這裏寫圖片描述

6、基本操作和eclipse差不多

查詢:

方法 說明
list() 直接取數據並且緩存在內存中
listLazy() 不直接取數據,使用的時候取,並且緩存在內存中,必須close
listLazyUncached() 不直接取數據,使用的時候取,必須close
listIterator() 不直接取數據,自己遍歷,必須close

條件查詢:

1、eq:

 List<Student> students = studentDao.queryBuilder()
                        .where(StudentDao.Properties.Name.eq("張三"))).list();

2、like:

List<Student> students = studentDao.queryBuilder().where(StudentDao.Properties.Name.like("%張%"))).list();

3、between:

List<Student> students = studentDao.queryBuilder().where(StudentDao.Properties.Age.between(20, 25)))).list();

4、> gt 和 < lt:

List<Student> students = studentDao.queryBuilder().where(StudentDao.Properties.Age.gt(20)list();
List<Student> students = studentDao.queryBuilder().where(StudentDao.Properties.Age.lt(25)list();

5、>= ge 和 <= le:

List<Student> students = studentDao.queryBuilder().where(StudentDao.Properties.Age.ge(20)list();
List<Student> students = studentDao.queryBuilder().where(StudentDao.Properties.Age.le(25)list();

7、排序

// 升序
List<Student> students = studentDao.queryBuilder().orderAsc(StudentDao.Properties.Age).list();
// 降序
List<Student> students = studentDao.queryBuilder().orderDesc(StudentDao.Properties.Age).list();

8、多線程:

    final Query<Student> query = studentDao.queryBuilder().build();
        new Thread(){
            @Override
            public void run() {
                students = query.forCurrentThread().list();
            }
        }.start();

……

SQL查詢:

List<Student> students = studentDao.queryBuilder().where(new WhereCondition.StringCondition("CLASS_ID IN (SELECT _ID FROM CLAS WHERE NAME LIKE '%"+ studentClass + "%' )").list();

頁面:

主頁面

模糊查詢

源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章