返回信息流hibernate在对应数据库表的时候,有两各方法,一是在相应的实体类的文件里用注解,另外一种是一个数据库的表配一个*.hbm.xml的配置文件,
刚开始学的时候,用的是hbm.xml的配置文件,后来发现写那个文件太慢了,而且数据库的表太多的时候,那个文件也好多,看得很不爽
然后就换注解试一下,注解写起来快很多,但是在修改的时候去找各个类修改比较麻烦,
而且主要突然想到hbm.xml文件可以用插件自动生成,只需要稍稍修改,这样一来,写配置文件的时间自然就缩短了.
所以在这里想知道,大家平时是用xml配置还是注解配置,希望写下原因,以备学习
这是一条镜像帖。来源:北邮人论坛 / java / #30798同步于 2014/7/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[讨论]Hibernate的注解与xml的选择
melot
2014/7/4镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
我倒是觉得根本问题是Java是静态类型语言而sql是动态类型语言,之间的不匹配导致了需要“对象关系映射”。
要不要换一种编程语言,我希望这样写程序:
// 用一个DAO来封装具体的数据库。反正就算用了对象关系转换也免不了写个DAO。
class DAO {
def studentScores(minScore: Int): Seq[(String, Int)] { // 返回一个列表,每项是一个(姓名,分数)二元组
return dataSource.makeQuery("SELECT name, score FROM students where score >= {1};", minScore) { row =>
(row(0), row(1)) // 因为知道返回值是Seq[(String, Int)],语言可以自动帮你把列转换成String和Int。
} // 这个魔术函数会为你管理数据库建立链接、启动事务、构造sql语句、防护sql注入漏洞、将结果集转换成列表、关闭数据库连接、如果有连接池自动帮你用连接池……
}
}
class User {
val dao : DAO = .....;
def printScores() {
for ((name, score) <- dao.studentScores()) { // 普通的for循环迭代一次查询结果。
printf("%s: %d\n", name, score);
}
}
}
【 在 melot 的大作中提到: 】
: hibernate在对应数据库表的时候,有两各方法,一是在相应的实体类的文件里用注解,另外一种是一个数据库的表配一个*.hbm.xml的配置文件,
: 刚开始学的时候,用的是hbm.xml的配置文件,后来发现写那个文件太慢了,而且数据库的表太多的时候,那个文件也好多,看得很不爽
: 然后就换注解试一下,注解写起来快很多,但是在修改的时候去找各个类修改比较麻烦,
: ...................
再试试这种语言:
var db = ....;
// 这些魔术对象,db表示数据库,student表示一个表;findAll准备一次查询,规定score不小于60,相当于WHERE的用法;keepFields选中某些列,相当于SELECT子句的用法,最后execute()真的执行这次请求。
var results = db.student.findAll({"score >=": 60}).keepFields(["name", "score"]).execute();
foreach (var i in results) {
var row = results[i];
printf("%s: %d\n", row[0], row[1]);
}
【 在 melot 的大作中提到: 】
: hibernate在对应数据库表的时候,有两各方法,一是在相应的实体类的文件里用注解,另外一种是一个数据库的表配一个*.hbm.xml的配置文件,
: 刚开始学的时候,用的是hbm.xml的配置文件,后来发现写那个文件太慢了,而且数据库的表太多的时候,那个文件也好多,看得很不爽
: 然后就换注解试一下,注解写起来快很多,但是在修改的时候去找各个类修改比较麻烦,
: ...................
再试试这种用法:
private DB db = ...
public void printScores() {
var results = FROM student IN db["student"]
WHERE student["score"].asInt() >= 60
SELECT (student["name"].asString(), student["score"].asInt());
foreach (name, score in results) {
Console.Printf("%s: %d\n", name, score);
}
}
好想法,特别是第二个,太对我胃口了,赞
【 在 nuanyangyang 的大作中提到: 】
:
: 再试试这种语言:
: [code=javascript]
: ...................
【 在 melot 的大作中提到: 】
: 好想法,特别是第二个,太对我胃口了,赞
这不只是想法。你看看mongodb。 http://www.mongodb.org/