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这一块,第一次用时,可能不知道在哪里点,像我今天就蒙蔽了,怎么老是报我错。。。源码下载
相关文章推荐
- Android开发 更改返回button的图标
- zzuoj--1001--汽水瓶(简单数学)
- 文章标题
- mac x Yosemide(10.10) 下安装 jdk 1.7 (jdk 1.8) 要求Mac OS X10.7.3或更高版本解决
- 单例模式...(ARC方式)
- CentOS更改yum源与更新系统
- POJ 1852 Ants (贪心)
- C#中异步及winform中界面假死
- OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法
- win32api pywin32 安装后出现 ImportError: DLL load failed
- 搭建MiniGUI开发环境
- CentOS-7-x86_64-DVD-1503-01安装盘中Package包中的 软件
- 25到35的十年该怎么过(转载)
- HDU 2136 Largest prime factor(数论)
- Java事件处理
- 增加辅助的数据库组件
- 增加辅助的数据库组件
- 增加辅助的数据库组件
- Tiny HTTPd 开源web服务器搭建过程
- POJ 3468 A Simple Problem with Integers(线段树|区间加减&&区间求和)