移动应用研发

GreenDao集成使用

2018-08-18  本文已影响10人  a9eb75a07212

1、在项目中引入greendao,配置如下

dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:27.1.1'

    implementation 'com.android.support.constraint:constraint-layout:1.1.2'

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:design:27.1.1'

    implementation 'org.greenrobot:greendao:3.2.2' // add library

    implementation 'org.greenrobot:greendao-generator:3.2.2'

}

2、在model级别的gradle中配置greendao,需要配置两个地方,配置如下

apply plugin: 'org.greenrobot.greendao'

android {

  .....

}

buildscript {

    repositories {

        mavenCentral()

    }

    dependencies {

        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'

    }

}

3、在model级别下的gradle中配置greendao的版本等信息,配置如下

greendao {

    //版本(每次修改数据库需要升级,每次修改都需要将版本号进行升级)

    schemaVersion 4

    // 生成文件包名(一般为app包名+生成文件的文件夹名)

    daoPackage 'mycode.com.mycode.greendao.gen'

    //生成文件路径

    targetGenDir 'src/main/java'

}

buildscript {

    ...

}

4、新建实体UserInfo,make项目即可生成对应文件

@Entity

public class UserInfo implements Parcelable {

    @Id

    private Long id;

    private String name;

    @Generated(hash = 574809764)

    public UserInfo(Long id, String name) {

        this.id = id;

        this.name = name;

    }

    @Generated(hash = 1279772520)

    public UserInfo() {

    }

    protected UserInfo(Parcel in) {

        if (in.readByte() == 0) {

            id = null;

        } else {

            id = in.readLong();

        }

        name = in.readString();

    }

    public static final Creator CREATOR = new Creator() {

        @Override

        public UserInfo createFromParcel(Parcel in) {

            return new UserInfo(in);

        }

        @Override

        public UserInfo[] newArray(int size) {

            return new UserInfo[size];

        }

    };

    public Long getId() {

        return this.id;

    }

    public void setId(Long id) {

        this.id = id;

    }

    public String getName() {

        return this.name;

    }

    public void setName(String name) {

        this.name = name;

    }

    @Override

    public int describeContents() {

        return 0;

    }

    @Override

    public void writeToParcel(Parcel parcel, int i) {

        if (id == null) {

            parcel.writeByte((byte) 0);

        } else {

            parcel.writeByte((byte) 1);

            parcel.writeLong(id);

        }

        parcel.writeString(name);

    }

}

5、在项目的Application中创建有关数据库的操作类,配置如下

public class MyApplication extends Application{

    private DaoMaster.DevOpenHelper mHelper;

    private SQLiteDatabase db;

    private DaoMaster mDaoMaster;

    private DaoSession mDaoSession;

    //静态单例

    public static MyApplication instances;

    @Override

    public void onCreate() {

        super.onCreate();

        instances = this;

        setDatabase();

    }

    public static MyApplication getInstances(){

        return instances;

    }

    /**

    * 设置greenDao

    */

    private void setDatabase() {

        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。

        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。

        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。

        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。

        mHelper = new DaoMaster.DevOpenHelper(this, "sport-db", null);

        db = mHelper.getWritableDatabase();

        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。

        mDaoMaster = new DaoMaster(db);

        mDaoSession = mDaoMaster.newSession();

    }

    public DaoSession getDaoSession() {

        return mDaoSession;

    }

    public SQLiteDatabase getDb() {

        return db;

    }

}

6、插入

UserInfoDao userInfoDao = MyApplication.getInstances().getDaoSession().getUserInfoDao();

UserInfo userInfo = new UserInfo();

userInfo.setName("aaaaaaaaa");

userInfoDao.insert(userInfo);

     查询

UserInfoDao userInfoDao = MyApplication.getInstances().getDaoSession().getUserInfoDao();

List list = userInfoDao.loadAll();

其他方法请自行查看API。

上一篇下一篇

猜你喜欢

热点阅读