- 浏览: 1756918 次
- 性别:
- 来自: 大连
博客专栏
-
Spring数据库访问系列...
浏览量:173657
-
Android学习笔记
浏览量:368126
-
iBatis开发详解
浏览量:189261
-
Objective-C学习...
浏览量:99838
最新评论
-
iLidy:
引用[/c
Hibernate持久化对象的生命周期详解 -
fengzigogo:
您好,有这个项目架构的源码下载地址吗?
一种Java Web应用开发框架的构建(基于Struts2+Spring+FreeMarker)之一 -
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
用Maven构建Java Web开发环境(Jetty容器)之二 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring 3之MVC & Security简单整合开发(二) -
赵庆辉:
看帖回复是美德,楼主讲的很清晰明了,看了豁然开朗.
Java String对象的经典问题(new String())
为了丰富博客专栏【Spring数据库访问系列】的内容,完善Spring数据库访问的体系,现在我们介绍Spring对iBatis的支持。
相对于Hibernate等ORM框架的全自动SQL,那么iBatis则属于半自动化的ORM框架,我们需要编写SQL语句,由iBatis进行数据库访问,返回结果。而iBatis可以为我们做的更多,比如对查询结果的封装等等。虽然不如全自动SQL方便,但是SQL的主动权却在我们开发人员的手中,对SQL优化的掌控则是很直接的。对于Hibernate和iBatis的其它讨论,不是我们探究的范围。
当前iBatis的版本为3,其名称也已经更改为MyBatis。而Spring更新到3.1都没有对MyBatis进行支持,但是MyBatis团队已经自行开发了Spring的支持。我们以Spring为主,仍然使用对iBatis2的支持来进行说明。
首先是构建开发环境,我们仍然使用Maven作为构建环境,创建项目,本文的示例基于“联系人管理”功能来展示:
编写一个Contact类来描述联系人的一些特征,为了简便,我们使用5个字段就够了,实体类是很简单的。下面是添加类库了,要访问数据库,不能少了数据库驱动,我们使用MySQL数据库,在pom.xml中添加依赖:
同时在数据库中建表,因为iBatis还没有自动建表的功能:
加好驱动,创建好数据库表,那么程序访问需要配置连接池,这里我们使用BoneCP连接池,在pom.xml中加入相关依赖:
因为BoneCP的Maven仓库不在Maven的中央仓库中,所以必须加入以上代码到pom.xml中,这点可以在BoneCP的官方网站(http://jolbox.com/)中获得,下面就是加入依赖了,就没有什么多说的了:
下面配置系统日志,因为引入BoneCP而引入了slf4j,如果自动添加的版本过低,这里我们要重新设置slf4j的版本为1.6.4。那么我们添加logback来设置日志系统:
下面配置logback.xml来配置日志具体项,logback.xml文件需要放置到类路径的根路径下:
这里我们只创建了控制台的Appender,其中设置了日志的格式,编码和需要记录日志的包,并配置响应日志的级别,这都很好理解。下面是添加Spring和iBatis的类库:
Spring的类库添加core,beans,context,jdbc和orm模块即可,其它依赖则会自动添加过来,最终的类库如下图所示:
下面就是构建项目的目录结构:
我们采用分层开发的思想,DAO控制访问数据,Service调用DAO方法,同时在Service层做事务,因为我们不是Web项目,这里没有Web层的框架和Action。Bean包下的实体类Contact前面解释过了,common包下的BaseDAO提供操作iBatis的方法,ParameterMap是我们为iBatis提供参数的对象,dao包下就是DAO对象,service包下放置Service类,sqlMaps包下放置iBatis用到的SQL映射文件。App类是我们的测试类。类路径的根目录下的beans.xml是Spring的配置文件,logback.xml是日志配置文件,sqlMapConfig.xml是iBatis的总配置文件,首先来看sqlMapConfig.xml:
其中就是对iBatis的一些设置,并包含sqlMap文件,很简单,这没有什么可多说的,logback文件前面给出了,下面是Spring的配置文件,首先配置数据源dataSource:
关于BoneCP的介绍网上也有很多,这里不再详细解释各个配置项的含义了,配置好数据源,下面是SqlMapClient,使用Spring的bean工厂来创建,参数是iBatis的总配置文件和数据源,这里我们需要注入配置好的数据源dataSource:
Spring在对iBatis的支持上提供了SqlMapClientTemplate,也就是操作SqlMapClient的模板,这个jdbcTemplate类似,其中的方法使用方式也是类似的,为我们操作iBatis提供了便捷的接口:
数据库操作的bean都配置好了,下面是事务模块的配置,我们抽象出Service层,也是为了方便事务操作,可能一组业务需要操作多个DAO,那么显然不能在DAO层做事务,而在业务层做事务是非常合适的,也符合逻辑,我们使用Spring提供的DataSourceTransactionManager来配置事务管理器:
下面是事务拦截的方法和AOP切入点:
这样,我们对org.ourpioneer.service.*Service中方法名以insert/add/del/update等开头的方法都做上事务了。因为我们使用Spring作为bean容器,那么将DAO和Service也纳入Spring 的管理之中:
这里我们将sqlMapClientTemplate配置到BaseDAO中,而ContactDAO继承BaseDAO即可,同时这里要注意这里我们使用了接口和实现相分离的做法,class中是实现类而不是接口,下面是Service:
配置文件都没有问题了,我们需要把这些涉及到的类都给写出来:
DAO接口仅仅是方法的描述,而实现类中编写具体实现代码:
这里涉及到了BaseDAO,我们来看一下:
调用DAO的Service代码如下:
从Spring的配置文件我们不难理解这些代码的真正含义,就不过多解释,这里用到了一个ParameterMap对象,我们来看一下它的定义:
非常的简单,这样我们在使用的时候就可以按照[名,值,名,值....]这样的格式来放置参数了。本例中涉及到了一个查询叫“getContactById”,它定义在sqlMaps下的contact.xml中,我们来看一下:
首先对ParameterMap和Contact进行别名,为了下面的方便调用,这里我们有一个查询,SQL语句很好理解,select元素的id属性就是它的标识符了,也是sqlMapClientTemplate的queryForObject方法第一个参数,parameterClass指定了参数类,我们使用的是自定义的ParameterMap,resultClass结果类型是我们的实体类对象,这样我们执行这个查询,iBatis会自动为我们封装成一个bean返回,易于调用。
为了测试,我们首先在数据表中插入一条记录:
下面来编写测试代码:
我们从Spring的ApplicationContext中获取到Service对象,然后调用getContactById方法获取结果,下面是运行的结果:
下一篇我们将深入介绍使用SqlMapClientTemplate来操作iBatis进行数据库访问。
相对于Hibernate等ORM框架的全自动SQL,那么iBatis则属于半自动化的ORM框架,我们需要编写SQL语句,由iBatis进行数据库访问,返回结果。而iBatis可以为我们做的更多,比如对查询结果的封装等等。虽然不如全自动SQL方便,但是SQL的主动权却在我们开发人员的手中,对SQL优化的掌控则是很直接的。对于Hibernate和iBatis的其它讨论,不是我们探究的范围。
当前iBatis的版本为3,其名称也已经更改为MyBatis。而Spring更新到3.1都没有对MyBatis进行支持,但是MyBatis团队已经自行开发了Spring的支持。我们以Spring为主,仍然使用对iBatis2的支持来进行说明。
首先是构建开发环境,我们仍然使用Maven作为构建环境,创建项目,本文的示例基于“联系人管理”功能来展示:
package org.ourpioneer.contact.bean; public class Contact { private Long id; private String name; private String gender; private String mobile; private String address; //省略getter和setter方法 @Override public String toString() { return "Contact [id=" + id + ", name=" + name + ", gender=" + gender + ", mobile=" + mobile + ", address=" + address + "]"; } }
编写一个Contact类来描述联系人的一些特征,为了简便,我们使用5个字段就够了,实体类是很简单的。下面是添加类库了,要访问数据库,不能少了数据库驱动,我们使用MySQL数据库,在pom.xml中添加依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.14</version> <type>jar</type> <scope>compile</scope> </dependency>
同时在数据库中建表,因为iBatis还没有自动建表的功能:
CREATE TABLE `contact` ( `ID` int(11) NOT NULL AUTO_INCREMENT , `NAME` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL , `GENDER` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL , `MOBILE` varchar(11) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL , `ADDRESS` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL , PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci AUTO_INCREMENT=1 ROW_FORMAT=COMPACT ;
加好驱动,创建好数据库表,那么程序访问需要配置连接池,这里我们使用BoneCP连接池,在pom.xml中加入相关依赖:
<repositories> <repository> <releases> <updatePolicy>always</updatePolicy> </releases> <snapshots> <updatePolicy>always</updatePolicy> </snapshots> <id>Jolbox</id> <name>Jolbox Repositories</name> <url>http://jolbox.com/bonecp/downloads/maven</url> </repository> </repositories>
因为BoneCP的Maven仓库不在Maven的中央仓库中,所以必须加入以上代码到pom.xml中,这点可以在BoneCP的官方网站(http://jolbox.com/)中获得,下面就是加入依赖了,就没有什么多说的了:
<dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp</artifactId> <version>0.7.1.RELEASE</version> </dependency>
下面配置系统日志,因为引入BoneCP而引入了slf4j,如果自动添加的版本过低,这里我们要重新设置slf4j的版本为1.6.4。那么我们添加logback来设置日志系统:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.0.0</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.0</version> <type>jar</type> <scope>compile</scope> </dependency>
下面配置logback.xml来配置日志具体项,logback.xml文件需要放置到类路径的根路径下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <jmxConfigurator /> <!--输出到控制台,方便调试,应用时切换到文件Log --> <appender name="ConsoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%date %-5level [%logger{80}:%L] - %msg%n </pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 需要记录日志的包 --> <logger name="org.ourpioneer"> <level value="debug" /> </logger> <logger name="org.springframework"> <level value="warn" /> </logger> <root> <level value="warn" /> <appender-ref ref="ConsoleAppender" /> </root> </configuration>
这里我们只创建了控制台的Appender,其中设置了日志的格式,编码和需要记录日志的包,并配置响应日志的级别,这都很好理解。下面是添加Spring和iBatis的类库:
<dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-sqlmap</artifactId> <version>2.3.4.726</version> <scope>compile</scope> </dependency>
Spring的类库添加core,beans,context,jdbc和orm模块即可,其它依赖则会自动添加过来,最终的类库如下图所示:
下面就是构建项目的目录结构:
我们采用分层开发的思想,DAO控制访问数据,Service调用DAO方法,同时在Service层做事务,因为我们不是Web项目,这里没有Web层的框架和Action。Bean包下的实体类Contact前面解释过了,common包下的BaseDAO提供操作iBatis的方法,ParameterMap是我们为iBatis提供参数的对象,dao包下就是DAO对象,service包下放置Service类,sqlMaps包下放置iBatis用到的SQL映射文件。App类是我们的测试类。类路径的根目录下的beans.xml是Spring的配置文件,logback.xml是日志配置文件,sqlMapConfig.xml是iBatis的总配置文件,首先来看sqlMapConfig.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!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" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" /> <sqlMap resource="org/ourpioneer/contact/sqlMaps/contact.xml" /> </sqlMapConfig>
其中就是对iBatis的一些设置,并包含sqlMap文件,很简单,这没有什么可多说的,logback文件前面给出了,下面是Spring的配置文件,首先配置数据源dataSource:
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="123" /> <property name="maxConnectionsPerPartition" value="30" /> <property name="minConnectionsPerPartition" value="10" /> <property name="partitionCount" value="3" /> <property name="acquireIncrement" value="5" /> <property name="statementsCacheSize" value="100" /> <property name="releaseHelperThreads" value="3" /> </bean>
关于BoneCP的介绍网上也有很多,这里不再详细解释各个配置项的含义了,配置好数据源,下面是SqlMapClient,使用Spring的bean工厂来创建,参数是iBatis的总配置文件和数据源,这里我们需要注入配置好的数据源dataSource:
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:sqlMapConfig.xml" /> <property name="dataSource" ref="dataSource" /> </bean>
Spring在对iBatis的支持上提供了SqlMapClientTemplate,也就是操作SqlMapClient的模板,这个jdbcTemplate类似,其中的方法使用方式也是类似的,为我们操作iBatis提供了便捷的接口:
<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <constructor-arg> <ref bean="sqlMapClient" /> </constructor-arg> </bean>
数据库操作的bean都配置好了,下面是事务模块的配置,我们抽象出Service层,也是为了方便事务操作,可能一组业务需要操作多个DAO,那么显然不能在DAO层做事务,而在业务层做事务是非常合适的,也符合逻辑,我们使用Spring提供的DataSourceTransactionManager来配置事务管理器:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean>
下面是事务拦截的方法和AOP切入点:
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="insert*" rollback-for="Exception" /> <tx:method name="add*" rollback-for="Exception" /> <tx:method name="addOrUpdate*" rollback-for="Exception" /> <tx:method name="del*" rollback-for="Exception" /> <tx:method name="update*" rollback-for="Exception" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:pointcut id="serviceMethod" expression="execution(* org.ourpioneer.service.*Service.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" /> </aop:config>
这样,我们对org.ourpioneer.service.*Service中方法名以insert/add/del/update等开头的方法都做上事务了。因为我们使用Spring作为bean容器,那么将DAO和Service也纳入Spring 的管理之中:
<bean id="baseDAO" class="org.ourpioneer.contact.common.BaseDAO"> <property name="sqlMapClientTemplate" ref="sqlMapClientTemplate" /> </bean> <bean id="contactDAO" class="org.ourpioneer.contact.dao.impl.ContactDAOImpl" parent="baseDAO" />
这里我们将sqlMapClientTemplate配置到BaseDAO中,而ContactDAO继承BaseDAO即可,同时这里要注意这里我们使用了接口和实现相分离的做法,class中是实现类而不是接口,下面是Service:
<bean id="contactService" class="org.ourpioneer.contact.service.ContactService"> <property name="contactDAO" ref="contactDAO" /> </bean>
配置文件都没有问题了,我们需要把这些涉及到的类都给写出来:
package org.ourpioneer.contact.dao; import java.util.Map; import org.ourpioneer.contact.bean.Contact; public interface ContactDAO { public Contact getContactById(Map<Object, Object> parameterMap); }
DAO接口仅仅是方法的描述,而实现类中编写具体实现代码:
package org.ourpioneer.contact.dao.impl; import java.util.Map; import org.ourpioneer.contact.bean.Contact; import org.ourpioneer.contact.common.BaseDAO; import org.ourpioneer.contact.dao.ContactDAO; public class ContactDAOImpl extends BaseDAO implements ContactDAO { public Contact getContactById(Map<Object, Object> parameterMap) { return (Contact) getSqlMapClientTemplate().queryForObject("getContactById", parameterMap); } }
这里涉及到了BaseDAO,我们来看一下:
package org.ourpioneer.contact.common; import org.springframework.orm.ibatis.SqlMapClientTemplate; public class BaseDAO { private SqlMapClientTemplate sqlMapClientTemplate; public SqlMapClientTemplate getSqlMapClientTemplate() { return sqlMapClientTemplate; } public void setSqlMapClientTemplate( SqlMapClientTemplate sqlMapClientTemplate) { this.sqlMapClientTemplate = sqlMapClientTemplate; } }
调用DAO的Service代码如下:
package org.ourpioneer.contact.service; import java.util.Map; import org.ourpioneer.contact.bean.Contact; import org.ourpioneer.contact.common.ParameterMap; import org.ourpioneer.contact.dao.ContactDAO; public class ContactService { private ContactDAO contactDAO; public ContactDAO getContactDAO() { return contactDAO; } public void setContactDAO(ContactDAO contactDAO) { this.contactDAO = contactDAO; } public Contact getContactById(long id) { Map<Object, Object> parameterMap = new ParameterMap("ID", id); return getContactDAO().getContactById(parameterMap); } }
从Spring的配置文件我们不难理解这些代码的真正含义,就不过多解释,这里用到了一个ParameterMap对象,我们来看一下它的定义:
package org.ourpioneer.contact.common; import java.util.HashMap; public class ParameterMap extends HashMap<Object, Object> { private static final long serialVersionUID = 1L; public ParameterMap(Object... parameters) { for (int i = 0; i < parameters.length - 1; i += 2) { super.put(parameters[i], parameters[i + 1]); } } }
非常的简单,这样我们在使用的时候就可以按照[名,值,名,值....]这样的格式来放置参数了。本例中涉及到了一个查询叫“getContactById”,它定义在sqlMaps下的contact.xml中,我们来看一下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <sqlMap> <typeAlias alias="parameterMap" type="org.ourpioneer.contact.common.ParameterMap" /> <typeAlias alias="contact" type="org.ourpioneer.contact.bean.Contact" /> <select id="getContactById" parameterClass="parameterMap" resultClass="contact"> select * from contact where ID=#ID:LONG# </select> </sqlMap>
首先对ParameterMap和Contact进行别名,为了下面的方便调用,这里我们有一个查询,SQL语句很好理解,select元素的id属性就是它的标识符了,也是sqlMapClientTemplate的queryForObject方法第一个参数,parameterClass指定了参数类,我们使用的是自定义的ParameterMap,resultClass结果类型是我们的实体类对象,这样我们执行这个查询,iBatis会自动为我们封装成一个bean返回,易于调用。
为了测试,我们首先在数据表中插入一条记录:
INSERT INTO `contact` VALUES ('1', 'Sarin', 'male', '15940912345', 'Dalian');
下面来编写测试代码:
package org.ourpioneer.contact; import org.ourpioneer.contact.bean.Contact; import org.ourpioneer.contact.service.ContactService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { private static final Logger logger = LoggerFactory.getLogger(App.class); public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml"); ContactService contactService = (ContactService) context .getBean("contactService"); Contact contact = contactService.getContactById(1); logger.info("{}",contact); } }
我们从Spring的ApplicationContext中获取到Service对象,然后调用getContactById方法获取结果,下面是运行的结果:
下一篇我们将深入介绍使用SqlMapClientTemplate来操作iBatis进行数据库访问。
发表评论
-
iBatis操作DDL和映射继承
2012-09-09 21:46 9266本文系iBatis开发详解系列文章之iBatis操作D ... -
iBatis查询复杂集合
2012-09-04 20:23 15748本文系iBatis开发详解系列文章之在iBatis查询 ... -
iBatis中使用XML
2012-08-29 19:57 7698本文系iBatis开发详解系列文章之在iBatis中使 ... -
iBatis执行非查询语句(CRUD,函数和过程)
2012-08-26 21:40 9324CRUD操作中除了查询操作,其他都统一称为更新操作,因 ... -
Spring数据库访问之iBatis(二)
2012-06-10 13:56 5792接上文,我们继续来研究Spring和iBatis的整合 ... -
我的视频教程《中小企业OA系统》
2011-07-29 22:27 7749经过5个月的制作,和华章合作的《中小企业OA系统》Ja ... -
iBatis分页(基于Struts2和Freemarker)
2011-05-02 10:05 13109之前介绍过基于Hibernate分页的原理和设计,这里 ... -
Spring数据库访问之ORM(三)
2011-03-02 20:35 17617本文接上一篇继续研究。 之前我们使用的是Hib ... -
Spring数据库访问之ORM(二)
2011-02-16 13:19 23383本文接上一篇继续来研究Spring的ORM模块。 ... -
Spring数据库访问之ORM(一)
2011-01-27 10:54 30806Spring数据库访问中另外一大模块就是ORM,ORM ... -
Spring数据库访问之异常处理
2011-01-19 10:29 27506使用JDBC API时,很 ... -
Spring数据库访问(HSQL)(四)
2011-01-16 21:49 14563本文接上一篇继续研究Spring的JDBC模板。 ... -
Spring数据库访问(HSQL)(三)
2011-01-13 10:07 13438本文接上一篇继续研究JDBC模板。 之前说的都 ... -
Spring数据库访问(HSQL)(二)
2011-01-11 11:27 10730上一篇我们介绍了 ... -
Spring数据库访问(HSQL)(一)
2011-01-09 23:34 13835本部分主要介绍Spring的JDBC模板,JDBC模板 ... -
Spring 3之MVC & Security简单整合开发(三)
2010-12-03 19:04 22065本文接上一篇继续深入研究Security框架。 ... -
Spring 3之MVC & Security简单整合开发(二)
2010-12-01 20:29 60085本文接上一篇继续 ... -
Spring 3之MVC & Security简单整合开发(一)
2010-11-30 22:00 42623Spring的MVC模块是一种简洁的Web应用框架,实 ... -
iBatis查询select详解
2010-08-07 12:19 40529<select>是iBatis已经映射的语 ... -
iBatis查询API
2010-07-31 13:04 17691先说点基础的内容 ...
相关推荐
首先,Spring框架以其强大的依赖注入和面向切面编程闻名,它不仅是一个全面的后端开发框架,还提供了多种数据库访问方式。Spring JDBC模块提供了对JDBC的简单封装,使得编写SQL和处理结果集变得更简洁。同时,Spring...
为了丰富博客专栏【Spring数据库访问系列】的内容,完善Spring数据库访问的体系,现在我们介绍Spring对iBatis的支持。相对于Hibernate等ORM框架的全自动SQL,那么iBatis则属于半自动化的ORM框架,我们需要编写SQL...
在Spring+Struts+ibatis这种经典的Java Web开发框架组合中,主要涉及到三层架构:表现层(Action)、业务逻辑层(Service)和数据访问层(DAO)。这些组件协同工作,实现了应用程序的功能。以下是对各部分的详细解释...
标题中的"spring+struts+ibatis"是指一种经典的Java Web开发架构,也被称为SSM框架。这个架构结合了Spring框架、Struts2框架和iBatis(现在称为MyBatis)来构建高效且可维护的Web应用。下面将详细阐述这三个框架以及...
而Ibatis则是一个轻量级的数据访问层框架,它介于SQL和Java代码之间,允许开发者编写动态和灵活的SQL。 标题“spring与hibernate以及ibatis集成的实例和具体配置图解”表明,这个资料包主要讲解如何将这三个框架...
【Spring_Struts_Ibatis_Mysql Demo】是一个典型的Java Web应用程序示例,它整合了四个关键的技术框架:Spring、Struts、iBatis和MySQL数据库。这个项目旨在展示如何在实际开发中有效地集成这些组件,创建一个功能...
标题 "spring+velocity+ibatis" 暗示了这个项目是基于Spring框架,结合Velocity模板引擎和iBATIS持久层框架构建的一个Web应用程序。这三个技术的整合为开发者提供了高效、灵活的后端架构。 Spring框架是Java企业级...
Spring还提供了数据访问抽象,包括JDBC模板和ORM支持,使得与数据库交互变得更加简单。在本集成中,Spring作为“胶水”将其他框架紧密连接起来。 Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者用...
这四者在实际项目中经常结合使用,Spring可以整合Hibernate和iBatis作为数据访问层,而WebWork(或Struts2)则可以与Spring结合,形成强大的Web应用架构。`Manning@2007 - Spring in Action(2nd Edition).pdf`和`...
iBatis,全称为MyBatis iBatis,是一个基于Java的持久层框架,它简化了数据库与应用程序之间的交互,避免了直接编写大量的...了解并熟练掌握iBatis的基本操作和特性,对于提升Java项目的数据库访问能力具有重要意义。
Spring框架是Java开发领域非常重要的轻量级框架之一,它支持依赖注入、面向切面编程等多种特性。 - **下载地址**:http://www.springframework.org/ - **下载页面**:http://www.springsource.org/download - **...
IBatis 是一个持久层框架,它将 SQL 查询与 Java 代码分离,允许开发者编写 SQL 而不需关心数据访问的细节。IBatis 可以与 ORM(对象关系映射)工具结合,提供灵活的数据访问方式。在 SSI 集成中,IBatis 作为数据库...
Spring 3.2 与 iBatis 的整合是Java企业级开发中常见的一种技术组合,它结合了Spring的依赖注入和事务管理能力以及iBatis的SQL映射框架的灵活性。这种整合允许开发者将业务逻辑与数据访问层解耦,提高了代码的可维护...
iBatis是一个基于Java的持久层框架,它提供了一种将SQL语句映射到Java对象的方法,从而简化了数据访问层的编码工作。iBatis特别适合于那些希望对SQL语句有更多控制权的开发者。 #### 五、配置文件详解 **1. web....
iBatis则是一个持久层框架,它提供了一种将SQL语句与Java代码分离的方法,使得数据库操作更加灵活和可维护。iBatis允许开发者直接编写SQL,避免了ORM(对象关系映射)工具可能带来的性能问题。它与Spring结合使用时...
Spring框架与IBatis(现称为MyBatis)的整合为开发者提供了一种更简洁、更强大的数据库访问方式。Spring通过其内置的支持机制极大地简化了原有的IBatis访问代码,并且提供了与JdbcTemplate一致的异常处理方式。这种...
iBatis与Spring整合后,可以作为数据访问层,处理与数据库的交互。它提供动态SQL支持,可以灵活地调整查询,避免了传统的DAO层的大量重复代码。 **MySQL数据库**: MySQL 5.1是流行的开源关系型数据库管理系统,...
"Spring+Struts+Ibatis"框架组合就是一种经典的Java Web开发架构,它将控制层、业务逻辑层和数据访问层有效地分离开来,使得项目结构清晰,易于维护。下面将详细解释这三个框架的主要功能和它们如何协同工作。 首先...