Android --- GreenDao的实现(ORM框架)

  今天看了下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 : [email protected]
10  * 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 schema
43      */
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(); // 不能为null
57         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 : [email protected]
12  * 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      * 获取DaoMaster
31      *
32      * @param context
33      * @return
34      */
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 context
51      * @return
52      */
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 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical">
 6
 7     <Button
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:onClick="insert"
11         android:text="Insert" />
12
13
14     <Button
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:onClick="delete"
18         android:text="delete" />
19
20
21     <Button
22         android:layout_width="wrap_content"
23         android:layout_height="wrap_content"
24         android:onClick="update"
25         android:text="update" />
26
27
28     <Button
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:onClick="query"
32         android:text="query" />
33
34     <Button
35         android:layout_width="wrap_content"
36         android:layout_height="wrap_content"
37         android:onClick="QueryById"
38         android:text="QueryById" />
39
40     <Button
41         android:layout_width="wrap_content"
42         android:layout_height="wrap_content"
43         android:onClick="deleteAll"
44         android:text="deleteAll"/>
45
46
47 </LinearLayout>

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<User> queryBuilder = userDao.queryBuilder();
 81         List<User> 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<User> queryBuilder = userDao.queryBuilder();
100
101         // where
102         QueryBuilder<User> query = queryBuilder.where(UserDao.Properties.Id.eq(6));
103
104         System.out.println("query:" +  query.list().toString());
105
106     }
107
108 }

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

时间: 2024-10-10 07:41:37

Android --- GreenDao的实现(ORM框架)的相关文章

【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结

转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写.查询等操作.因此首先想到了对整个项目的数据库框架进行优化. 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂.但是在使用过程中感觉很繁琐,从建表到对表的增删改查等操作,如果表对象的属性很多,就需要使用大量的

android 超轻量级的ORM框架

一.测试性能Demo 首先给大家一个性能测试的Demo,看看性能如何. Demo.apk 二.相关操作CRUD Entity: import android.annotation.SuppressLint; //依赖注入配置 @SuppressLint("UseValueOf") public class Entity { /** * 默认主键,自增.最好有id主键,便于debug和逻辑判断. * * 暂不支持自定义主键 */ int id; public boolean base_b

Android 数据库ORM框架GreenDao学习心得及使用总结&lt;一&gt;

Android 数据库ORM框架GreenDao学习心得及使用总结<一> 转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写.查询等操作.因此首先想到了对整个项目的数据库框架进行优化. 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂.但是在使用过程中感觉很繁

最好的5个Android ORM框架

在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式,即本地数据存储,如嵌入式SQLLite,你可以选择直接使用SQL语句.Content Provider 或 ORM(对象关系数据映射). 对于 Android 应用的开发,主要是使用Java语言,所以适用于Java语言的一些ORM,也能移植于 Android 平台上. 下面是5个可用ORM的总体介绍

GreenDao开源ORM框架浅析

Android程序开发中,避免不了要用到数据库,我们都知道android提供了内置的Sqlite,即调用SQLiteOpenHelper的方法,来操作数据库,但是使用过程较为繁琐,从建表到对表中数据的正删改查操作,需要大量的代码来建立表,和完成这些操作. GreenDao居然是ORM框架,它跟hibernate是很像的,就是当你配置了一些参数信息之后,可以由框架来帮你生成对应的实体类,还有生成对应的操作实体类的代码(自动建表和基本的增删改查). 优点: 1.最大性能(最快的Android ORM

数据库ORM框架GreenDao

常用的数据库: 1). Sql Server2). Access3). Oracle4). Sysbase5). MySql6). Informix7). FoxPro8). PostgreSQL9). IBM 的DB2 2.特点. -oracle: 1.数据库安全性很高,很适合做大型数据库.支持多种系统平台(HPUX.SUNOS.OSF/1.VMS. WINDOWS.WINDOWS/NT.OS/2). 2.支持客户机/服务器体系结构及混合的体系结构(集中式.分布式. 客户机/服务器). -sq

最受欢迎的5个Android ORM框架

在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式,即本地数据存储,如嵌入式SQLite,你可以选择直接使用SQL语句.Content Provider 或 ORM(对象关系数据映射). 对于 Android 应用的开发,主要是使用Java语言,所以适用于Java语言的一些ORM,也能移植于 Android 平台上. 下面是5个可用ORM的总体介绍:

推荐的Android ORM框架

1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation). 官方网站:http://ormlite.com/sqlite_java_android_orm.shtml 2. SugarORM SugarORM 是 Android 平台专用ORM.提供简单易学的APIs.可以很容易的处理1对1和1对多的关系型数据,并通过3个函数save(), delet

Android Orm框架(GreenDao)

Android Orm框架(GreenDao) 分类: android2014-04-10 14:29 723人阅读 评论(0) 收藏 举报 GreenDao与Ormlite对比 Ormlite:简单好用,比较符合JavaEE开发者使用习惯,注解很方便: GreenDao:为Android大大优化 ,最小的内存使用 ,非常高的性能优势. 官网地址:http://greendao-orm.com/features/ 项目地址:https://github.com/greenrobot/greenD

Android ORM 框架之 greenDAO 使用心得

原文:http://itangqi.me/android/using-greendao-experience/ 前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite.SugarORM.Active Android.Realm 与 GreenDAO.而今天的主角便是 greenDAO,下面,我将