您的位置:首页 > 其它

ORM greenDAO基本用法

2016-01-01 21:37 483 查看

介绍

greenDAO is a light & fast ORM solution for Android that maps objects to SQLite databases. Being highly optimized for Android, greenDAO offers great performance and consumes minimal memory.

源码:https://github.com/greenrobot/greenDAO

官网:http://greenrobot.org/greendao/

用法

GreenDAO例子

创建一个Java Library Model – greendaogenerator,类名GreenDaoGenerator

greendaogenerator/build.gradle

apply plugin: 'java'

repositories {
mavenLocal()
mavenCentral()
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'de.greenrobot:greendao-generator:2.0.0'
}

sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
}

artifacts {
archives jar
}


GreenDaoGenerator.java

package com.xuie;

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;

/**
* Generates entities and DAOs for the example project DaoExample.
* <p/>
* Run it as a Java application (not Android).
*
* @author Markus
*/
public class GreenDaoGenerator {

public static void main(String[] args) throws Exception {
Schema schema = new Schema(1, "com.xuie.greendaodemo.greendao");

addNote(schema);
addCustomerOrder(schema);

new DaoGenerator().generateAll(schema, "../app/src/main/java");
}

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 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);

ToMany customerToOrders = customer.addToMany(order, customerId);
customerToOrders.setName("orders");
customerToOrders.orderAsc(orderDate);
}
}


编译Java Model

Run>Edit Configurations..>左上角”+”>选中application

Name:geendaogenerator

Main Class:com.xuie.GreenDaoGenerator

Working directory: xxx/GreenDaoDemo/greendaogenerator

再点确定



可以看到运行处出现geendaogenerator,或右键Java Model,执行运行

可以看到,
../app/src/main/java
下,包名
com.xuie.greendaodemo.greendao
目录中产生Java文件(记得先创建好目录),表明运行成功

Android Model添加

app/build.gradle

dependencies {
// ...
compile 'de.greenrobot:greendao:2.0.0'
}


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<EditText
android:id="@+id/editTextNote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Enter new note"
android:imeOptions="actionDone"
android:inputType="text"/>

<Button
android:id="@+id/buttonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onMyButtonClick"
android:text="Add"/>
</LinearLayout>

<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>


MainActivity.java

package com.xuie.greendaodemo;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

import com.xuie.greendaodemo.greendao.DaoMaster;
import com.xuie.greendaodemo.greendao.DaoSession;
import com.xuie.greendaodemo.greendao.Note;
import com.xuie.greendaodemo.greendao.NoteDao;

import java.text.DateFormat;
import java.util.Date;

public class MainActivity extends ListActivity {
private EditText editText;
private SQLiteDatabase db;
private NoteDao noteDao;

private SimpleCursorAdapter adapter;

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

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();

String textColumn = NoteDao.Properties.Text.columnName;
String orderBy = textColumn + " COLLATE LOCALIZED ASC";
Cursor cursor = db.query(noteDao.getTablename(),
noteDao.getAllColumns(), null, null, null, null, orderBy);
String[] from = {textColumn, NoteDao.Properties.Comment.columnName};
int[] to = {android.R.id.text1, android.R.id.text2};

adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor,
from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
setListAdapter(adapter);
cursor.close();

editText = (EditText) findViewById(R.id.editTextNote);
addUiListeners();
}

protected void addUiListeners() {
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
addNote();
return true;
}
return false;
}
});

final View button = findViewById(R.id.buttonAdd);
button.setEnabled(false);
editText.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
boolean enable = s.length() != 0;
button.setEnabled(enable);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void afterTextChanged(Editable s) {
}
});
}

public void onMyButtonClick(View view) {
addNote();
}

private void addNote() {
String noteText = editText.getText().toString();
editText.setText("");

final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
String comment = "Added on " + df.format(new Date());
Note note = new Note(null, noteText, comment, new Date());
noteDao.insert(note);
Log.d("DaoExample", "Inserted new note, ID: " + note.getId());

changeCursor();
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
noteDao.deleteByKey(id);
Log.d("DaoExample", "Deleted note, ID: " + id);
changeCursor();
}

private void changeCursor() {
String textColumn = NoteDao.Properties.Text.columnName;
String orderBy = textColumn + " COLLATE LOCALIZED ASC";
Cursor cursor = db.query(noteDao.getTablename(),
noteDao.getAllColumns(), null, null, null, null, orderBy);

adapter.changeCursor(cursor);
adapter.notifyDataSetChanged();
}

}


注意

这篇博文,主要写的其实是AS编译Java Mode这一块,第一次用时,可能不知道在哪里点,像我今天就蒙蔽了,怎么老是报我错。。。

源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: