技术开发 频道

Hibernate vs. Rails:数据持久化


    显式定义的价值


    那么什么是显式定义的价值呢?Rails的活动记录的关键特性之一就是不需要为类指定字段,而这一切由Rails根据数据表中的字段动态确定。也就是说,当数据表改变后,无需改变类定义即可和数据表保持一至。如果你有一个叫“miners”的表,它的定义如下:

create table miners ( id BIGINT NOT NULL AUTO_INCREMENT, first_name VARCHAR(255), last_name VARCHAR(255), primary key (id) )
    相应的ruby类(miner.rb)和这个类的用法如下:

class Miner < ActiveRecord::Base end miner.first_name = "Brom"
    和Rails不同,Hibernate类(Miner.java)需要指定字段、getters和setters方法以及xdoclet标签,代码如下:
package deadwood; /** * @hibernate.class table="miners" */ public class Miner { private Long id; private String firstName; private String lastName; /** * @hibernate.id generator-class="native" */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @hibernate.property column="first_name" */ public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } /** * @hibernate.property column="last_name" */ public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } } miner.setFirstName("Brom");
    在这之前我已经提到,Rails和Hibernate都需要指定字段名。所不同的是,Hibernate的字段是在代码中指定,而Rails的活动记录是根据数据表的字段动态指定的。即Hibernate是静态的,而活动记录是动态的。所以当你查看Ruby代码时,你将看到…

class GoldClaim < ActiveRecord::Base end
    Rails虽然在映射字段方面很简单,但问题是我们怎么知识对象中有多少个字段?当然,为了知道答案,你必须启动MySQL或其它数据库的前端管理程序,查看数据库表中到底有哪些字段。当数据库中的表或视图比较少时,这当然不是问题。但是当你的工程中的表或视图超过40个或更多时,这将是非常令人痛苦的事情。至于开发人员具体喜欢哪种方式,这可能取决于它们的偏好。但可以肯定地说,将要映射的字段显式地定义在代码中将更容易理解和修改。
0
相关文章