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();

页面:

主页面

模糊查询

源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值