JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 程式分享區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 簡易的 DAO 物件產生器(Simple DB Object Builder)
brianlin





發文: 22
積分: 0
於 2009-09-07 00:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Simple DB Object Builder 是 Netbeans IDE 的 Plugin。
其用途類似 Hibernate 或 Metalink 的 DAO 物件,但在運作上有些不同。
Simple DB Object Builder 是先查詢資料庫後產出對應 Java 原始碼,之後使用者就直接使用產出 Java 原始碼來對資料庫作操作。

說明和下載:
http://db-obj-builder.sourceforge.net/zh_TW/index.html


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
didifong





發文: 44
積分: 0
於 2009-09-08 20:41 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感覺這個plug-in,很實用哩
不用去規劃一堆東西,就只是很單純
的針對資料庫去Gen出DAO,還真是不錯勒


reply to postreply to post
class Holo
{
public static void main(String arge[])
{
String str = "大家好阿!!";

System.out.print(str);
}
}
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:didifong]
brianlin





發文: 22
積分: 0
於 2009-09-08 21:02 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
謝謝捧場!
我自己的專案都直接採用這個套件。


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
pandalam





發文: 10
積分: 0
於 2009-09-12 00:46 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
在生成的Beans中,的set方法有问题,问题不在本身,而是当用netbeans去设计程式时binding生成的Beans,由于生成的Beans方法中的SetXXX用反回值,因此,Binding的值根本没法set入Bean中。
比如:
Class a{
private String name;
public a(){}
public a SetA(String name){
this.a=a;
return this;
}

}
这里在Binding中不能Set参数入去。


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-12 12:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
pandalam wrote:
在生成的Beans中,的set方法有问题,问题不在本身,而是当用netbeans去设计程式时binding生成的Beans,由于生成的Beans方法中的SetXXX用反回值,因此,Binding的值根本没法set入Bean中。
比如:
Class a{
private String name;
public a(){}
public a SetA(String name){
this.a=a;
return this;
}

}
这里在Binding中不能Set参数入去。

原設計的思維是為了可以作連續屬性設定,如下:
1
2
  Customer cust = ...
  cust.setCustId(1000).setName("John").setAge(10) ;

