翻了翻老帖子,看到Robbin当年下站贴说实现同样需求对比Java代码和RoR代码(http://www.iteye.com/topic/57075?page=1),我始终搞不明白为什么说ActiveRecord是充血模型,而将DAO和Domain分开就不是了,对于我的那个封装JDBC(见原帖),我又把Hibernate和Spring加进来,进一步模仿了一下RoR,先看测试:
public void testEmployeeExtendsBase(){
//按ID查询
Employee e=new Employee();
e=(Employee) e.findById(43442l);
System.out.println(e.getFullName());
//查询
Employee e2=new Employee();
e2.setFullName("张三");
String effectiveDateProperty = "effectiveDate";
Date lo = getSwitchDate("2005-01-03");
Date hi = getSwitchDate("2010-09-02");
Criterion effectiveDateRange = Restrictions.between(
effectiveDateProperty, lo, hi);
/* 仿效RoR代码:
def processing_tasks
find :all, :conditions => ["start_time <= ? AND end_time is null", Time.now]
end */
List<Employee> employees=(List<Employee>)e2.find_All(effectiveDateRange);
for(Employee emp:employees){
System.out.println("员工编号:"+emp.getId()+"|| 员工姓名:"+emp.getFullName());
}
}
再看Employee代码
@Entity
@Table(name = "Employee")
public class Employee extends Base{
@Id
private Long id;
private String fullName;
private Date effectiveDate;
private Department department;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public Date getEffectiveDate() {
return effectiveDate;
}
public void setEffectiveDate(Date effectiveDate) {
this.effectiveDate = effectiveDate;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
我和firebody的实现不太一样(http://www.iteye.com/topic/65406),Base继承了泛型DAO,并且动态注入子类,和SessionFactory,而SessionFactory由Spring初始化。
我的find_all是个多态方法,可以放入Criterion... criterion,HQL,并且内部基于一个QBE+QBC的查询,并且这个QBE是经过扩展的,它支持关联关系。
如果POJO或者实体类可以强制继承某个基类了,如本文的Base,我们又回到了EJB时代,独立测试的领域模型不见了。
从来都没有人说过一定要一个Service配一个DAO,一个DAO配一个Entity,这完全取决于你的需要,然后采取的不同模式!
分享到:
相关推荐
在Web开发中,确保用户提交的数据安全、有效是至关重要的。... 1. **基本概念** ... ...2. **表单提交与数据接收** ...结合"源码"和"工具"标签,我们可以学习到实际应用中的代码示例和可能使用的验证工具。
标题中的“答复: 一道经典线程面试题的4种解法”暗示了这是一个关于多线程编程的问题,通常在面试中出现,用于评估候选人的并发处理能力。在这个问题中,可能涉及到同步、线程安全、锁机制等关键概念。 在Java中,...
标题中的“答复: 通过代码简单介绍JDK 7的MethodHandle,并与.NET的委托对比(二)”表明本文将深入探讨Java中的MethodHandle概念,并将其与.NET平台上的委托进行对比。MethodHandle是JDK 7引入的一个强大特性,它...
- 肯定答复与否认答复:对一般疑问句的回答,肯定答复用“Yes, + 主语 + 助动词/情态动词。”,否定答复用“No, + 主语 + 助动词/情态动词 + not。” 2. 具体题目解答: - 1. It is fun at school. 否认句:It is...
博文链接:https://eric2007.iteye.com/blog/158580
2013年5月14日,美国COSO如期发表了新的内部控制框架。因为正值国内的内部控制实施的高潮,COSO新的内控框架在国内引起了很多兴趣。笔者也接到了来自媒体和业内专家的一些询问,本文就是对这些问题的答复的汇总。 ...
- 使用JUnit等测试框架,编写可重复的、可维护的测试用例。 9. **版本控制** - 使用Git进行版本控制,遵循良好的提交和分支管理策略,如Git Flow。 10. **持续集成与持续部署(CI/CD)** - 配置自动化构建和测试...
我们不仅仅只是提供技术,我们还会引导您应该如何使用好技术。Rose规范了对Spring的使用,虽然大部分时间之内,您可能只是使用 @Autowired 即可,大多数时候的确这样也就够了。但 Rose 也允许您放置...
根据给定文件内容,我们可以提炼出以下知识点: 1. 智能化可视框架的定义与必要性 智能化可视框架是一种将数据和信息通过视觉方式呈现给用户的方法。在信息技术迅猛发展的今天,随着信息源的不断扩大和网络应用的...
交通行政复议答复意见书是行政复议程序中被申请人(通常是交通行政机关)对申请人提出的行政复议申请进行回应的法律文件。以下是该文件涉及的主要知识点: 1. 行政复议制度:行政复议是公民、法人或其他组织对行政...
标题中的“答复:答复‘通向开放未来的捷径’”暗示了这是一篇对某个讨论或议题的回应,特别是关于开放科学和知识发布的路径。在描述中提到的SpringerNature是一家知名的学术出版机构,它涉及的社论可能讨论了如何在...
以下是对13种法定公文写作框架的详细解析: 1. **命令(令)**:这种公文具有高度权威性,主要用于公布法规、规章或实施重要行政措施,通常结构简洁,包括原由、内容要求和希望或要求。 2. **决定**:决定用于安排...
### 在Word2021中如何答复批注 #### 知识点概述 在Microsoft Word 2021中,用户可以通过多种方式对文档中的批注进行答复。这对于团队协作和文档审查非常重要,因为它允许作者和其他参与者就文档内容的具体部分进行...
本资源摘要信息涵盖了 18 种常见的事务公文写作的基本框架,涵盖计划、汇报、调查报告、讲话稿、演讲词、答复、责任书、公开信、倡议书、建议信、新闻发布稿和总结等多种文书体裁。 1. 计划 计划是安排工作性质的...
掌握这些公文写作的基本框架,能帮助我们更有效地组织和表达意图,提高公文的专业性和有效性。在实际写作中,还需要根据具体情境灵活运用,确保公文内容清晰、准确、完整,符合公文写作的规范和要求。
这种转换能力不仅测试了我们对英语句型的理解,也是衡量英语运用能力的一个关键指标。 首先,我们要了解句型转换的基本规律。对于含有be动词、助动词或情态动词的句子,转换时遵循一定的规则。例如,在肯定句变否定...
【OA答复原则及策略】 在专利申请过程中,审查意见通知书的答复是一项至关重要的任务,它直接关系到专利能否顺利授权。以下将详细阐述OA答复的原则和策略,以及如何理解和分析审查意见通知书。 首先,理解审查意见...
理解并妥善答复审查意见通知书对于专利申请的成功至关重要。下面详细阐述在答复审查意见通知书时应注意的几个关键知识点。 1. 审查意见通知书的分类和内容: 审查意见通知书主要分为两类:第一次审查意见通知书和...