1: spring框架介绍
Spring框架是一个分层架构,由7个定义好的模块组成。Spring模块构建在核心容器上,核心容器定义了创建、配置和管理bean的方式。
每个模块的功能如下:
核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现,BeanFactory使用控制反转(IoC)模式将应用程序的配置和依赖性规范与实际的应用代码分开。
Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息,Spring上下文包括企业服务,例如,JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring框架中,所以,可以很容易地使用Spring框架管理任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务,通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO(DAO Access Object)抽象层提供了有意义的异常层次机构,可用该机构管理异常处理和不同数据库供应商抛出的错误消息。异常层次机构简化了错误处理,并且极大地降低了需要编写地异常代码数量]。Spring DAO的面向JDBC的异常遵从通用的DAO异常层次机构。
Spring ORM:Spring框架插入了若干个Object/Relation Mapping框架,从而提供了ORM的对象关系映射工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从Spring的通用事务和DAO异常层次机构。
Spring Web模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring框架支持与Struts的集成。Web模块还简化了处理多部分请求,以及将请求参数绑定到域对象的工作。
Spring MVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现,通过策略变为可配置的,MVC容纳了大量视图技术,其中包括JSP等。
Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境,Spring的核心要点是支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
2: Ibatis介绍
纵观目前主流的ORM,无论Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。
大多数情况下(特别是对新项目,新系统的开发而言),这样的机制无往不利,大有一统天下的势头。但是,在一些特定的环境下,这种一站式的解决方案却未必灵光。如:
1 系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开[6]。
2 开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现。
3 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。“半自动化”的ibatis,却刚好解决了这个问题。这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM 实现而言,“全自动”ORM 实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。而ibatis 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。
使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。相对Hibernate等“全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间[8]。作为“全自动”ORM实现的一种有益补充,ibatis 的出现显得别具意义。
3 DAO数据存取
J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开.实现DAO模式能够更加专注于编写数据访问代码.
DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO实现有下列几个组件:
1 一个DAO工厂类;
2 一个DAO接口;
3 一个实现DAO接口的具体类;
4 数据传递对象(有些时候叫做值对象).
在源程序的一个包中放置的是已经封装好的底层数据库连接组件,也就是所谓的DAO(Data Access Object)组件[11]。DAO组件的主要功能是提供数据库存取服务。通过这一组封装好的组件,可以完成以下的功能:从系统的配置文件中读取系统的配置参数,该配置文件中存放的是连接数据库的配置。
4 配置Sql-map-config.xml
Sql-map-config文件是负责前台业务和后台数据库交互的一个配置文件:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="256"
maxSessions="100"
maxTransactions="100"
useStatementNamespaces="true"
/>
/*中间为由生成jar包工具生成的各个表的xml文件,用到的数据库表,必须在该文件中配置,否则,将不起作用;
<sqlMap resource="com/zzxy/mvc/dao/atom/maps/CF_AJXX.xml"/>
………
</sqlMapConfig>
其中,我们所写的各个固定的配置文件也必须写在该配置文件中。
5 配置applicationContext.xml
applicationContext.xml文件是基本的配置文件, 放置在你所创建工程的WEB-INF中,所用的技术为Spring+Ibatis,也是该框架的基础,所有的业务开发,都要建立在该配置文件上面;
5.1 配置方法
该配置文件分为四个部分:
(1):文档开头定义
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
(2):数据源定义和SqlMapClient为IBATIS数据库层设定
<bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:OracleDS"/>
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
<!-- SqlMapClient setup for iBATIS Database Layer -->
<bean id="SqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource"><ref local="DataSource"/></property>
<property name="configLocation">
<value>WEB-INF/sql-map-config.xml</value>
</property>
</bean>
注意这部分代码, 定义sqlMapClient时,configLocation的value需要定义为<value>WEB-INF/sql-map-config.xml</value>,否则会引起很多错误;
(3): DAO的定义和Ibatis 的实现的class文件路径:
<bean id="publicDao" class="com.zzxy.mvc.mis.dao.custom.PublicDaoImp">
<property name="dataSource"><ref local="DataSource"/></property>
<property name="sqlMapClient" ref="SqlMapClient"/>
</bean>
<bean id="cf_ajxx_dao" class="com.zzxy.mvc.dao.atom.impl.CF_AJXX_DAOImp">
<property name="dataSource"><ref local="DataSource"/></property>
<property name="sqlMapClient" ref="SqlMapClient"/>
</bean>
….
(4):定义数据层和数据库层的接口
DC为所有的dao的集合
<bean id="DC" class="com.zzxy.mvc.mis.dao.DaoCollection">
<property name="publicDao" ref="publicDao"/>
<property name="cf_ajxx_dao" ref="cf_ajxx_dao"/>
…………
</bean>
</beans>
6 MVC架构
MVC架构为目前很流行的系统架构。
MVC最初是在Smalltalk-80中被用来构建用户界面的。M代表模型Model, V代表视图 View, C代表控制器Controller。
MVC的目的是增加代码的重用率,减少数据表达,数据描述和应用操作的耦合度。 同时也使得软件可维护性,可修复性,可扩展性,灵活性以及封装性大大提高。
单用户的应用通常是以事件驱动的用户界面为组织结构的。开发人员用一个界面工具画了一个用户接口界面,然后编写代码根据用户输入去执行相应的动作,许多交互式的开发环境鼓励这么做,因为它强调先有界面然后再有功能。一些软件设计模式策略是这样的,然后经常将固定后的代码融入最后的系统当中。导致的结果就是,程序组织围绕用户界面元素和用户在那些界面元素上的动作,数据的存储,应用的功能以及用来显示的代码都杂乱无章的缠绕在一起。在单用户的系统里代码结构是可以这样的,因为系统需求不会频繁变化。但是对一个大的系统如大型Web系统,或电子商务系统来说就不太适用了。
通过把数据模式从各种可以被存取和控制的数据中分离出来可以改善分布式系统的设计。MVC设计模式由三部分组成。模型是应用对象,没有用户界面。视图表示它在屏幕上的显示,代表流向用户的数据。控制器定义用户界面对用户输入的响应方式,负责把用户的动作转成针对Model的操作。Model 通过更新View的数据来反映数据的变化。
三者关系如图: