GreenDao 3.0 学习和实践

    xiaoxiao2025-05-19  2

    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());     } }
    转载请注明原文地址: https://ju.6miu.com/read-1299062.html
    最新回复(0)