博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android --- GreenDao的实现(ORM框架)
阅读量:5858 次
发布时间:2019-06-19

本文共 6960 字,大约阅读时间需要 23 分钟。

  今天看了下Android的ORM框架,然后就看到了GreenDao这个东东....感觉用了这个操作数据库就变得简单多了,不用再写那些SQL语句,和Hibernate框架挺像的....GreenDao就是将java对象映射到Sqlite数据库,通过对java对象进行存储、更新、删除、查询来操作数据库,简单化数据库操作。

  1. 配置环境
    1. 首先要引入两个jar包
      compile 'de.greenrobot:greendao-generator:2.0.0'compile 'de.greenrobot:greendao:2.0.0'

使用android studio的这里可以直接添加:

      

1、在项目中创建一个generator,dao、mode这三个包。generator包用于写生成dao和model的一个类,dao包用于存放与dao相关的类,model用于存放实体类  

         

 2.生成相关类

  在generator包下,新建一个生成dao和model代码的类ExampleDaoGenerator,在里面添加代码: 

1 package com.itljw.greendaodemo.generator; 2  3 import de.greenrobot.daogenerator.DaoGenerator; 4 import de.greenrobot.daogenerator.Entity; 5 import de.greenrobot.daogenerator.Schema; 6  7 /** 8  * Created by JW on 2015/11/5 09:44. 9  * Email : 1481013719@qq.com10  * Description :11  */12 public class ExampleDaoGenerator {13 14     public static void main(String[] args) {15 16         try {17             /**18              * 参数1:数据库版本号19              * 参数2:默认的java package,如果不修改默认的报名,生成的dao和model都会在该包下20              */21             Schema schema = new Schema(1, "com.itljw.greendaodemo.model");22             // 修改dao的包路径,dao将会生成在这个包下23             schema.setDefaultJavaPackageDao("com.itljw.greendaodemo.dao");24 25             // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。26             // schema2.enableActiveEntitiesByDefault();27             // schema2.enableKeepSectionsByDefault();28 29             addEntity(schema); // 添加一个实体对象30 31             // 自动生成代码,第二个参数:指定输出路径32             new DaoGenerator().generateAll(schema, "D:/AndroidStudioProjects/GreenDaoDemo/app/src/main/java");33         } catch (Exception e) {34             e.printStackTrace();35         }36 37     }38 39     /**40      * 添加实体41      *42      * @param schema43      */44     private static void addEntity(Schema schema) {45 46         /**47          * 一个实体类就关联到数据库中的一张表,数据库中表的名字默认就是类的名字48          */49         Entity user = schema.addEntity("User");50 51         user.setTableName("user"); // 可以设置表的名字52 53         // GreenDao会自动根据实体类的属性值来创建表的字段,并赋予默认值54         user.addIdProperty().primaryKey().autoincrement();  // 指定id,主键自增55 56         user.addStringProperty("username").notNull(); // 不能为null57         user.addStringProperty("password").notNull();58 59 60     }61 62 }

   执行这个类,在控制台可以看到 : 

          

    然后就可以在dao和model两个包下查看到对应的代码了

3、在Application层,写两个方法,用于获取DaoMaster和DaoSession

1 package com.itljw.greendaodemo; 2  3 import android.app.Application; 4 import android.content.Context; 5  6 import com.itljw.greendaodemo.dao.DaoMaster; 7 import com.itljw.greendaodemo.dao.DaoSession; 8  9 /**10  * Created by JW on 2015/11/5 10:54.11  * Email : 1481013719@qq.com12  * Description :13  */14 public class App extends Application {15 16     private App Instance;17     private static DaoMaster daoMaster;18     private static DaoSession daoSession;19 20     public App getInstance() {21 22         if (Instance == null) {23             Instance = this;24         }25 26         return Instance;27     }28 29     /**30      * 获取DaoMaster31      *32      * @param context33      * @return34      */35     public static DaoMaster getDaoMaster(Context context) {36 37         if (daoMaster == null) {38 39             DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context, ConstantValue.DBName, null);40 41             daoMaster = new DaoMaster(helper.getWritableDatabase());42 43         }44         return daoMaster;45     }46 47     /**48      * 获取DaoSession对象49      *50      * @param context51      * @return52      */53     public static DaoSession getDaoSession(Context context) {54 55         if (daoSession == null) {56             if (daoMaster == null) {57                 getDaoMaster(context);58             }59             daoSession = daoMaster.newSession();60         }61 62         return daoSession;63     }64 65 }

  4、测试:

布局文件: 

1 
2
6 7
12 13 14
19 20 21
26 27 28
33 34
39 40
45 46 47

MainActivity代码:

1 package com.itljw.greendaodemo;  2   3 import android.os.Bundle;  4 import android.support.v7.app.AppCompatActivity;  5 import android.view.View;  6 import android.widget.Toast;  7   8 import com.itljw.greendaodemo.dao.DaoSession;  9 import com.itljw.greendaodemo.dao.UserDao; 10 import com.itljw.greendaodemo.model.User; 11  12 import java.util.List; 13  14 import de.greenrobot.dao.query.QueryBuilder; 15  16 public class MainActivity extends AppCompatActivity { 17  18  19     private DaoSession daoSession; 20     private UserDao userDao; 21  22     @Override 23     protected void onCreate(Bundle savedInstanceState) { 24         super.onCreate(savedInstanceState); 25         setContentView(R.layout.activity_main); 26  27         daoSession = App.getDaoSession(this); // 获取DaoSession 28         userDao = daoSession.getUserDao(); // 获取UserDao 可对User进行操作 29  30  31     } 32  33     /** 34      * Insert数据 35      * @param view 36      */ 37     public void insert(View view){ 38  39         for(int i = 0 ;i < 10 ; i ++){ 40  41             User user = new User(); 42             user.setUsername("haha" + i); 43             user.setPassword("test" + i); 44  45             // 直接操作对象,将对象插入数据库,这个和Hibernate的一样 46             userDao.insert(user); 47         } 48  49         Toast.makeText(MainActivity.this, "插入数据!", Toast.LENGTH_SHORT).show(); 50  51     } 52  53     /** 54      * Delete数据 根据id删除对应数据 55      * @param view 56      */ 57     public void delete(View view){ 58         userDao.deleteByKey(1l); 59     } 60  61     /** 62      * Update数据 根据id更新对应的数据 63      * @param view 64      */ 65     public void update(View view){ 66  67         User user = new User(); 68         user.setId(2l); 69         user.setUsername("update"); 70         user.setPassword("update_psw"); 71  72         userDao.update(user); 73     } 74  75     /** 76      * Query数据 77      * @param view 78      */ 79     public void query(View view){ 80         QueryBuilder
queryBuilder = userDao.queryBuilder(); 81 List
userList = queryBuilder.list(); // 使用list进行查询 82 System.out.println("userList : " + userList.toString()); 83 } 84 85 /** 86 * DeleteAll 删除所有数据 87 * @param view 88 */ 89 public void deleteAll(View view){ 90 userDao.deleteAll(); 91 } 92 93 /** 94 * 根据id查询对应的数据 95 * @param view 96 */ 97 public void QueryById(View view){ 98 99 QueryBuilder
queryBuilder = userDao.queryBuilder();100 101 // where102 QueryBuilder
query = queryBuilder.where(UserDao.Properties.Id.eq(6));103 104 System.out.println("query:" + query.list().toString());105 106 }107 108 }

这样就可以简单的操作数据库了

posted on
2015-11-05 14:15 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/android-ljwBlobs/p/4939374.html

你可能感兴趣的文章
android BitMap回收
查看>>
Spring两种依赖注入方式的比较
查看>>
软件架构模式转载
查看>>
适配器模式
查看>>
反射封装request参数为对象
查看>>
PostgreSQL backup and recovery - online logical backup & recovery
查看>>
类似微信首页弹性滚动和惯性滚动效果的实现——OverScroll
查看>>
试读angular源码第一章:开场与platformBrowserDynamic
查看>>
android插件自定义之多渠道打包插件(支持微信资源混淆andResGuard)
查看>>
一道关于面向对象面试题
查看>>
php之正则表达式函数总结
查看>>
Web前端-Ajax基础技术(下)
查看>>
支配vue框架初阶项目之博客网站-注册页面-单选按钮
查看>>
小tips-一种移动端模拟实现返回拦截的方案
查看>>
刨根问底区块链 —— 基础篇
查看>>
3 jQuery学习笔记第三节 Jq的设计思想之写法
查看>>
swift GCD 的一些高级用法
查看>>
【拒绝一问就懵】之你多少要懂点内存回收机制
查看>>
【深入浅出express】- express入门01
查看>>
Safari无痕模式下,storage被禁用问题
查看>>