一.准备工作
在工程的build.gradle文件中添加

repositories {
       ...
        mavenCentral()
    }
    dependencies {
        ...
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' 
    }

在项目的build.gradle文件中添加

apply plugin: 'org.greenrobot.greendao'

android {
    ...
    greendao {
        schemaVersion 1
    }
}

dependencies {
    ...
    implementation 'org.greenrobot:greendao:3.3.0'
}

(1)当Bean类对象发生改变时,schemaVersion的数值要增加。
(2)目前引用的版本是最新版,后续更新要注意上方的参考文档。

二. 创建实体类

例:

@Entity
public class TestUser {
    @Id(autoincrement = true)
    private Long id;
    @NotNull
    private String name;
    @NotNull
    private int age;
    @NotNull
    private String sex;
    @Index(unique = true)
    private String uid;
}

主键一定要大写的Long。
点击Build → Make Project会自动生成代码。

@Entity
public class TestUser {
    @Id(autoincrement = true)
    private Long id;
    @NotNull
    private String name;
    @NotNull
    private int age;
    @NotNull
    private String sex;
    @Index(unique = true)
    private String uid;
    @Generated(hash = 1872927493)
    public TestUser(Long id, @NotNull String name, int age, @NotNull String sex,
            String uid) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.uid = uid;
    }
    @Generated(hash = 925009630)
    public TestUser() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return this.sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getUid() {
        return this.uid;
    }
    public void setUid(String uid) {
        this.uid = uid;
    }
}

三.初始化

可以将初始化以及增删改查进行封装,在初始化时需要context而且只需要初始化一次,为防止内存泄露所以我们将初始化放在Application进行操作。

public class DbController {/*** Helper*/private DaoMaster.DevOpenHelper mHelper;//获取Helper对象/*** 数据库*/private SQLiteDatabase db;/*** DaoMaster*/private DaoMaster mDaoMaster;/*** DaoSession*/private DaoSession mDaoSession;/*** 上下文*/private Context context;/*** dao*/private PersonInforDao personInforDao;private static DbController mDbController;/*** 获取单例*/public static DbController getInstance(Context context){if(mDbController == null){synchronized (DbController.class){if(mDbController == null){mDbController = new DbController(context);}}}return mDbController;}/*** 初始化* @param context*/public DbController(Context context) {this.context = context;mHelper = new DaoMaster.DevOpenHelper(context,"person.db", null);mDaoMaster =new DaoMaster(getWritableDatabase());mDaoSession = mDaoMaster.newSession();personInforDao = mDaoSession.getPersonInforDao();}/*** 获取可读数据库*/private SQLiteDatabase getReadableDatabase(){if(mHelper == null){mHelper = new DaoMaster.DevOpenHelper(context,"person.db",null);}SQLiteDatabase db =mHelper.getReadableDatabase();return db;}/*** 获取可写数据库* @return*/private SQLiteDatabase getWritableDatabase(){if(mHelper == null){mHelper =new DaoMaster.DevOpenHelper(context,"person.db",null);}SQLiteDatabase db = mHelper.getWritableDatabase();return db;}/*** 会自动判定是插入还是替换* @param personInfor*/public void insertOrReplace(PersonInfor personInfor){personInforDao.insertOrReplace(personInfor);}/**插入一条记录,表里面要没有与之相同的记录** @param personInfor*/public long insert(PersonInfor personInfor){return  personInforDao.insert(personInfor);}/*** 更新数据* @param personInfor*/public void update(PersonInfor personInfor){PersonInfor mOldPersonInfor = personInforDao.queryBuilder().where(PersonInforDao.Properties.Id.eq(personInfor.getId())).build().unique();//拿到之前的记录if(mOldPersonInfor !=null){mOldPersonInfor.setName("张三");personInforDao.update(mOldPersonInfor);}}/*** 按条件查询数据*/public List<PersonInfor> searchByWhere(String wherecluse){List<PersonInfor>personInfors = (List<PersonInfor>) personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).build().unique();return personInfors;}/*** 查询所有数据*/public List<PersonInfor> searchAll(){List<PersonInfor>personInfors=personInforDao.queryBuilder().list();return personInfors;}/*** 删除数据*/public void delete(String wherecluse){personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).buildDelete().executeDeleteWithoutDetachingEntities();}
}

看看我们的MainActivity

public class MainActivity extends AppCompatActivity {private Button Add,Delete,Update,Search;private DbController mDbController;private PersonInfor personInfor1,personInfor2,personInfor3,personInfor4;private long insertTipId;private TextView dataArea;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mDbController = DbController.getInstance(MainActivity.this);initView();Envent();similateData();}private void similateData() {personInfor1 = new PersonInfor(null,"001","王大宝","男");personInfor2 = new PersonInfor(null,"002","李晓丽","女");personInfor3 = new PersonInfor(null,"003","王麻麻","男");personInfor4 = new PersonInfor(null,"004","王大锤","女");}private void Envent() {Add.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//AddmDbController.insertOrReplace(personInfor1);mDbController.insertOrReplace(personInfor2);mDbController.insertOrReplace(personInfor3);mDbController.insertOrReplace(personInfor4);showDataList();}});Delete.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//DeletemDbController.delete("王麻麻");showDataList();}});Update.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//UpdatemDbController.update(personInfor1);showDataList();}});Search.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//SearchshowDataList();}});}private void showDataList() {StringBuilder sb = new StringBuilder();List<PersonInfor>personInfors = mDbController.searchAll();for(PersonInfor personInfor:personInfors){// dataArea.setText("id:"+p);sb.append("id:").append(personInfor.getId()).append("perNo:").append(personInfor.getPerNo()).append("name:").append(personInfor.getName()).append("sex:").append(personInfor.getSex()).append("\n");}dataArea.setText(sb.toString());}private void initView() {Add = findViewById(R.id.Add);Delete = findViewById(R.id.Delete);Update = findViewById(R.id.Update);Search = findViewById(R.id.Search);dataArea= findViewById(R.id.tips);}
}

