您的位置:首页 > 移动开发 > Android开发

GreenDao 3.0 学习和实践

2016-08-14 20:40 435 查看
1.https://github.com/greenrobot/greenDAO

 注意:顺序尽量别搞错。严格按照文档去集成,否则找不到错误原因纠结死。 好多代码都是自动生成,

apply plugin: 'com.android.application'

buildscript {

    repositories {

        mavenCentral()

    }

    dependencies {

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

    }

}

android {

    compileSdkVersion 23

    buildToolsVersion "24.0.0"

    defaultConfig {

        applicationId "com.yjl.greendaodemo"

        minSdkVersion 15

        targetSdkVersion 23

        versionCode 1

        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }

}

apply plugin: 'org.greenrobot.greendao'

greendao {

    schemaVersion 2

}

dependencies {

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

    compile 'com.android.support:appcompat-v7:23.4.0'

    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'

    testCompile 'junit:junit:4.12'

    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'

    androidTestCompile 'com.android.support.test:runner:0.5'

    androidTestCompile 'com.android.support:support-annotations:23.4.0'

    compile 'org.greenrobot:greendao:3.1.0'

}

2.创建User 以后build 会自动生成对应的类。

package com.yjl.greendaodemo.db;

import org.greenrobot.greendao.DaoException;

import org.greenrobot.greendao.annotation.Entity;

import org.greenrobot.greendao.annotation.Generated;

import org.greenrobot.greendao.annotation.Id;

import org.greenrobot.greendao.annotation.ToMany;

import org.greenrobot.greendao.annotation.Transient;

import java.util.List;

/**

 * Created by yujunlong on 2016/8/14.

 */

@Entity

public class User {

    @Id

    private Long id;

    private String name;

    @Transient

    private int tempUsageCount; // not persisted

    // getters and setters for id and user ...

}

3.写工具类DBManager

package com.yjl.greendaodemo.db;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

/**

 * Created by yujunlong on 2016/8/14.

 */

public class DBManager {

    private final static String dbName = "test_db";

    private static DBManager mInstance;

    private DaoMaster.DevOpenHelper openHelper;

    private Context context;

    public DBManager(Context context) {

        this.context = context;

        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);

    }

    /**

     * 获取单例引用

     *

     * @param context

     * @return

     */

    public static DBManager getInstance(Context context) {

        if (mInstance == null) {

            synchronized (DBManager.class) {

                if (mInstance == null) {

                    mInstance = new DBManager(context);

                }

            }

        }

        return mInstance;

    }

    /**

     * 获取可读数据库

     */

    private SQLiteDatabase getReadableDatabase() {

        if (openHelper == null) {

            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);

        }

        SQLiteDatabase db = openHelper.getReadableDatabase();

        return db;

    }

    /**

     * 获取可写数据库

     */

    private SQLiteDatabase getWritableDatabase() {

        if (openHelper == null) {

            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);

        }

        SQLiteDatabase db = openHelper.getWritableDatabase();

        return db;

    }

    public DaoSession getDaoSessionWritable() {

        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());

        DaoSession daoSession = daoMaster.newSession();

        return daoSession;

    }

    public DaoSession getDaoSessionReadable() {

        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());

        DaoSession daoSession = daoMaster.newSession();

        return daoSession;

    }

}

4.写User操作工具类UserDbUtil

package com.yjl.greendaodemo.db;

import android.content.Context;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

/**

 * Created by yujunlong on 2016/8/14.

 */

public class UserDbUtil {

    /**

     * 插入一条记录

     *

     * @param user

     */

    public static void insertUser(Context c, User user) {

        UserDao userDao = DBManager.getInstance(c).getDaoSessionWritable().getUserDao();

        userDao.insert(user);

    }

    /**

     * 插入用户集合

     *

     * @param users

     */

    public static void insertUserList(Context c,List<User> users) {

        if (users == null || users.isEmpty()) {

            return;

        }

        UserDao userDao = DBManager.getInstance(c).getDaoSessionWritable().getUserDao();

        userDao.insertInTx(users);

    }

