文章转载自:https://www.jiweichengzhu.com/article/4a6486e6d3f141f58da69404e82a79a6
如果还有问题,加群交流:686430774
案例代码下载,请移步原文链接!
三大框架,除了SSH之外,还有一个版本是SSI,struts + spring + ibatis,数据库映射的框架不再是hibernate了,而是ibatis,它对比hibernate相对灵活一些,而且上手更快,它作为mybatis的前身,也在市面上流行了很久,现在几乎不怎么用它了,当年也是做了详细笔记的,本文中整理分享给大家。
记得最开始使用它的时候,还闹了许多笑话,当时maven还没有流行起来,每次都还是需要在项目中单独引包,对于小白的我来说,对jar包都做了很多笔记和备份,深怕哪一天自己做项目找不到ibatis的jar包了。呵呵,废话不多说了,由于前面对ssh框架做了还算详细的讲解,这里也同样不再赘述了,只挑选一些关键点和不同点来讲解。
对于struts还是采用注解的方式,spring框架版本保持不变:
Struts:2.3.24
Spring:3.1.4.RELEASE
Ibatis:2.3.0
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 开启注解扫描,并指定路径 --> <context:component-scan base-package="com.ssi"/> <!-- 加载配置文件,也可以使用下面的方式,更加简洁 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> --> <!-- 加载配置文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 数据源配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!--连接池中保留的最大连接数。Default: 15 --> <property name="maxPoolSize" value="100"/> <!--连接池中保留的最小连接数。 --> <property name="minPoolSize" value="1"/> <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 --> <property name="initialPoolSize" value="10"/> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime" value="30"/> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> <property name="acquireIncrement" value="5"/> <!-- JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。Default: 0 --> <!-- 但由于预缓存的statements 属于单个connection而不是整个连接池。 --> <!-- 所以设置这个参数需要考虑到多方面的因素。 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。 --> <property name="maxStatements" value="0"/> <!--每60秒检查所有连接池中的空闲连接。Default: 0 --> <property name="idleConnectionTestPeriod" value="60"/> <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> <property name="acquireRetryAttempts" value="30"/> <!-- 获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。 --> <!-- 但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。 --> <!-- 如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: false --> <property name="breakAfterAcquireFailure" value="true"/> <!-- 因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的 时候都将校验其有效性。 --> <!-- 建议使用idleConnectionTestPeriod或automaticTestTable,等方法来提升连接测试的性能。Default: false --> <property name="testConnectionOnCheckout" value="false"/> </bean> <!-- Tips:Spring从3.2.0版本开始就不再支持SqlMapClientFactoryBean了 --> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <!--<property name="configLocation" value="/WEB-INF/sqlMapConfig.xml"/>--> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <!-- 需要用这个模板来对数据库进行操作 --> <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="sqlMapClient" ref="sqlMapClient"/> </bean> <!-- 配置事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 支持@Transactional注解(声明式注解) --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
跟hibernate的配置相比,还是有很大变化的,不过最终的目的也是为了配置一个sql模板,用来和数据库做交互。
在当时的笔记中,估计那会儿在看连接池的知识点,所以没有再使用spring的数据源,而是尝试使用了c3p0。
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <!-- 统一设置别名,这样可以全局使用 --> <typeAlias alias="Book" type="com.ssi.entity.Book"/> <typeAlias alias="School" type="com.ssi.entity.School"/> <typeAlias alias="Student" type="com.ssi.entity.Student"/> <!-- 这里要注意,sqlMap标签必须放到typeAlias下面,ibatis的dtd文件是这样定义顺序的 --> <!-- 统一引入映射文件 --> <sqlMap resource="sqlmap/Book.xml"/> <sqlMap resource="sqlmap/School.xml"/> <sqlMap resource="sqlmap/Student.xml"/> </sqlMapConfig>
在ibatis的配置中,跟hibernate一样,也需要引入映射文件,指定alias这个并非是必须的,只是为了在mapper文件中可以少写几个单词,意义不大。
其他的配置跟ssh的注解版差不多,这里就不再贴出来了,大家可以去之前的文章中查看,也可以看代码中的注释。
没多少东西可说,再给大家看一下目录结构: