1,概述
同Jetpack的Room,该框架封装了Sqlite,减少代码冗余;
依赖导入如下:
(1)插件导入
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
(2)插件apply
apply plugin: 'org.greenrobot.greendao'
(3)依赖导入
implementation 'org.greenrobot:greendao:3.3.0'
(4)配置
greendao {
schemaVersion 1 //数据库版本号,数据库升级使用
daoPackage 'com.zjw.demotest.greendao' //代表GreenDao自动生成的有关数据库操作工具类所要存放的包名
targetGenDir 'src/main/java' //路径
}
2,实例
(1) 创建domain类,
@Entity
public class UserInfo {
@Id //必须Long
private Long id;
@Property(nameInDb = "name") //对应数据库name字段,不写默认属性名
@NotNull // 不能为空
@Unique //不可重复
private String username;
@Transient // greenDao忽略字段
private String ignore;
}
(2)make build一下,在指定目录生成Dao类,
(3)初始化Dao
public class GreenDaoTestApplication extends Application {
public static final String DB_NAME = "test.db";
private DaoMaster mDaoMast;
@Override
public void onCreate() {
super.onCreate();
initGreenDao();
}
private void initGreenDao() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, DB_NAME);
SQLiteDatabase writableDatabase = helper.getWritableDatabase();
mDaoMast = new DaoMaster(writableDatabase);
}
public DaoMaster getDaoMast() {
return mDaoMast;
}
}
(4)使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UserInfoDao userInfoDao = ((GreenDaoTestApplication) getApplication()).getDaoMast().newSession().getUserInfoDao();
//插入数据,如果id为null,代表自增
UserInfo zjw = new UserInfo(1L, "zjw");
userInfoDao.insert(zjw);
//删除
userInfoDao.delete(zjw);
//更新
userInfoDao.update(zjw);
//新增+更新
userInfoDao.save(zjw);
//全查询
List<UserInfo> list = userInfoDao.queryBuilder().list();
//条件查询 username字段等于zjw,多种条件查询自研究
List<UserInfo> list1 = userInfoDao.queryBuilder().where(UserInfoDao.Properties.Username.eq("zjw")).list();
}
}
(5)查询
//查询全部
List<User> list = mUserDao.queryBuilder().list();
//查询 name等于xyh8的数据
List<User> list= mUserDao.queryBuilder().where(UserDao.Properties.Name.eq("xyh8")).list();
//查询 name不等于xyh8的数据
List<User> list= mUserDao.queryBuilder().where(UserDao.Properties.Name.notEq("xyh8")).list();
//like 模糊查询
//查询 name以xyh3开头的数据
List<User> list = mUserDao.queryBuilder().where(UserDao.Properties.Name.like("xyh3%")).list();
//between 区间查询 年龄在20到30之间
List<User> list = mUserDao.queryBuilder().where(UserDao.Properties.Age.between(20,30)).list();
//gt: greater than 半开区间查询,年龄大于18
List<User> list = mUserDao.queryBuilder().where(UserDao.Properties.Age.gt(18)).list();
//ge: greater equal 半封闭区间查询,年龄大于或者等于18
List<User> list = mUserDao.queryBuilder().where(UserDao.Properties.Age.ge(18)).list();
//lt: less than 半开区间查询,年龄小于18
List<User> list = mUserDao.queryBuilder().where(UserDao.Properties.Age.lt(18)).list();
//le: less equal 半封闭区间查询,年龄小于或者等于18
List<User> list = mUserDao.queryBuilder().where(UserDao.Properties.Age.le(18)).list();
//排序
//名字以xyh8开头,年龄升序排序
List<User> list = mUserDao.queryBuilder()
.where(UserDao.Properties.Name.like("xyh8%"))
.orderAsc(UserDao.Properties.Age)
.list();
//名字以xyh8开头,年龄降序排序
List<User> list = mUserDao.queryBuilder()
.where(UserDao.Properties.Name.like("xyh8%"))
.orderDesc(UserDao.Properties.Age)
.list();
3,关注点
安装插件只是为了自动生成代码,本质上可以自己实现接口。
DaoMaster继承AbstractDaoMaster,
DaoSession继承AbstractDaoSession,
UserInfoDao继承AbstractDao<T, K>,