目前根據你的需求己修正如下:
1
2
3
4
5
6
7
8
9
10
11
12
Class a{
  private String name;
  public a(){}

  public void setA(String name){
    this.a=a;
  }
  public a doSetA(String name){
    this.a=a;
    return this;
  }


設定屬性時不回傳物件本身,若有連續屬性設定需求時則採用 doSetXXX(...) 方法。
請更新 netbeans plugin (version:0.2.2) 套件,再試一次。

說明和下載:
http://db-obj-builder.sourceforge.net/zh_TW/index.html


brianlin edited on 2009-09-12 12:24
reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
pandalam





發文: 10
積分: 0
於 2009-09-13 11:42 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
很好的解决方法,在netbeans已经具有绑定的能力。
1.有一提意,可否在生成的ClassDAO中增加一个static的方法,就是insertClasses(Class[] classes)、updateClass,并运用java.sql.PreparedStatement中的.addBatch()、executeBatch(),这样不但可以方便与Class.queryDB(connect,whereStr)承上启下地提供批量插入、更新、删除。而且用executeBatch()的速度,大处理大量数据时,速度比逐一更新快很多。

2.DAO是否可以提供API,需要网站上有简要说明,但仍有方法未涉及使用,可否提供详细的API呢?
pandalamail@gmail.com


pandalam edited on 2009-09-13 14:45
reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-15 01:26 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
目前先新增下列說明(Table Object 部份):
- 表格欄位會轉換成相對應的屬性欄位
- 自動遞增的流水號欄位
- 取出及設定對應的欄位屬性
- 查詢資料庫的方式

請見說明:
http://db-obj-builder.sourceforge.net/zh_TW/a04_table_info/a04_b02_gen_code_desc.html


brianlin edited on 2009-09-15 01:29
reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-15 02:02 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
pandalam wrote:
1.有一提意,可否在生成的ClassDAO中增加一个static的方法,就是insertClasses(Class[] classes)、updateClass,并运用java.sql.PreparedStatement中的.addBatch()、executeBatch(),这样不但可以方便与Class.queryDB(connect,whereStr)承上启下地提供批量插入、更新、删除。而且用executeBatch()的速度,大处理大量数据时,速度比逐一更新快很多。

目前 DAO 對 insert/update 的處理為每次動態組成所需的 SQL 字串, 再將創建出對應的 preparedStatement. 之後將每個欄位透過 preparedStatement 的 setObject(pIdx,dataVal) 的方式設入. 採用這種設計的理由如下:
1. 可以防止 SQL injection: 你可以輸入欄位值為 "John's son" 的字串, 該值可以直接寫到資料庫中, 而不會破壞原 SQL 語句
2. 不用作型態的轉換: 在 Oracle 上若要以文字的方式輸入日期值時, 需作一些轉換(如: to_date, to_char), 若用 preparedStatement.setObject(...) 則可以直接填入 Timestamp 物件。相較而言,這個方式比較方便。
而 PreparedStatement.addBatch(...) / executeBatch(...) 我比較少用,其用法是將數個完整的 SQL 在一個 request 中一同交付給 Server 執行嗎?是否適合搭配上述的 setObject(...) 的設定方式?

或者你需要的是一個方法如下:
1
2
3
4
  Cust[] custs = ...
  for(Cust cust : custs){
    cust.insertIntoDB(conn);
  }


以我自己的經驗而言,若有大量資料要對資料庫作快速存取時,用 DAO 的效率應該沒有直接用 SQL 來得快吧!


brianlin edited on 2009-09-15 02:10
reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
pandalam





發文: 10
積分: 0
於 2009-09-15 23:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
另一建议:如果DAO可以实现分页,产生数个Class[],就更加好了Big Smile

reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-16 23:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
新增下列說明(Table Object 部份):
- 查詢資料庫的方式(補充)
- 關於 PRIMARY KEY
- 關於 FOREIGN KEY

請見說明:
http://db-obj-builder.sourceforge.net/zh_TW/a04_table_info/a04_b02_gen_code_desc.html


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-16 23:52 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
pandalam wrote:
另一建议:如果DAO可以实现分页,产生数个Class[],就更加好了Big Smile

你是指下列的方法嗎?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Cust[] custs = ...
int maxCnt = 20;
ArrayList<ArrayList<Cust>> custALAL = new ArrayList<ArrayList<Cust>>();
ArrayList<Cust> custAL = new ArrayList<Cust>();
int cnt=0;
for(Cust cust:custs){
  custAL.add(cust);
  if(++cnt>maxCnt){
    cnt=0;
    custALAL.add(custAL);
    custAL = new ArrayList<Cust>();
  }
}
if(custAL.size()>0){
  custALAL.add(custAL);
}


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
J2





發文: 42
積分: 6
於 2009-09-17 14:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
剛剛用了一下
這真是好物阿!!!
想改一下source, 不過看不懂netbeans的plugin的架構阿...囧rz


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-19 15:43 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
新增下列說明(Table Object 部份):
- 新增到資料庫
- 將資料刪除
- 更新資料

請見說明:http://localhost/db-obj-builder/a04_table_info/a04_b02_gen_code_desc.html

Query Object 部份

- 進階應用
請見說明:http://localhost/db-obj-builder/a05_query_info/a05_b02_advance.html

- 產出碼說明
請見說明:http://localhost/db-obj-builder/a05_query_info/a05_b03_gen_code_desc.html


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:J2]
brianlin





發文: 22
積分: 0
於 2009-09-19 15:52 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
J2 wrote:
剛剛用了一下
這真是好物阿!!!
想改一下source, 不過看不懂netbeans的plugin的架構阿...囧rz


若你想改 plugin 部份, 請參考http://platform.netbeans.org/

若你想改產出 Java 碼的內容(如:新增自己的方法或移除自己不需要的方法)
- Table Object
請由 net.sf.dbObjMdl.engine.builder.tbObj.ClzWriter.java 內的 buildJavaFile() 開始, 該方法是使用者按下產出 Java 碼時, 會呼叫到的方法.

