⑴ android green 修改方法怎麼寫
關於greenDao的使用
第一篇How to get started ?
原文地址:http://green-orm.com/documentation/how-to-get-started/
該教程會帶你瀏覽一個簡單的greenDao示例工程。地址:https://github.com/greenrobot/greenDAO,該工程包含兩個子工程:
DaoExample和DaoExampleGenerator。你可以clone到本地,運行或者直接在github上直接瀏覽。
如果你從git倉儲中檢出了DaoExample,可以直接像Android應用一樣運行它。正如你所看到的,它就是一個簡單的筆記本。可以添加新的note,
或者點擊已存在的note進行刪除。
預生成代碼和創建表
在src-gen目錄下,你可以找到一些已經生成的文件
1)Note.java 一個包含一個Note所有數據的java類。
2)NoteDao.java 一個DAO類,是操作Note 對象的介面。
你可以通過DaoExampleGenerator工程再次生成Note和NoteDao。
使用DaoMaster類可以獲得一個方便的SQLiteOpenHelper:
new DaoMaster.DevOpenHelper(this, "notes-db", null)
你不必編寫「CREATE TABLE」 SQL語句,greenDao會為你完成。
插入和刪除Note對象
創建了Note表後,就可以存儲一些note到資料庫里了。這是在NoteActivity類里完成的。在onCreate方法里,我們准備了一個DAO對象:
1 2 3 Master = new DaoMaster(db); Session = Master.newSession(); noteDao = Session.getNoteDao();
添加一個新的note到資料庫中:
1 2 3 Note note = new Note(null, noteText, comment, new Date()); noteDao.insert(note); Log.d("DaoExample", "Inserted new note, ID: " + note.getId());
該示例只是創建並插入了一個java對象。但insert方法返回的時候,資料庫的ID已經分發到了剛插入的Note對象上了。在log中可以看到。
刪除一條note:非常簡單明,在onListItemClick方法中可以看到
1 noteDao.deleteByKey(id);
你也可以看一下其它的DAO方法:loadAll、update。
數據模型化和代碼的生成
為了擴展note或者創建新的實體,你可以看一下DaoExampleGenerator工程。它包含了一個單例的類,該類中包含了數據模型的定義代碼。
1 2 3 4 5 6 7 Schema schema = new Schema(1, "de.greenrobot.example"); Entity note= schema.addEntity("Note");note.addIdProperty(); note.addStringProperty("text").notNull(); note.addStringProperty("comment");note.addDateProperty("date"); new DaoGenerator().generateAll("../DaoExample/src-gen", schema);
正如你所看到的,你可以創建一個Schema對象,通過它你可以添加實體,一個實體連接了一張資料庫表。
一個實體包含一些屬性,它們可以被映射到資料庫的columns。
一旦schema定義完成,你可以觸發代碼生成器,Note.java和NoteDao.java文件就是這樣被創建的。
下一步:
對greenDao有了初步的了解,你可以自己動手試試了。當然,請查看下文檔http://green-orm.com/documentation/,
如果沒有找到你想要的,可以使用support options
第二篇 介紹
GreenDao是一個用於Android開發的對象/關系映射(ORM)工具。它向SQLite資料庫提供了一個對象導向的介面。像GreenDao這樣的ORM工具不僅為你省去了很多的重復工作,而且提供了更簡便的操作介面。
代碼生成的工程結構圖
為了在你的Android項目中使用GreenDao,你需要創建一個二級工程:「generator project」,它的任務就是為你的domain生成具體的代碼。這個生成器工程就是一個普通的java工程。確保greenDao 的greenDao-generator.jar和 freemarker.jar 在classpath中。創建一個可執行的java類,構建你的實體模型並觸發代碼生成器,更多細節,可以參看 modelling文檔。
核心類
一旦生成了指定的代碼,就可以在你的android工程中使用greenDao了。別忘記在你的android工程中引入greenDao的核心jar包:greenDao.jar。以下是GreenDao的一些必要介面。
DaoMaster:
master以一定的模式持有資料庫對象(SQLiteDatabase)並管理一些DAO類(而不是對象)。
有一個靜態的方法創建和drop資料庫表。它的內部類OpenHelper和DevOpenHelper是SQLiteOpenHelper的實現類,用於創建SQLite資料庫的模式。
DaoSession:
管理指定模式下所有可用的DAO對象,你可以通過某個get方法獲取到。DaoSession提供一些通用的持久化方法,比如對實體進行插入,載入,更新,刷新和刪除。最後DaoSession對象會跟蹤identity scope,更多細節,可以參看 session文檔。
DAOs(Data access objects):
數據訪問對象,用於實體的持久化和查詢。對於每一個實體,greenDao會生成一個DAO,相對於DaoSession它擁有更多持久化的方法,比如:載入全部,插入(insertInTx,語境不明了,暫且簡單的翻譯成插入)。
實體
可持久化的對象。通常,實體可以被生成,不用手動去寫。在資料庫的行中,使用的都是標準的java對象的屬性(比如POJO或者JavaBean)。
1 2 3 4 user.addIdProperty(); user.addStringProperty("name"); user.addStringProperty("password");user.addIntProperty("yearOfBirth");
在示例中有一個Note實體,通過它的DAO,我們可以對指定的實體進行持久化的操作。
第三篇 實體的模型化
使用greenDao的第一步:創建一個代表持久化數據的實體模型。greenDao會依賴該模型為Dao生成java代碼。
該模型本身是用java代碼定義的,很簡單:在DaoExampleGenerator工程的基礎上創建一個java對象。具體你可以參看:
http://green-orm.com/documentation/how-to-get-started/
下面的插圖描繪了元模型,展示了一些用於描述domain具體模型的類。
Schema
實體數據schema是你定義的第一個對象,通過schema的版本和預設的java包調用構造器。
1 Schema schema = new Schema(1, "de.greenrobot.example");
這個預設的java包會在greenDao生成實體、DAOs、和JUnit測試的時候使用。如果那些預設值是正確的,那麼就完成了第一步。
如果你希望將DAO和測試類創建到不同的包中,可以重新定義schema的定義代碼:
1 2 schema.setDefaultJavaPackageTest("de.greenrobot.example.test");schema.setDefaultJavaPackageDao("de.greenrobot.example.");
對於實體,該schema也有兩個預設的標記,它們是可以被復寫的。這些標記可以區分實體是否是激活狀態,是否應該使用sections。這些特性在文檔里並沒有,你可以看一下發布源碼中的測試工程。
1 2 schema2.enableKeepSectionsByDefault(); schema2.enableActiveEntitiesByDefault();
實體
一旦你擁有了一個schema對象,你就可以使用它去添加實體了。
1 Entity user = schema.addEntity("User");
一個實體有不同的可變更設置,更重要的是,你可以添加一些屬性到實體。
1 2 3 4 user.addIdProperty(); user.addStringProperty("name"); user.addStringProperty("password");user.addIntProperty("yearOfBirth");
除了實體,還可以添加,一對一和一對多的關系。
屬性和主鍵
以上的實體部分展示了如何給一個實體添加屬性,實體的addXXXProperty方法返回一個PropertyBuilder對象,可以用於配製屬性,
例如,使用columnName去復寫預設的或者你提供的column name。在ProperyBuilder對象上調用getProperty方法去訪問屬性對象,
對於指數(indices )和關系的創建是有必要的。
創建主鍵的約束
現在實體必須擁有一個long或者Long類型的屬性作為它們的主鍵,這是Android和SQLite推薦的實踐方式。因為,在將來,greenDao要准備處理很多主鍵的腳本,但並不是每件事都能完全實現。為了解決這個問題,你可以使用一個long類型的鍵並且使用一個唯一的下標去處理這個預期的key屬性。
預設
greenDao會嘗試以合理的預設值進行工作,所以開發者不用單個的配置它們。比如,表和其列名是從實體和屬性名中獲取到的,而不是java中的駝峰。預設的資料庫名是大寫的,單詞間用下劃線分隔開。比如:屬性「creationDate」在資料庫列中的映射為「CREATION_DATE」,
關系
一對多和多對多的關系在http://green-orm.com/documentation/relations/中有注釋。
繼承、介面、序列化
實體可以從其他非實體類繼承,其父類可以通過setSuperclass(String)方法指定,注意:它可能會有其它的實體作為父類(但這里沒有多態查詢)。
比如:
1 myEntity.setSuperclass("MyCommonBehavior");
通常,使用介面作為實體屬性和行為的通用基類是比較好的。比如:一個實體A和B共享了一套屬性,這些屬性可以定義在C中。下面是一個序列化B的列子:
1 2 3 entityA.implementsInterface("C"); entityB.implementsInterface("C"); entityB.implementsSerializable();
觸發生成器
一旦你的實體schema放置好了,你可以觸發代碼生成器進行處理。在generator工程中,你可以實例化DaGenerator並調用generateAll中的一個方法:
1 2 DaoGenerator Generator = new DaoGenerator(); Generator.generateAll(schema, "../MyProject/src-gen");
你所需要的就是schema對象和目標文件夾,通常該文件夾就是你android工程的資源文件夾。如果你想把這些測試類放到其他目錄下,可以把目的文件夾作為第三個參數傳入。
保持獨立性(Keep sections 保持自定義的代碼不會被覆蓋)
實體類在每一次生成器運行的時候都會被覆蓋。greenDao允許添加自定義的代碼到實體,通過「keep」 ,可以滿足它們。在schema中使用enableKeepSectinsByDefault(),或者setHasKeepSections(true)在選中的實體中。一旦使用,3個獨立的部分會在實體中生成:
1 2 3 4 5 6 7 8 // KEEP INCLUDES - put your custom includes here // KEEP INCLUDES END ... // KEEP FIELDS - put your custom fields here // KEEP FIELDS END ... // KEEP METHODS - put your custom methods here // KEEP METHODS END
現在,你可以在 KEEP [...] and KEEP [...] END.中寫入你的代碼。注意,不要修改KEEP注釋。在該范圍的代碼會在代碼重新生成的時候不被覆蓋。對於備份或者提交代碼時出現的意外錯誤,這是一個不錯的選擇解決方案。
⑵ android green框架中,多表怎麼插入數據和關聯數據
一.下載GreenDao
要使用肯定要先下載他的軟體包了,官網上有它的連接,對於marven和gradle環境直接到serarch.maven.org上下載jar包就好了。
首先我們要創建javagenerator工程green-generator-1.3.0.jar 和 freemarker-2.3.20.jar是我們創建javagenerator工程時生成Dao文件需要用到的(什麼是我說的Dao文件,往下看就會知道)
green-1.3.7.jar是Android開發中需要用到的
二.創建generator工程(用來生成GreenDao開發過程中需要的java文件)
(1)創建Java工程(非Android工程)
(2)導入greenDao-generator.jar和freemarker.jar兩個包。freemarker是一個用java寫的模板引擎,它能夠基於模板來生成文本輸出。應該就是用來自動生成DAO文件的。eclipse下面就是在properties–> Java build path –> libraries下面導入jar包。
(3)創建一個包javagreen
(4)創建一個類,類名為ExampleDaoGenerator,類的定義如下:
package javagreen;
import de.greenrobot.generator.DaoGenerator;
import de.greenrobot.generator.Entity;
import de.greenrobot.generator.Property;
import de.greenrobot.generator.Schema;
import de.greenrobot.generator.ToMany;
/**
* Generates entities and DAOs for the example project DaoExample.
*
* Run it as a Java application (not Android).
*
* @author Markus
*/
public class ExampleDaoGenerator
{
//總之main函數就執行了下面幾個函數
public static void main(String[] args) throws Exception
{
// 參數3是資料庫版本號,「com.cn.speedchat.green」是包名,也就是說生成的Dao文件會在這個包下,可以將Schema理解為資料庫上下文吧
Schema schema = new Schema(3, "com.cn.speedchat.green");
//addNote() addSession() addReplay()這三個函數相當於建立了三個表,表名你都可以不用管了會自動生成
addNote(schema);
addSession(schema);
addReplay(schema);
addCustomerOrder(schema);
//這個是生成Dao文件的路徑的位置,這個代表當前工程的上一級目錄的javagreen的src-gen文件夾裡面,其實就是跟src同一級目錄,所以你自己要在src同一級目錄下新建一個src-gen文件夾待會要生成的文件
new DaoGenerator().generateAll(schema, "../javagreen/src-gen");
}
//這個是一個Note表,然後後面的node.add***是表的欄位名以及屬性
private static void addNote(Schema schema)
{
//"MqttChatEntity"相當於是表的類名,用MqttChatEntity生成對象就可以訪問這個表屬性了,也就是這個表對應了這個類,待會使用你就會明白了
Entity note = schema.addEntity("MqttChatEntity");
note.addIdProperty().autoincrement();
note.addIntProperty("mode").notNull();
note.addStringProperty("sessionid").notNull();
note.addStringProperty("from").notNull();
note.addStringProperty("to").notNull();
note.addStringProperty("v_code");
note.addStringProperty("timestamp").notNull();
note.addStringProperty("platform");
note.addStringProperty("message");
note.addBooleanProperty("isread").notNull();
note.addLongProperty("gossipid");
note.addStringProperty("gossip");
note.addIntProperty("chattype").notNull();
note.addStringProperty("imagepath");
note.addStringProperty("base64image");
}
//這個是一個Session表,然後後面的node.add***是表的欄位名以及屬性(這是我寫的會話的一個表)
private static void addSession(Schema schema)
{
Entity note = schema.addEntity("SessionEntity");
note.addIdProperty().autoincrement();
note.addStringProperty("sessionid").notNull().unique();
note.addStringProperty("from").notNull();
note.addStringProperty("to").notNull();
note.addLongProperty("gossipid").notNull();
note.addStringProperty("gossip");
note.addIntProperty("sessiontype").notNull();
note.addBooleanProperty("asdasd").notNull();
}
//這個是一個Replay表,然後後面的node.add***是表的欄位名以及屬性(這是我寫的回復的一個表)
private static void addReplay(Schema schema)
{
//ReplayEntity對應的類名
Entity note = schema.addEntity("ReplayEntity");
note.addIdProperty().autoincrement();
note.addIntProperty("mode").notNull();
note.addStringProperty("from").notNull();
note.addStringProperty("to").notNull();
note.addStringProperty("v_code");
note.addStringProperty("timestamp").notNull();
note.addStringProperty("platform");
note.addStringProperty("message");
note.addIntProperty("msgtype").notNull();
note.addBooleanProperty("isread").notNull();
}
//這個不用管了,照抄吧
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);
}
}
1)增加表如果你自己想加一些其他的表的話,你可以自己按照addSession,addNote ,addReplay三個函數的方式加,類名、欄位名可以自己隨便取比如說,比我我要加一個用戶表,欄位包括name,age,sex三個,我可以這樣做
private static void addUser(Schema schema)
{
Entity note = schema.addEntity("UserEntity");
note.addIdProperty().autoincrement();
note.addStringProperty("name").notNull();
note.addIntProperty("age").notNull();
//true代表男,false代表女
note.addBooleanProperty("sex").notNull();
}
然後在main函數裡面做如下調用
public static void main(String[] args) throws Exception
{
Schema schema = new Schema(3, "com.cn.speedchat.green");
addNote(schema);
addSession(schema);
addReplay(schema);
addUser(schema);
addCustomerOrder(schema);
new DaoGenerator().generateAll(schema, "../javagreen/src-gen");
}
2)刪除表當然一些不需要的表你可以不用,刪掉就行,比如說你不須要addReplay,你就在main函數裡面別調用addReplay(schema)就行
總之呢,這就是一個基於greenDao-generator.jar和freemarker.jar兩個包的java工程
然後運行該工程,控制台列印出如下結果:
greenDAO Generator Copyright 2011-2013 Markus Junginger,
greenrobot.de. Licensed under GPL V3. This program comes with
ABSOLUTELY NO WARRANTY Processing schema version 3… Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/MqttChatEntityDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/MqttChatEntity.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/SessionEntityDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/SessionEntity.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/ReplayEntityDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/ReplayEntity.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/CustomerDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/Customer.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/OrderDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/Order.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/DaoMaster.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/DaoSession.java
Processed 5 entities in 189ms
這代表成功的生成了Dao文件,然後我們按F5刷新該工程,在查看src-gen目錄文件,自動生成了很多java文件,這就是我們要的,我這里截圖給大家看
但是有很多錯誤是不是,沒關系,這個工程識別不了這些文件,這些文件是基於green-1.3.7.jar包的,是Android工程裡面要用到的。先不管這個java工程了。
⑶ android ormlite green 哪個好
推薦你用GreenDao,因為greenDAO的運行效率最高,內存消耗最少,性能最佳
之前自己看過 幾篇文章。給你參考。