`
yingfang05
  • 浏览: 121582 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

无框架架构模型探讨:简化的Java EE开发之二

阅读更多
ORM 可以做什么
基础规范的不足

jdbc 是java 应用程序数据持久化的基础,也是众多数据库厂商与java 的接口。直接使用jdbc 编写代码非常繁琐,比如数据库资源的获得和释放,异常捕获和事务处理等等,重复代码多是他的一个特点。另外,不同的数据库,在数据类型,主键类型还是sql 语句都和SQL 标准小有出入,所以如何使应用程序可以在不同数据库平台方便的迁移,也是个问题。

开发框架的解决方案

spring 和hibernate 的出现使情况大为好转,spring 面向切面管理事务, hibernate 自动ORM 可以大大简化开发,spring 和hibernate 都有.net 的版本,这证明了他们的成功。但是“用好hibernate ,需要扎实的掌握关系模型和SQL ”,同时对面向对象设计和hibernate 自身的运行机制也要有非常清晰的认识,只有这种水平才能发挥hibernate 的威力,降低hibernate 带来的风险。所以,在合适的层面上配置好spring 的事务管理,设计好对象模型,把对hibernate 的直接使用控制在一定范围内是设计者要解决的基本问题。如果设计不佳,或者直接交给初出校门的开发者去用,那这种组合就会变成洪水猛兽,同时也不利于团队成员的成长。

我们的选择

如果只有jdbc ,我们的系统也可以工作,只不过要写很多重复和机械的代码,通过框架的ORM 的映射,可以将数据库表的数据自动填入javabean ,这节省了劳动力,也使系统结构自然清晰。如果不用ORM 工具,我们能不能通过某种形式来模拟他的行为呢?我们可以创建这样一个接口:

Java代码


public interface IOper {              boolean load(Connection connect) throws SQLException;              boolean add(Connection connect) throws SQLException;              boolean update(Connection connect) throws SQLException;              boolean delete(Connection connect) throws SQLException;          }    
在接口中定义 CRUD 方法。返回类型为 boolean 而非影响的行数,意图是对象内部的操作可能是复杂的多步骤的,所以对他的上层应用来说,知道结果成功与否就可以了。接下来在他的实现类里可以这么写:

Java代码


public class Worker implements IOper {              // Fields         private Integer workerId;              private String workerName;              private String logonName;              private String logonPwd;              /*         * 对于允许为空的字段赋予初始值,避免页面显示null         */         private String mobile = "";              private String email = "";              private String remark = "";              private String isFreeze = "0";              // Constructors              /** default constructor */              // Property accessors               public boolean add(Connection connect) throws SQLException {              SQLBuffer sql = new SQLBuffer();              sql.segment("insert into worker (worker_name,logon_name,logon_pwd,");              sql.segment("mobile,email,remark,is_freeze) values (");              sql.value(this.workerName);              sql.comma();              sql.value(this.logonName);              sql.comma();              sql.value(this.logonPwd);              sql.comma();              sql.value(this.mobile);              sql.comma();              sql.value(this.email);              sql.comma();              sql.value(this.remark);              sql.comma();              sql.value(this.isFreeze);              sql.segment(")");             return Proxy.update(connect, sql) == 1;          }              public boolean delete(Connection connect) throws SQLException {             // 冻结用户              SQLBuffer sql = new SQLBuffer();              sql.segment("update worker set is_isfreeze = ");             this.isFreeze = "1";              sql.value(this.isFreeze);              sql.segment(" where worker_id = ");              sql.value(this.workerId);             return Proxy.update(connect, sql) == 1;          }              public boolean load(Connection connect) throws SQLException {              SQLBuffer sql = new SQLBuffer(                     "select worker_name,logon_name,logon_pwd,mobile,email,remark,is_freeze from worker");              sql.segment(" where worker_id = ");              sql.value(this.workerId);              MapRow mr = Proxy.getMapRow(connect, sql);             if (mr == null) {                 return false;              }             this.workerName = mr.getString("worker_name");             this.logonName = mr.getString("logon_name");             this.logonPwd = mr.getString("logon_pwd");             this.mobile = mr.getString("mobile");             this.email = mr.getString("email");             this.remark = mr.getString("remark");             this.isFreeze = mr.getString("is_freeze");             return true;          }              public boolean update(Connection connect) throws SQLException {              SQLBuffer sql = new SQLBuffer();              sql.segment("update worker set worker_name = ");              sql.value(this.workerName);              sql.segment(", logon_name = ");              sql.value(this.logonName);              sql.segment(", logon_pwd = ");              sql.value(this.logonPwd);              sql.segment(", mobile = ");              sql.value(this.mobile);              sql.segment(", email = ");              sql.value(this.email);              sql.segment(", remark = ");              sql.value(this.remark);              sql.segment(", is_freeze = ");              sql.value(this.isFreeze);              sql.segment(" where worker_id = ");              sql.value(this.workerId);             return Proxy.update(connect, sql) == 1;          }     }    
分享到:
评论

相关推荐

    Beginning Java EE 7.pdf

    - **内容概要**:介绍了 Java EE 7 的新特性和改进之处,以及这些特性如何帮助开发者更高效地开发企业应用。 ##### 第2章:上下文与依赖注入 - **关键技术**:CDI 规范,包括 Bean 的管理、依赖注入等。 - **应用...

    Spring 3.x 权威指南:实施Java EE 6 的利器

    Spring框架作为Java企业级应用开发的基石,为开发者提供了丰富的功能和强大的支持,尤其是在Java EE 6环境下。这本书深入浅出地讲解了Spring 3.x版本的各个方面,旨在帮助读者掌握如何利用Spring高效地构建Java EE...

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...

    java ee 6 with glassfish 3

    Java EE 6简化了企业级开发,引入了模块化的架构,包括Web Profile和Full Profile。Web Profile为轻量级应用提供必要的服务,如Servlet、JSP和JSF,而Full Profile包含所有API,适合大型企业应用。关键更新包括:...

    Cairngorm+java EE 例子源码

    在这个"Cairngorm+Java EE"的例子中,我们可以探讨以下几个关键知识点: 1. **Cairngorm框架**:Cairngorm的核心是其MVC设计模式,它将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分,...

    轻量级Java_EE企业应用实战_Struts_2+Spring_3+Hibernate整合开发_第3版

    《轻量级Java_EE企业应用实战_Struts_2+Spring_3+Hibernate整合开发_第3版》这本书深入探讨了在Java EE环境下如何利用轻量级框架Struts 2、Spring 3和Hibernate进行高效的企业级应用开发。这三者结合在一起,形成了...

    java web 2.0架构开发与项目实战 源代码01

    在本资源中,"java web 2.0架构开发与项目实战 源代码01",我们聚焦于Java Web应用程序的开发,特别是在Web 2.0时代的技术和实践。Web 2.0是一个概念,它强调互联网作为交互式平台,用户参与度更高,社交网络和富...

    Real World Java EE Patterns Rethinking Best Practices

    6. **Java Blend**:随着Web Services等新技术的出现,Java EE逐渐与其他技术融合,形成了更加灵活和强大的开发框架。 7. **超越Java EE**:尽管Java EE在企业级开发中占据主导地位,但也有越来越多的开发者开始探索...

    java+架构系列培训课程_JBOSS_SEAM开发

    ### Java+架构系列培训课程:JBOSS SEAM开发详解 #### 为什么选择JBOSS SEAM?...SEAM和Facelets的结合,不仅提升了Java Web应用的开发效率,还增强了应用的交互性和可维护性,是现代Java EE项目中的关键技术之一。

    一种Java EE多层架构下的大学物理实验系统.pdf

    在探讨一种Java EE多层架构下的大学物理实验系统设计与实现中,我们需要关注几个核心知识点:Java EE技术框架、MVC设计模式、Maven项目管理工具、SSH2框架以及系统架构。 首先,Java EE(Java Platform, Enterprise...

    《Java EE 5开发基础与实践》第5章课件

    首先,Java Server Faces(JSF)是Sun Microsystems开发的一个MVC(模型-视图-控制器)框架,其设计目标是简化Java Web应用程序的开发。JSF的核心理念是将UI组件与业务逻辑分离,使得开发者可以专注于业务逻辑的实现...

    基于Java EE资产管理系统的设计与实现.zip

    《基于Java EE资产管理系统的设计与实现》是一份深入探讨如何运用Java EE技术构建高效、可靠的资产管理系统的技术文档。本文档详细阐述了系统设计的核心概念、技术选型、架构设计以及实现过程,旨在为读者提供一个...

    JAVA EE教程详解,很详细的

    根据提供的文件内容,我们可以提炼出以下知识...通过入门级实例开始讲解,逐步深入探讨组件架构和功能,可以使学员在具备初步知识的基础上,对组件进行更深入的理解,并通过实例来提高操作能力,从而迅速积累开发经验。

    java开发项目学习

    在“Java开发项目学习”这个主题中,我们可以深入探讨Java编程语言在实际项目中的应用,特别是涉及到了Java的几个核心框架。这些框架是Java开发者在构建复杂应用时的常用工具,能够提高开发效率,增强代码的可维护性...

    Beginning_Java_EE_5_From_Novice_to_Professional-39_beginning jav

    6. **EJB 3.0**:EJB 3.0是Java EE 5中的企业组件模型,简化了Bean的开发。将介绍无状态会话Bean、有状态会话Bean、消息驱动Bean以及Entity Bean的新特性。 7. **JMS(Java Message Service)**:讲解如何使用JMS...

    方案设计架构图汇总情况-java技术框架.doc

    SmartClient Ajax框架架构专注于创建富客户端应用,利用Ajax技术实现页面的无刷新更新。 Oracle和MySQL是两种广泛应用的关系型数据库管理系统,它们在数据存储、查询优化、事务处理等方面各有特点。 Android架构则...

    Thinking in Enterprise Java

    《Thinking in Enterprise Java》是一本深入探讨企业级Java开发的权威著作。这本书旨在帮助开发者理解如何在复杂的商业环境中有效地利用Java技术。以下是对标题和描述中所涉及知识点的详细阐述: 1. **企业级Java...

    java ee电子商城系统课程设计.docx

    - **SSH2集成框架**:SSH2指Struts2、Spring和Hibernate三种技术的集成使用,这是一种广泛应用于Java EE开发的流行架构。其中: - **Struts2**:提供MVC(Model-View-Controller)模型的支持,实现界面、业务逻辑...

    轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书2

    《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发》是一本深入探讨Java EE企业级应用开发的经典著作。该书重点介绍了如何利用Struts 2、Spring和Hibernate这三大流行框架进行高效集成,实现轻量...

Global site tag (gtag.js) - Google Analytics