【Android】GreenDao

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>,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值