ORM greenDAO基本用法

来源:互联网 发布:被子哪个牌子好 知乎 编辑:程序博客网 时间:2024/04/27 00:38

介绍

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这一块,第一次用时,可能不知道在哪里点,像我今天就蒙蔽了,怎么老是报我错。。。

源码下载

0 0
原创粉丝点击