`
小桔子
  • 浏览: 23387 次
  • 性别: Icon_minigender_2
  • 来自: 贵阳
社区版块
存档分类
最新评论

greenDao基本搭建和使用

阅读更多

    最近闲得发慌,研究下android框架,蛮早就听说过greendao,一直没接触,这会儿工夫来捯饬捯饬。
    作为一个菜鸟,不求所以然,先会用,再慢慢体会他设计的精妙在哪里。
    个人验证通过可行的方法。
    平台: eclipse+adt。
    包: greendao-2.0.0.jar,greendao-generator-2.0.0.jar,freemarker,jar.
  1. 创建一个java project 导入中添加两个包,freemarker.jar 以及greendao-generator-2.0.0.jar

  2:创建MyGenerator.java 文件,执行 run as  java application

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Property;
import de.greenrobot.daogenerator.Schema;
import de.greenrobot.daogenerator.ToMany;

public class MyGenerator {
 
    public static void main(String[] args) throws Exception {
        // first parameter for version, <span></span> second for default generate package
        Schema schema = new Schema(4, "com.xckevin.example.model");
 
        addNote(schema);
        addCustomerOrder(schema);
        addUser(schema);
        addVersion(schema);
        // set dao class generate package
        schema.setDefaultJavaPackageDao("com.xckevin.example.dao");
        // keep custom code block
        schema.enableKeepSectionsByDefault();
        new DaoGenerator().generateAll(schema, "../greenDaoJava/src");
    }
 
    private static void addNote(Schema schema) {
        Entity note = schema.addEntity("Note");
        note.addIdProperty();
        note.addStringProperty("text").notNull();
        note.addStringProperty("comment");
        note.addDateProperty("date");
    }
     
    private static void addUser(Schema schema) {
        Entity user = schema.addEntity("User");
        user.setTableName("t_user");
        user.addIdProperty();
        user.addStringProperty("account").unique();
        user.addStringProperty("password");
        user.addDateProperty("birthday");
        user.addShortProperty("gender");
        user.addIntProperty("height");
        user.addFloatProperty("weight");
        user.addDateProperty("registerTime");
        user.implementsInterface("Jsonable<User>");
    }
    private static void addVersion(Schema schema){
    	 Entity version = schema.addEntity("Version");
         version.addIdProperty();
         version.addLongProperty("versionNo").unique();
         version.addStringProperty("sql").unique();
         version.addStringProperty("desc");
    }
 
    private static void addCustomerOrder(Schema schema) {
        Entity customer = schema.addEntity("Customer");
        customer.addIdProperty();
        customer.addStringProperty("name").notNull();
 
        Entity order = schema.addEntity("Order");
        order.setTableName("ORDERS"); // "ORDER" is a reserved keyword
        order.addIdProperty();
        Property orderDate = order.addDateProperty("date").getProperty();
        Property customerId = order.addLongProperty("customerId").notNull().getProperty();
        order.addToOne(customer, customerId);
        
//        Property orderId=customer.addLongProperty("orderId").notNull().getProperty();
//        customer.addToOne(order, orderId);
        
        ToMany customerToOrders = customer.addToMany(order, customerId);
        customerToOrders.setName("orders");
        customerToOrders.orderAsc(orderDate);
    }
 
}

 3. 执行之后,输出控台Log ,刷新java project 生成Dao层文件以及model 层文件。

Processing schema version 4...
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\dao\NoteDao.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\model\Note.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\dao\CustomerDao.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\model\Customer.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\dao\OrderDao.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\model\Order.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\dao\UserDao.javaWritten E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\model\User.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\dao\VersionDao.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\model\Version.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\dao\DaoMaster.java
Written E:\DFE_Adroid4\greenDaoJava\src\com\xckevin\example\dao\DaoSession.java 

4. 将生成的model以及到复制赞贴到android project中,android project 中需要添加greendao-2.0.0.jar

然后就可以再android项目中使用了,测试案例:

 

package com.example.greendaoandroid;

import android.app.Activity;

public abstract class BaseActivity extends Activity{
	public static final String DB_NAME="notes_db";
}

 

package com.example.greendaoandroid;

import java.util.Date;
import java.util.List;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Property;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.xckevin.example.dao.CustomerDao;
import com.xckevin.example.dao.DaoMaster;
import com.xckevin.example.dao.DaoMaster.DevOpenHelper;
import com.xckevin.example.dao.DaoSession;
import com.xckevin.example.dao.NoteDao;
import com.xckevin.example.dao.OrderDao;
import com.xckevin.example.model.Customer;
import com.xckevin.example.model.Note;
import com.xckevin.example.model.Order;

public class MainActivity extends BaseActivity {

	
	private DaoSession daoSession;
	private NoteDao noteDao;
	private OrderDao orderDao;
	private CustomerDao cusDao;
	
	public static int count=1;
	private final static String CUS_TEST="张山";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initDao();
		
		noteDao.deleteAll();
		orderDao.deleteAll();//清空数据 方便测试
		cusDao.deleteAll();//清空数据 方便测试
		Customer cus=new Customer(null, CUS_TEST);//一对多插入主
		cusDao.insert(cus);//插入一个客户
		
		Button btnInsert=(Button)findViewById(R.id.btnInsert);
		final TextView result=(TextView)findViewById(R.id.tvShow);
		//单个插入测试
		btnInsert.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				Note note = new Note(null, "noteText"+(count), "评论"+(count++), new Date());  
				noteDao.insert(note);  
				List<Note> notes=noteDao.queryBuilder().list();
				result.setText("");
				for(Note n:notes){
					result.append(n.toString()+"\n");//重写了实体的toString(),方便测试
				}
			}
		});
	Button	btnInsertOneToMany=(Button)findViewById(R.id.btnInsertOneToMany);
	//一对多插入测试
	btnInsertOneToMany.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {

				result.setText("");
				
				Customer mcus=cusDao.queryBuilder().where(
						CustomerDao.Properties.Name.eq(CUS_TEST)).list().get(0);
				
				Order od=new Order(null, new Date(),mcus.getId());
				orderDao.insert(od);
//				for(Order d:orderDao.loadAll()){
//					result.append(d.toString()+"\n");
//				}
				
				List<Customer> cusList=daoSession.getCustomerDao().queryBuilder().where(
						CustomerDao.Properties.Name.eq(CUS_TEST)).list();
				for(Customer cus:cusList){
						cus.resetOrders();
						result.append("客户:"+cus.getName()+"的点击时间列表:\n");
						for(Order o:cus.getOrders()){
							result.append(o.getDate()+"\n");
						}
					}
					
			}
		});
	}
	

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	public void initDao(){
		DevOpenHelper helper = new DaoMaster.DevOpenHelper(getApplicationContext(),DB_NAME , null);
		SQLiteDatabase db = helper.getWritableDatabase();  
		DaoMaster daoMaster = new DaoMaster(db);  
		daoSession = daoMaster.newSession();  
		noteDao = daoSession.getNoteDao();  
		orderDao=daoSession.getOrderDao();
		cusDao=daoSession.getCustomerDao();
		
	}

}

 

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:scrollbars="@null">
<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="insert "
        android:id="@+id/btnInsert"/>
    <Button
        android:layout_below="@+id/btnInsert"
        android:id="@+id/btnInsertOneToMany"
         android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="insertOneToMany">
    </Button>
    
    <TextView
        android:id="@+id/tvShow"
        android:layout_below="@+id/btnInsertOneToMany"
        android:layout_alignParentBottom="true"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="@string/hello_world" />
</RelativeLayout>
</ScrollView>

 

 

PS: model中的user没能生成成功"Jsonable<User>" 接口没生成,我直接删掉了,没用

freemark.jar直接网上百度下就好,greendao.jar ,greendao-generator.jar在官网下载就行了 http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22de.greenrobot%22%20AND%20a%3A%22greendao%22  

还有,一对多查询时, 多的对象通常会取之前的缓存, cus.resetOrders();//
greendao-generator.jar就是一个自动生成dao和model的工具,和hibernate note有点类似。。

这个框架真不错,当你看到哗啦啦dao model都生成了,太快了,听说性能优化的也很好。所以赶紧用起来。是不是写的很简单?学的时候看各种博客看得吐血,作为菜鸟我只要简单粗暴的怎么用,至于他的怎么好怎么屌慢慢看嘛。你给我分析一大推,真正怎么用写得模糊。看得晕头转向云里雾里最后很可能现烦就放弃了,错过多么好的东西。

  • 大小: 11.4 KB
  • 大小: 11 KB
分享到:
评论
1 楼 wangdefu123 2016-09-27  
—_— 哈哈

相关推荐

    greenDAO3 项目搭建与增删改查操作

    **greenDAO3 项目搭建与增删改查操作** greenDAO 是一个流行的对象关系映射(ORM)库,专门用于Android平台,它使得在Android应用中...通过以上步骤,你可以快速地在项目中搭建greenDAO3,并实现增删改查等基本功能。

    greendao基本配置

    ### Greendao基本配置 Greendao是一款针对Android平台设计的高性能、轻量级的ORM框架,它将数据库操作封装成一系列简洁易用的方法,极大地方便了开发人员进行数据库的增删改查等操作。本文将围绕Greendao的基本配置...

    GreenDaoDemo

    本文将通过分析名为“GreenDaoDemo”的示例项目,深入探讨GreenDao的使用方法和核心特性。 一、GreenDao简介 GreenDao是一款针对Android平台设计的Java库,它允许开发者用面向对象的方式操作SQLite数据库,极大地...

    Android开发艺术探索PDF完整目录版

    1. **基础篇**:这一部分主要讲解Android开发的基础知识,如Android系统架构、环境搭建、UI设计以及基本组件的使用,如Activity、Intent和BroadcastReceiver。读者可以通过这一章节理解Android应用运行的基础框架。 ...

    Android核心技术与实例详解

    这一部分还涵盖了Android应用程序的基本结构,如Manifest.xml文件的作用,Activity、Service、BroadcastReceiver和ContentProvider四大组件的原理和使用方法。此外,还会讲解到UI设计的基础,如布局管理器...

    Android:60个经典示例

    4. **Activity与Intent**:Activity作为Android应用的基本单元,学习如何启动、切换和管理Activity。Intent则用于在组件间传递数据和启动操作。 5. **Fragment**:在大屏幕设备上使用Fragment构建可重用的界面模块...

    Android开发教程&笔记

    3. **基本概念**:讲解Android应用的基本结构,如活动(Activity)、服务(Service)、广播接收者(Broadcast Receiver)、内容提供者(Content Provider)等四大组件,以及布局(Layout)和视图(View)的概念。...

    开发人员_61_it人员简历_程序员简历模板_计算机相关专业.docx

    7. **第三方库使用**:求职者熟悉并能应用如RxJava、OkHttp、XUtils、NoHttp和GreenDao等开源框架。这些框架可以提高开发效率,简化代码,处理网络请求、数据持久化等问题。 8. **文档编写**:能按照规范撰写概要...

    《宅男的android开发指南》(翻译)--1

    使用JUnit和Espresso进行单元测试和UI测试,确保应用的质量和稳定性。 12. **Android组件通信**: 通过Intent进行组件间的通信,使用AIDL实现进程间通信(IPC)。 13. **Android性能优化**: 包括内存优化、...

    疯狂android讲义源代码

    12. **Android框架与库**:源码还可能涉及到一些热门的Android第三方库,如GreenDao、ButterKnife、Gson等,让开发者了解如何引入和利用这些库提升开发效率。 通过深入研究这个源码包,读者不仅可以巩固理论知识,...

    黑马52期android无加密全视频

    这个课程可能包括了从Android环境搭建、编程语言基础(如Java或Kotlin)、Android Studio的使用、UI设计、数据存储、网络请求、多线程、第三方库集成等多个模块。 【描述】中的“更新的链接”意味着这个课程可能...

    Android开发酒店点餐系统(包含客户端和服务端数据库)

    在本项目中,"Android开发酒店...通过学习和实践这个项目,开发者不仅能掌握Android应用的基本开发流程,还能深入了解客户端与服务端之间的数据交换、数据库管理和用户交互设计,对整个酒店点餐系统的运作有深入理解。

    疯狂Android讲义pdf+光盘源码05

    3. **基本组件**:详细讲解Activity、Service、BroadcastReceiver和ContentProvider这四大组件的工作原理及使用方法。 4. **UI设计**:介绍XML布局语言,讲解各种视图控件和布局管理器,以及自定义视图的实现。 5. *...

    mars老师安卓代码

    2. **基本组件**:Activity作为Android应用的基本单元,负责用户界面的展示;Service用于后台运行任务;BroadcastReceiver接收系统广播事件;ContentProvider用于数据共享。 3. **布局设计**:XML文件用于定义UI...

    Android开发权威指南(第二版)附源码-源码.rar

    开发者需要学会使用SDK Manager来管理和更新SDK组件。 3. **布局设计**:XML是定义Android用户界面的主要方式。理解如何创建和管理布局文件,以及使用不同的布局容器如LinearLayout、RelativeLayout、...

    android应用开发详解

    1. **环境搭建**:Android Studio是Android开发的官方集成开发环境(IDE),初学者需要学会下载安装,并配置好Java Development Kit (JDK) 和Android SDK。 2. **AndroidManifest.xml**:这是每个Android应用的核心...

    DryBones:一个骨架Android应用程序

    《DryBones:一个骨架Android应用程序...通过深入研究和学习DryBones项目,开发者不仅可以快速搭建起一个基本的Android应用,还能理解并掌握一系列Android开发的最佳实践和技术,从而提升自己的开发技能和项目管理水平。

    百度地图开发java源码-ElectronicbrandProject:提交项目框架代码

    以上知识点不熟悉的,可以先熟悉下基本知识,如果已经了解过,可以直接跳过下面的链接,直接看下文的使用。 MVP模式 讲解地址: GreenDao 讲解地址: picasso 讲解地址: OKHttp 讲解地址:鸿神的博客讲解地址: ...

    Android-Starter:带有有用库的 Android Starter Project

    **Android-Starter项目详解** ...通过深入研究和学习`Android-Starter`项目,开发者可以掌握Android开发的基本流程、常用库的使用方法以及良好的编程实践,为后续的Android应用开发打下坚实的基础。

Global site tag (gtag.js) - Google Analytics