我知道休眠但我不知道是否會有一個更輕的ORM引擎的只讀數據庫。我的意思是,我不需要一些事務性查詢或更新某些記錄。另一方面,我需要處理一些大的記錄清單:java ORM只讀DB
List<MyRecord> list= object.getMyRecords(); // list.size() > 1E7
這樣的引擎是否存在? 非常感謝,
皮埃爾
我知道休眠但我不知道是否會有一個更輕的ORM引擎的只讀數據庫。我的意思是,我不需要一些事務性查詢或更新某些記錄。另一方面,我需要處理一些大的記錄清單:java ORM只讀DB
List<MyRecord> list= object.getMyRecords(); // list.size() > 1E7
這樣的引擎是否存在? 非常感謝,
皮埃爾
您可以檢查出JIRM(是的,這是一個無恥的插頭),這是一家專注於使用不可變對象的ORM。
它位於Spring JDBC之上,所以如果你使用Spring,試用它的風險非常低。
它也有很好的SQL placeholder templates不需要春天。
您應該簽出的另一個項目是jOOQ。
如果你正在尋找一個輕量級的ORM框架,那沒有比OrmLite。它允許您避免設置更復雜的ORM框架(如Hibernate)的大部分開銷。這個框架的缺點是它不支持標準的JPA註釋,所以稍後將這個ORM換成另外一個不太容易。
我建議嘗試OpenJPA這是Apache基金會維護的符合JPA標準的ORM框架。它是Hibernate主要競爭對手之一。它確實有更多的開銷來設置,但它的優點是可以讓你在將來換出不同於JPA的框架(如Hibernate),如果它不再適合你的需求。
這兩個框架都是開源的,這也是使用它們的一個很好的理由。
實際上,ORMLite確實支持JPA註釋的一個子集,但不是完整的補充。 – Gray 2010-11-13 14:42:49
我在大約一年前的一個項目中搜索了lite ORM。並嘗試了幾個。我對所有的解決方案都不滿意,因爲他們每個人都試圖朝某個方向前進。
Hibernate是一個巨大的,它可以是一個額外的麻煩,當你只想簡單的解決方案的來源。目前我正在研究一個很好的項目,它使用表格上的小自定義層。
你或許可以嘗試使用一些類似活動記錄或表網關等方式使用JDBC來實現在你的數據庫中的一個小層
任何ORM解決方案只是嘗試是非常統一和廣告額外的尾巴到項目。但是,您可以創建自己的無層次解決方案 - 如果數據庫具有預定義的一組表並且不會經常更改其結構,那麼這樣做尤其可以正常工作。
看一看Ebeans這是一種光ORM工具:
值得看IMO。
Spring的SimpleJDBCTemplate結合了結果映射器在只讀場景中爲我工作的奇蹟,你沒有獲得不必要的休眠開銷,所有的僞ORM映射都捆綁在一起,這對這種場景是一個真正的勝利。
我想你應該考慮MyBatis(IBatis 3)ORM庫。它符合從輕量級工作到重批次執行的要求。所以它會很好地滿足你當前的需求,當你需要從你的底層ORM庫中進行一些繁重的工作時,它不會通過你不幸。
如果您正在尋找一個輕量級的ORM,我會推薦jORM。請注意,我的答案是有偏見的,因爲我是該項目的貢獻者之一。
主要的原因,我們決定寫一個輕量級替代是(的需要):
總之;快速發展。
示例配置
DataSource dataSource = new DataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/moria");
dataSource.setUsername("gandalf");
dataSource.setPassword("mellon");
Database.configure("moria", dataSource); // now there's a named database
實施例記錄
@Jorm(database="moria", table="goblins", id="id")
public class Goblin extends Record {
public Integer getId() {
return get("id", Integer.class);
}
public void setId(Integer id) {
set("id", id);
}
public Integer getTribeId() {
return get("tribe_id", Integer.class);
}
public void setTribeId(Integer id) {
set("tribe_id", id);
}
public Tribe getTribe() {
return get("tribe_id", Tribe.class);
}
public void setTribe(Tribe tribe) {
set("tribe_id", tribe);
}
public String getName() {
return get("name", String.class);
}
public void setName(String name) {
set("name", name);
}
}
實施例映射查詢
Goblin goblin = Record.findById(Goblin.class 42);
List<Goblin> goblins = Record.findAll(Goblin.class);Goblin bolg = Record.find(Goblin.class, new Column("name", "Bolg"));
例的自定義查詢
Tribe tribe = new Tribe();
tribe.setId(1);
String name = "Azog";
Goblin azog = Record.select(
Goblin.class,
"SELECT * FROM goblins WHERE name = #1# AND tribe_id = #2:id#",
name, // #1#
tribe // #2#
);
Goblin bolg = Record.find(Goblin.class, "SELECT * FROM goblins WHERE name = #1#", "Bolg");
這有什麼錯休眠,什麼限制沒有ü到達開始尋找另一個ORM? – Vanger 2010-08-16 08:19:11
我對Hibernate一無所知,但我想知道是否存在另一個ORM。我發現hibernate需要很長時間來設置很多依賴關係,事務是沒用的(在我的情況下),恐怕它不會支持列表中的大量項目。 – Pierre 2010-08-16 08:27:27
對於少數類映射和只讀,我會用一個好的連接池庫(c3p0)和JDBC作爲「光引擎」。 – PeterMmm 2010-08-16 09:51:28