- Query Object
請由 net.sf.dbObjMdl.engine.builder.qryObj.QryWriter.java 內的 buildQueryJavaFile() 開始, 該方法是使用者按下產出 Java 碼時, 會呼叫到的方法.


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
pandalam





發文: 10
積分: 0
於 2009-09-21 21:35 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
请问一下,当如果Class[]被Query后回传了集合,对此集合的某些Class作了一些收改或新增,如何可以得到集合内那些Class被修改,那些Class是被新增了?。
原因是我设计程式时用一个jTable装载了Class[]集合,在jTable操作后想批量回传数据库,但又不想把没修改过的物件回传,是否可以从Class中得知是新增的还是被修改的?


reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-22 00:40 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
pandalam wrote:
请问一下,当如果Class[]被Query后回传了集合,对此集合的某些Class作了一些收改或新增,如何可以得到集合内那些Class被修改,那些Class是被新增了?。
原因是我设计程式时用一个jTable装载了Class[]集合,在jTable操作后想批量回传数据库,但又不想把没修改过的物件回传,是否可以从Class中得知是新增的还是被修改的?


這是個好問題,在 0.2.2 版本前無法處理該類需求。

目前根據你的需求作了如下的修正:
- 在 Table Object 物件類中,加了二個屬性: 1. isDirty (type:boolean), 2.usrObj(type:Object)
- isDirty 預設為 true, 可以透過 clearDirtyFlag() 將其設為 false。若該 Table Object 有呼叫到 setXXX(...) 則 isDirty 會被設為 true。
- 當 Table Obejct 對 DB 作過 insert/delete/update 則該 isDirty 其值會被設為 false。
- usrObj 為一個物件容器,讓使用者可以加入有關的旗標值(flag)

我先假設你的需求為:從 DB query 出一個 Cust[] ,其內有 10 個元素。經過使用者操作後,該陣列內的元素已變成 12 個 (其中 2 為新增, 3 個為異動)。如何從該 Cust[] 找出那些為新增?那些為異動?

程式可能的撰寫方式為:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  Cust[] custs = Cust.queryDB(conn,whereStr);
  for(Cust cust:custs){
    cust.clearDirtyFlag();// 清空 dirty 的旗標值
    cust.setUsrObj("QueryFromDB"); // 設定使用者自己的旗標(表示該筆資料為 db query 出來的)
  }
  ...
  // 使用者在此對該 custs 操作(新增 or 異動)
  ...
  //  橾作結束,對 custs 作檢查
  for(Cust cust:custs){
    if (cust.isDirty()) { // 新增 or 異動
      if("QueryFromDB".equals(cust.getUsrObj())){ // 異動
        // do something for 異動
      }else{ // 新增 
        // do something for 新增 
      }
    }
  }


請更新 netbeans plugin (version:0.2.3) 套件,再試一次。

說明和下載:
http://db-obj-builder.sourceforge.net/zh_TW/index.html


brianlin edited on 2009-09-22 00:58
reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
pandalam





發文: 10
積分: 0
於 2009-09-22 17:09 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
哗!这个对我太重要了!!

reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:pandalam]
brianlin





發文: 22
積分: 0
於 2009-09-22 21:43 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
很高興這版本對你有幫助。

reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:brianlin]
Tox





發文: 4
積分: 0
於 2009-11-20 21:19 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問該generator能用於eclipse plug-in或獨立執行的版本嗎? 謝謝

reply to postreply to post
作者 Re:簡易的 DAO 物件產生器(Simple DB Object Builder) [Re:Tox]
brianlin





發文: 22
積分: 0
於 2009-11-21 15:14 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Tox wrote:
請問該generator能用於eclipse plug-in或獨立執行的版本嗎? 謝謝

該 Generator 是基於 Netbeans plug-in 規格所撰寫的, 不能用於 Eclipse.
一個變通的方式為, 先用 Netbeans 將程式碼產出, 再將產出的程式碼置於 Eclipse 的路徑下.
該原始碼已包含所有必要程式碼, 所以 Eclipse 的專案可直接引用.
若日後 DB Schema 有異動的話, 再用 Netbeans 重新產出即可.


brianlin edited on 2009-11-21 15:24
reply to postreply to post
» JWorld@TW »  Java 程式分享區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8