greenDAO 优势
1、一个精简的库
2、性能最大化
3、内存开销最小化
4、易于使用的 APIs
5、对 Android 进行高度优化
1.在build.gradle中进行配置,也就是项目的根路径添加依赖
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
2.module中的build.gradle 进行添加
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies { compile 'org.greenrobot:greendao:3.2.2' // add library }
3.
greendao {
schemaVersion 1
daoPackage 'com.bwie.myapplication.gen'//自己项目名和包名+gen
targetGenDir 'src/main/java'
}
//使用
1.首先创建一个entity包,在创建一个bean类
2.make project 一下
3.会自动生成gen包
3.写工具类
public class GreenDaoUtils {
private static GreenDaoUtils greenDaoUtils;
private DaoMaster daoMaster;
private DaoSession daoSession;
private DaoMaster.DevOpenHelper devOpenHelper;
private SQLiteDatabase database;
//双重检验锁单例模式
public static GreenDaoUtils getGreendaoutils(){
if(greenDaoUtils==null){
synchronized (GreenDaoUtils.class){
if(greenDaoUtils==null){
greenDaoUtils=new GreenDaoUtils();
}
}
}
return greenDaoUtils;
}
//调用初始化的方法
public void init(){
setDatebase();
}
//初始化greendao生成的几个重要对象
public void setDatebase(){
devOpenHelper=new DaoMaster.DevOpenHelper(MyApp.context,"Zou",null);
database=devOpenHelper.getWritableDatabase();
daoMaster=new DaoMaster(database);
daoSession=daoMaster.newSession();
}
public DaoSession getDaoSession(){
return daoSession;
}
public SQLiteDatabase getDatabase(){
return database;
}
}
5.创建MyApp类
public class MyApp extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context=getApplicationContext();
GreenDaoUtils.getGreendaoutils().init();
}
}
6.实际操作
public class MainActivity extends AppCompatActivity {
@BindView(R.id.lv)
ListView lv;
private UserDao userDao;
int aa;
int bb;
int cc;
private List<User> users;
private MyAdaper m;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//拿到操作者
DaoSession daoSession = GreenDaoUtils.getGreendaoutils().getDaoSession();
//拿到执行者
userDao = daoSession.getUserDao();
users = userDao.loadAll();
m = new MyAdaper(this,users);
lv.setAdapter(m);
}
@OnClick({R.id.dan,R.id.pl,R.id.xiu,R.id.shan,R.id.cha1,R.id.cha2,R.id.fenye})
public void btn(View v){
switch (v.getId()){
case R.id.dan:
//单条添加
userDao.insert(new User("小于"+(++aa),"24",null));
show();
break;
case R.id.pl:
//批量添加
for (int i = 10; i < 31; i++) {
userDao.insert(new User("小于"+i,"24",null));
}
show();
break;
case R.id.xiu:
//修改
userDao.update(new User("小庄","25", (long) (++bb)));
show();
break;
case R.id.shan:
//删除
userDao.deleteByKey((long) ++cc);
show();
break;
case R.id.cha1:
//查询主键下单条数据
Query<User> build = userDao.queryBuilder()
.where(UserDao.Properties.Id.eq(20))
.build();
users = build.list();
m = new MyAdaper(this,users);
lv.setAdapter(m);
break;
case R.id.cha2:
//查询所有
show();
break;
case R.id.fenye:
//分页查询
Query<User> build1 = userDao.queryBuilder().offset(10).limit(20).build();
users=build1.list();
m = new MyAdaper(this,users);
lv.setAdapter(m);
break;
}
}
//查询的方法
public void show(){
users = userDao.loadAll();
m = new MyAdaper(this,users);
lv.setAdapter(m);
}
}