greendao的使用相关推荐

  1. greendao3出现 Error:Execution failed for task ':app:greendao'

    错误如上图,最近下载一个Greendao的demo运行出现上述错误, 这个是build配置错误 修改build 就可以了 1       Moudle的gradle中 apply plugin: 'o ...

  2. GreenDao 3.x 注解中ToOne和ToMany的个人理解

    GreenDao是什么东西这个就不用多说了.自从GreenDao升级到3.0之后,编译的方法发生了改变.当然这个改变是有助于快速开发的. 区别在哪随便百度一下都可以知道.这里就不多说了. 这里主要说的 ...

  3. GreenDao使用注意事项

    如果新版本中新增加了表,需要修改greendao配置中schemaVersion,让其加1即可 greendao {schemaVersion, 2daoPackage 'com.xx.xx.stor ...

  4. GreenDao自带异步操作类简析

    AsyncSession: GreenDao提供一个异步操作的统一接口类AsyncSession,它提供了你所需要的所有异步操作方法. 你可以通过调用DaoSession#startAsyncSess ...

  5. GreenDao存储自定义类型对象解决方案(转)

    最近公司项目选用GreenDao作为Android客户端本地数据库的对象关系映射框架.对于GreenDao虽然以往也有简单用过,但这还是笔者第一次在实际业务中使用.碰到了题目所述的两个问题,虽然在Tu ...

  6. greenDAO缓存遇到的大坑的解决方法

    greenDAO缓存遇到的大坑的解决方法 参考文章: (1)greenDAO缓存遇到的大坑的解决方法 (2)https://www.cnblogs.com/yongfengnice/p/1146635 ...

  7. android 连接mysql orm_Android ORM框架 GreenDao 的使用详解

    一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储和文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 S ...

  8. 安卓GreenDao框架一些进阶用法整理(转)

    大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession. ...

  9. greendao引起的NoClassDefFoundError异常解决

    在使用Android studio导入eclipse工程师报错,因为原工程引用了greendao的第三方工程包 java.lang.NoClassDefFoundError: org.greenrob ...

  10. GreenDao高级用法

    GreenDao高级用法: 1.类内部有List 2.类内部有类 3.类内部有List<类> 1.类内部有List 复制该类到项目内 import org.greenrobot.green ...

最新文章

  1. 【组队学习】【30期】6. 树模型与集成学习
  2. Dubbo 3.0 前瞻:重塑 Spring Cloud 服务治理
  3. 【矩阵乘法】Quad Tiling(poj 3420)
  4. java 字符串文字筛选_Java的原始字符串文字
  5. 内存不能为read进不去桌面_四级报名进不去怎么办
  6. java异常处理机制_Java编程中的异常机制
  7. 微信“拍一拍”,竟然可以使用Python实现,你get到了吗?
  8. python入门题目及答案_Python基础知识的一些练习与解答,python,部分,习题,及,答案...
  9. NB-IOT智能云家具项目系列实站
  10. 20191122 视频版控制台上的极乐净土
  11. 手机丢了不可怕,手机卡丢了才最可怕!
  12. 计算机ms office二级试题,计算机二级MSoffice操作试题及答案
  13. 刚刚:魅族PANDAER妙磁背甲让iPhone 13满血,《原神》稳定60帧
  14. 英语“死”的委婉说法
  15. python练习 006 圆的周长与面积
  16. 2021年安全员-A证复审考试及安全员-A证考试试题
  17. win10/win11 控制面板-网络和 Internet-网络连接“本地连接2“老是自动开启,影响wifi网速
  18. SpO2、SaO2、PaO2、低氧血症概念及标准的总结
  19. linux cfs进程调度 配置,linux2.6 CFS调度算法分析
  20. html游戏禁止微信浏览器下拉,JavaScript中防止微信浏览器被整体拖动的方法

热门文章

  1. 旷视科技19届春招:算法研究员面经
  2. 招行一网通 java桥_招行一网通支付接入
  3. 在腾讯的八年,我的职业思考!
  4. 2016年9个最受欢迎的H5页面制作工具
  5. 一个icon的选中与不选中
  6. WKWebView - 1
  7. web项目连接阿里云云数据库RDS-MySQL8.0
  8. word文档在线编辑推荐超级文档
  9. python兔子_python 实现兔子生兔子示例
  10. POC原型开发:巡店 一期结果