我知道hibernate,但我想知道只读数据库是否会有更轻的ORM引擎。我的意思是,我不需要一些事务性查询或更新一些记录。另一方面,我需要处理一些大型记录列表:
List<MyRecord> list= object.getMyRecords(); // list.size() > 1E7
这种引擎存在吗? 非常感谢,
皮尔
答案 0 :(得分:2)
你可以查看 JIRM (是的,这是一个无耻的插件),这是一个专注于使用不可变对象的ORM。
它位于Spring JDBC之上,因此,如果您使用的是Spring,那么尝试它的风险非常低。
它也非常好SQL placeholder templates,不需要Spring。
您应该结帐的另一个项目是jOOQ。
答案 1 :(得分:1)
如果您正在寻找轻量级ORM框架,请查看OrmLite。它允许您避免设置更复杂的ORM框架(如Hibernate)的大部分开销。这个框架的缺点是它不支持标准的JPA注释,因此以后将这个ORM换成不同的ORM并不容易。
我建议尝试OpenJPA,它是由Apache基金会维护的符合JPA标准的ORM框架。它是Hibernate的主要竞争对手之一。它确实有一些设置开销,但它的优势在于,如果它不再适合您的需要,它允许您将来交换出来用于不同的JPA兼容框架(如Hibernate)。
这两个框架都是开源的,这也是使用它们的一个很好的理由。
答案 2 :(得分:1)
大约一年前,我也为一个项目搜索过精简版ORM。并尝试了其中几个。我对所有解决方案都不满意,因为他们每个人都试图朝着某个方向前进。
Hibernate是一个巨大的问题,当你想要简单的解决方案时,它可能会成为额外麻烦的来源。目前我正在研究一个很好的项目,它使用很少的自定义图层表。
您可以尝试使用JDBC使用某些模式(如Active Record或Table Gateway等)在数据库上实现一个小层。
任何ORM解决方案都会尝试非常统一,并为您的项目添加额外的广告。但是你可以创建自己的自定义无层解决方案 - 如果数据库具有预定义的表集并且不经常更改它的结构,这将特别有效。
答案 3 :(得分:1)
查看Ebeans这是一个简单的ORM工具:
值得一看IMO。
答案 4 :(得分:1)
我认为你应该考虑MyBatis(IBatis 3)ORM库。它符合轻量级工作和一些重型批量执行的要求。因此,当您需要从基础ORM库中进行繁重的工作时,它将非常适合您当前的需求并且不会让您失去运气。
答案 5 :(得分:0)
Spring的SimpleJDBCTemplate结合结果映射器在只读场景中为我做了奇迹,你没有得到hibernate不必要的开销,你所有的伪ORM映射捆绑在一起,这是这种场景的真正胜利。
答案 6 :(得分:0)
如果您正在寻找轻量级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");