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());
}
}
注意:顺序尽量别搞错。严格按照文档去集成,否则找不到错误原因纠结死。 好多代码都是自动生成,
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());
}
}
相关文章推荐
- GreenDao 3.0 学习笔记(一)
- greenDaoMaster的学习研究
- greenDaoMaster的学习研究
- 安卓MVP设计思想,结合greendao+okhttp通过一个登陆的例子来进行学习(eclipse篇)
- Android数据存储之GreenDao 3.0 详解
- GreenDAO 3.0 初次使用
- Silverlight学习笔记:第一章:Silverlight3.0开发工具和开发实践
- binbinyang---greendao 3.0的配置以及简单的增删改查
- greenDao 实践
- Android ORM之GreenDao学习
- GreenDao2.2升级GreenDao3.0的适配之路
- greenDaoMaster的学习研究
- SQL学习笔记之数据库专题(三):Android下Sqlite数据库ORM框架之GreenDao详解
- Android greenDao的学习总结
- Android 操作数据库的框架——greenDAO的学习
- 我的greendao开发实践
- GreenDao 学习笔记 6
- greenDaoMaster的学习研究
- Android数据存储之GreenDao 3.0 详解
- Android数据存储之GreenDao 3.0 详解(转)