Android学习之GreenDao最全面的使用详解(搭建+入门使用+基本语法)

简单介绍

greenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小。greenDAO数据库是非常适合存储大量数据,从而加速事项。使用greenDAO,大多数实体可以插入,更新和在速率加载每秒几千实体。

一、 GreenDao搭建

在这里建议大家使用最新版的greenDAO,不然会出现各种各样的问题

导入依赖

1.Project: build.gradle

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // 添加插件 更好支持GreenDao
    }
}

2.Module:app build.gradle
最上面引入对应的插件

apply plugin: 'org.greenrobot.greendao' // 添加应用依赖插件

导入依赖,这里使用的是3.3.0,建议使用3.3.0或是3.2.2版本的

implementation 'org.greenrobot:greendao:3.3.0' // 添加库

配置greenDao的参数

greendao {
    schemaVersion 1
    targetGenDir 'src/main/java'
    daoPackage "${android.defaultConfig.applicationId}.greenDao"
}

然后重新sync一下项目即可

二、简单入门

1.实体类:

package com.st.myriven.greenDao;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;

@Entity
public class User {

    @Id
    private long id;
    private String name;
    private int age;
 
    //省略了getter,setter 方法
}

创建完实体类后,重新build下项目(如果出现问题,先clean在进行build),这时候你会发现会在之前指定的目录下多出几个类,我们接下来就是通过这几个类进行操作数据库
在这里插入图片描述
2.创建一个类去继承Application,需要在AndroidManifest.xml文件中置顶application的名字
在这里插入图片描述
代码:

public class AppContext extends Application {
        private DaoSession daoSession;
        @Override
        public void onCreate() {
            super.onCreate();
            initDreenDao();
        }
         /**
         * greendao数据库初始化
         */
        private void initDreenDao() {
            DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "demo.db");
            SQLiteDatabase db = devOpenHelper.getWritableDatabase();
            DaoMaster daoMaster = new DaoMaster(db);
            daoSession = daoMaster.newSession();
        }

        /**
         * 获取 DaoSession
         */
        public DaoSession getDaoSession() {
            return daoSession;
        }

    }

3.使用

public class TestActivity extends Activity {
    AppContext myApp;
    DaoSession daoSession;
    UserDao userDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test); 

        myApp= (AppContext) getApplication();
        daoSession =  myApp.getDaoSession();
        userDao = daoSession.getUserDao();

        User user = new User();
        user.setId(1);
        user.setName("张三");
        user.setAge(22);
        
		//userDao.insert(user);//如果id重复,会报错,
        userDao.insertOrReplace(user);
        List list = selectAll();
        Log.i("info",list.get(0).toString());
    }

    public List selectAll(){
        return userDao.loadAll();// 查询所有记录
    }
}

打印到日志中
在这里插入图片描述

三、常见注解

@Id: 对应数据表中的 Id 字段
@Entity: 使用@Index作为一个属性来创建一个索引,默认是使用字段名
@Index: 使用@Index作为一个属性来创建一个索引,默认是使用字段名
@NotNull: 设置数据库表当前列不能为空
@Unique: 表名该属性在数据库中只能有唯一值
@Property: 设置一个非默认关系映射所对应的列名,默认是使用字段名
@OrderBy: 更加某一字段排序

当然还有很多注解,在这里不一一介绍,这些相对比较常见

四、基本语法

在这里所有的语句均使用上面的userDao进行操作

(一)插入

插入语句可直接引用上面的

 User user = new User();
 user.setUserId(1);
 user.setName("小明");
 user.setAge(16);

 userDao.insert(user);
 userDao.insertOrReplace(user);

insertOrReplace和insert区别
insert时,当id相同时,会报错
insertOrReplace,当id相同时,不会报错,只是会替换一下

(二)删除

userDao.delete(user);//根据对象删除
userDao.deleteByKey(user.getId());//根据id删除
userDao.deleteAll();//删除全部

(三)修改

userDao.update(user);

(四)查询

// 查询所有记录
userDao.loadAll();
//根据ID查询
userDao.loadByRowId(user.getId());
//查询成年的用户
userDao.queryRaw("where AGE>?","18");
//模糊查询 para是你的参数
userDao.queryBuilder().whereOr(userDao.Properties.Name.like("%"+para+"%"),BedInfoDao.Properties.Num.like("%"+para+"%")).list()
//根据条件查询
userDao.queryBuilder().where(userDao.Properties.Id.eq(user.getId())).limit(1).list();

当然还有很多查询的方式,不在一一例举,以下是会用到的语法介绍:

whereOr: where语句里面写的条件都是用“且”连接,whereOr里的语句使用“或”连接
distinct : 直接过滤掉重负字段
limit: 分页n个一页,一般和offset结合使用
offset: 忽略查询出的前n条结果
orderAsc: 以字段升序排序
orderDesc: 以字段降序
preferLocalizedStringOrder : 本地化字符串排序
orderCustom: 自定义排序 里面需要传两个参数: 一个属性 和对应的排序方案 ASC 或是 DESC
orderRaw: 也是自定义排序, 把字段和 排序方案 写在一个字符串传入
stringOrderCollation: 也是自定义排序 可以合并多个升降排序方案 以日期升序 且 价格降序

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FusionCharts是一个强大的数据可视化库,可以帮助开发人员创建漂亮而交互式的图表和图形。下面是一个关于如何使用FusionCharts的详细说明,包括实例、图解和Demo。 1. 安装FusionCharts:首先,你需要从FusionCharts官方网站下载和安装FusionCharts库。你可以选择下载免费版本或购买商业许可证。 2. 引入FusionCharts库:将FusionCharts的JavaScript文件引入你的HTML文件中。你可以通过将以下代码添加到`<head>`标签中来实现: ```html <script src="fusioncharts.js"></script> ``` 3. 创建一个容器:在HTML文件中创建一个用于显示图表的容器。你可以使用一个`<div>`标签,并为其指定一个唯一的ID。例如: ```html <div id="chartContainer"></div> ``` 4. 准备数据:准备用于绘制图表的数据。你可以使用JavaScript对象或从服务器获取的JSON数据。 5. 创建图表对象:使用FusionCharts提供的API创建一个图表对象。你需要指定图表类型、数据和容器ID。例如,下面的代码创建了一个柱状图: ```javascript var chart = new FusionCharts({ type: 'column2d', renderAt: 'chartContainer', dataSource: { data: [ { label: 'January', value: '100' }, { label: 'February', value: '200' }, { label: 'March', value: '150' } ] } }); ``` 6. 渲染图表:调用图表对象的`render()`方法,将图表渲染到指定的容器中。例如: ```javascript chart.render(); ``` 7. 自定义图表:你可以使用FusionCharts提供的各种配置选项来自定义图表的外观和行为。例如,你可以更改图表的颜色、字体、标题等。你可以参考FusionCharts的文档以获取更多自定义选项。 8. 实例和图解:根据你的具体需求,可以参考FusionCharts的官方文档和示例来学习更多关于使用FusionCharts的实例和图解。 9. Demo:你可以在FusionCharts的官方网站上找到各种示例和演示,以帮助你更好地理解和使用FusionCharts。你可以尝试运行这些Demo,并从中获取灵感和指导。 希望这个详细说明对你有所帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值