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; } }
分享到:
相关推荐
- **内容概要**:介绍了 Java EE 7 的新特性和改进之处,以及这些特性如何帮助开发者更高效地开发企业应用。 ##### 第2章:上下文与依赖注入 - **关键技术**:CDI 规范,包括 Bean 的管理、依赖注入等。 - **应用...
Spring框架作为Java企业级应用开发的基石,为开发者提供了丰富的功能和强大的支持,尤其是在Java EE 6环境下。这本书深入浅出地讲解了Spring 3.x版本的各个方面,旨在帮助读者掌握如何利用Spring高效地构建Java EE...
这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...
Java EE 6简化了企业级开发,引入了模块化的架构,包括Web Profile和Full Profile。Web Profile为轻量级应用提供必要的服务,如Servlet、JSP和JSF,而Full Profile包含所有API,适合大型企业应用。关键更新包括:...
在这个"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进行高效的企业级应用开发。这三者结合在一起,形成了...
在本资源中,"java web 2.0架构开发与项目实战 源代码01",我们聚焦于Java Web应用程序的开发,特别是在Web 2.0时代的技术和实践。Web 2.0是一个概念,它强调互联网作为交互式平台,用户参与度更高,社交网络和富...
6. **Java Blend**:随着Web Services等新技术的出现,Java EE逐渐与其他技术融合,形成了更加灵活和强大的开发框架。 7. **超越Java EE**:尽管Java EE在企业级开发中占据主导地位,但也有越来越多的开发者开始探索...
### Java+架构系列培训课程:JBOSS SEAM开发详解 #### 为什么选择JBOSS SEAM?...SEAM和Facelets的结合,不仅提升了Java Web应用的开发效率,还增强了应用的交互性和可维护性,是现代Java EE项目中的关键技术之一。
在探讨一种Java EE多层架构下的大学物理实验系统设计与实现中,我们需要关注几个核心知识点:Java EE技术框架、MVC设计模式、Maven项目管理工具、SSH2框架以及系统架构。 首先,Java EE(Java Platform, Enterprise...
首先,Java Server Faces(JSF)是Sun Microsystems开发的一个MVC(模型-视图-控制器)框架,其设计目标是简化Java Web应用程序的开发。JSF的核心理念是将UI组件与业务逻辑分离,使得开发者可以专注于业务逻辑的实现...
《基于Java EE资产管理系统的设计与实现》是一份深入探讨如何运用Java EE技术构建高效、可靠的资产管理系统的技术文档。本文档详细阐述了系统设计的核心概念、技术选型、架构设计以及实现过程,旨在为读者提供一个...
根据提供的文件内容,我们可以提炼出以下知识...通过入门级实例开始讲解,逐步深入探讨组件架构和功能,可以使学员在具备初步知识的基础上,对组件进行更深入的理解,并通过实例来提高操作能力,从而迅速积累开发经验。
在“Java开发项目学习”这个主题中,我们可以深入探讨Java编程语言在实际项目中的应用,特别是涉及到了Java的几个核心框架。这些框架是Java开发者在构建复杂应用时的常用工具,能够提高开发效率,增强代码的可维护性...
6. **EJB 3.0**:EJB 3.0是Java EE 5中的企业组件模型,简化了Bean的开发。将介绍无状态会话Bean、有状态会话Bean、消息驱动Bean以及Entity Bean的新特性。 7. **JMS(Java Message Service)**:讲解如何使用JMS...
SmartClient Ajax框架架构专注于创建富客户端应用,利用Ajax技术实现页面的无刷新更新。 Oracle和MySQL是两种广泛应用的关系型数据库管理系统,它们在数据存储、查询优化、事务处理等方面各有特点。 Android架构则...
《Thinking in Enterprise Java》是一本深入探讨企业级Java开发的权威著作。这本书旨在帮助开发者理解如何在复杂的商业环境中有效地利用Java技术。以下是对标题和描述中所涉及知识点的详细阐述: 1. **企业级Java...
- **SSH2集成框架**:SSH2指Struts2、Spring和Hibernate三种技术的集成使用,这是一种广泛应用于Java EE开发的流行架构。其中: - **Struts2**:提供MVC(Model-View-Controller)模型的支持,实现界面、业务逻辑...
《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发》是一本深入探讨Java EE企业级应用开发的经典著作。该书重点介绍了如何利用Struts 2、Spring和Hibernate这三大流行框架进行高效集成,实现轻量...