    /**

     * 删除一条记录

     *

     * @param user

     */

    public static void deleteUser(Context c,User user) {

        UserDao userDao = DBManager.getInstance(c).getDaoSessionWritable().getUserDao();

        userDao.delete(user);

    }

    /**

     * 更新一条记录

     *

     * @param user

     */

    public static void updateUser(Context c,User user) {

        UserDao userDao = DBManager.getInstance(c).getDaoSessionWritable().getUserDao();

        userDao.update(user);

    }

    /**

     * 查询用户列表

     */

    public  static List<User> queryUserList(Context c) {

        UserDao userDao = DBManager.getInstance(c).getDaoSessionReadable().getUserDao();

        QueryBuilder<User> qb = userDao.queryBuilder();

        List<User> list = qb.list();

        return list;

    }

    /**

     * 查询用户列表

     */

    public static List<User> queryUserList(Context c,String name) {

        UserDao userDao = DBManager.getInstance(c).getDaoSessionReadable().getUserDao();

        QueryBuilder<User> qb = userDao.queryBuilder();

        qb.where(UserDao.Properties.Name.eq(name));

        List<User> list = qb.list();

        return list;

    }

}

5.创建GoodBean以后build,会生成相应的类和代码

@Entity

public class GoodsBean {

    @Id

    private Long id;

    private long ownerId;

    private String goodName;

    private int price;

}

6. 重新编辑User一对多然后build,会再次生成代码,但是只有一个getGbs() 方法,没有setGbs,纠结了好久最后才搞明白。只需要GoodBean setOwnerId(id) id就是user--》id 然后用getGbs就拿到gbs了

@Entity

public class User {

    @Id

    private Long id;

    private String name;

    @ToMany(referencedJoinProperty = "ownerId")

    private List<GoodsBean> gbs;

    @Transient

    private int tempUsageCount; // not persisted

    // getters and setters for id and user ...

}

7.最后操作代码

package com.yjl.greendaodemo;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import com.yjl.greendaodemo.db.GoodDbUtil;

import com.yjl.greendaodemo.db.GoodsBean;

import com.yjl.greendaodemo.db.User;

import com.yjl.greendaodemo.db.UserDbUtil;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

//        User user = new User();

//        user.setName("李四");

//

//        UserDbUtil.insertUser(this,user);

        List<User> users = UserDbUtil.queryUserList(this);

        List<GoodsBean> gbs = GoodDbUtil.queryGoodsBeanList(this);

      for (User userr : users) {

         // userr.refresh();

          if (userr.getId() == 2) {

              List<GoodsBean> gbs1 = userr.getGbs();

              Log.e(TAG,"gbs1.size()=="+gbs1.size());

          }

////            if (userr.getId() == 1) {

////                UserDbUtil.deleteUser(this,userr);

//  //          }

//            if (userr.getId() == 2) {

////                userr.setName("李四");

////                UserDbUtil.updateUser(this,userr);

//                GoodsBean gb = new GoodsBean();

//                gb.setGoodName("苹果");

//                gb.setPrice(10);

//                gb.setOwnerId(userr.getId());

//                GoodDbUtil.insertGoodsBean(this,gb);

//                gb = new GoodsBean();

//                gb.setGoodName("西瓜");

//                gb.setPrice(8);

//                gb.setOwnerId(userr.getId());

//                GoodDbUtil.insertGoodsBean(this,gb);

//                gb = new GoodsBean();

//                gb.setGoodName("黄瓜");

//                gb.setPrice(6);

//                gb.setOwnerId(userr.getId());

//                GoodDbUtil.insertGoodsBean(this,gb);

//                userr.resetGbs();

//            }

      }

        Log.e(TAG,"users.size()=="+users.size());

       // Log.e(TAG,"gbs.size()=="+gbs.size());

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android sqilite greendao