看了Ibatis也有好长时间啦,一直也没有和Struts2+Spring2.5进行整合,今天也没有什么任务,写一个简单的例子和大家一起分享下。
首先建立一下简单的数据库表:sbook
在MyEclipse建立Web工程springibatis,然后把工程所要使用的Jar文件导入:
以上就是工程中所用到的全部Jar文件。
现在在Web.xml文件里面为Spring和Struts2做必要的配置:
好了现在Web.xml文件已经配置完成啦。
现在转入真正要写代码的地方啦。 :D
首先为sbook表建立必要发POJO类:
这里的属性和数据库sbook表的字段是一一对应的,当然你也可以改成自己想要的字段,在控制此POJO类的XMl文件里做到数据库字段的映射即可。
[color=darkred]
现在请注意啦,到Spring和Ibatis集成配置的关键地方啦:[/color]
applicationContext.xml
其中sqlMapConfig.xml文件配置Ibatis操作:
此处仅用到了SBook.xml文件,所以只需要导入此文件即可,下面来看一下真正处理数据库操作的SBook.xml文件的信息:
applicationContext-services.xml处理业务层和事务控制:
上面是对Spring事务和业务层的控制配置。
剩下的就是对DAO层和Services层以及Action层啦,这里就不在对此部分内容进行详细描述啦,如果感兴趣的朋友,请下载源代码查看。
首先建立一下简单的数据库表:sbook
drop table if exists sbook;
create table if not exists sbook
(
id int primary key auto_increment,
title varchar(50),
author varchar(20),
total int,
price float,
isbn varchar(20),
publisher varchar(50)
);
在MyEclipse建立Web工程springibatis,然后把工程所要使用的Jar文件导入:
antlr-2.7.2.jar
aspectjweaver.jar
commons-collections.jar
commons-dbcp.jar
commons-logging-1.0.4.jar
commons-pool.jar
//Ibatis整体Jar文件
ibatis-2.3.0.677.jar
//Mysql JDBC驱动
mysql-connector.jar
//Spring整体包
spring.jar
//struts2必须
freemarker-2.3.8.jar
//struts2必须
ognl-2.6.11.jar
//struts2核心包
struts2-core-2.0.11.2.jar
//struts2整合Spring插件
struts2-spring-plugin-2.0.11.2.jar
//struts2必须
xwork-2.0.5.jar
以上就是工程中所用到的全部Jar文件。
现在在Web.xml文件里面为Spring和Struts2做必要的配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/classes/com/us/jack/config/applicationContext.xml
WEB-INF/classes/com/us/jack/config/applicationContext-services.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 配置Struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
好了现在Web.xml文件已经配置完成啦。
现在转入真正要写代码的地方啦。 :D
首先为sbook表建立必要发POJO类:
package com.us.jack.pojo;
/**
* 图书类
* @author jack
*
*/
public class SBook {
private int id;
private String title;
private String author;
private int total;
private float price;
private String isbn;
private String publisher;
//下面是Getter和Setter方法
……
}
这里的属性和数据库sbook表的字段是一一对应的,当然你也可以改成自己想要的字段,在控制此POJO类的XMl文件里做到数据库字段的映射即可。
[color=darkred]
现在请注意啦,到Spring和Ibatis集成配置的关键地方啦:[/color]
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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/ibatisstudy" />
<property name="username" value="root" />
<property name="password" value="jack" />
</bean>
<!-- SqlMap setup for iBATIS Database Layer -->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<!-- 特别注意此处,如果做单元测试的话,请把“WEB-INF/classes/”去掉,否则会报找不到sqlMapConfig.xml文件 -->
<property name="configLocation"
value="WEB-INF/classes/com/us/jack/config/sqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 注入BookDAO层 -->
<bean id="sbookDAO" class="com.us.jack.dao.impl.SBookDAO">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
</beans>
其中sqlMapConfig.xml文件配置Ibatis操作:
<?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>
<sqlMap resource="com/us/jack/dao/impl/maps/SBook.xml"/>
</sqlMapConfig>
此处仅用到了SBook.xml文件,所以只需要导入此文件即可,下面来看一下真正处理数据库操作的SBook.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="sbook" type="com.us.jack.pojo.SBook" />
<!-- 添加一本新书 -->
<insert id="saveBook" parameterClass="sbook">
<selectKey keyProperty="id" resultClass="int">
<![CDATA[
SELECT LAST_INSERT_ID() AS VALUE
]]>
</selectKey>
<![CDATA[
INSERT INTO sbook(title,author,total,price,isbn,publisher)
VALUES(#title#,#author#,#total#,#price#,#isbn#,#publisher#)
]]>
</insert>
<!-- 删除图书 -->
<delete id="deleteBook" parameterClass="int">
<![CDATA[
DELETE FROM SBOOK WHERE ID=#id#
]]>
</delete>
<!-- 通过出版社名称查找此出版社出版的图书 -->
<select id="findBookByPublisher" parameterClass="string"
resultClass="sbook">
<![CDATA[
SELECT * FROM sbook WHERE publisher=#publisher#
]]>
</select>
<!-- 通过图书唯一的ISBN号码查找图书 -->
<select id="findBookByISBN" parameterClass="string"
resultClass="sbook">
<![CDATA[
SELECT * FROM sbook WHERE isbn=#isbn#
]]>
</select>
<!-- 查找所有的图书 -->
<select id="findAllBook" resultClass="sbook">
<![CDATA[
SELECT * FROM sbook
]]>
</select>
<!-- 更新图书信息 -->
<update id="updateBook" parameterClass="sbook">
<![CDATA[
UPDATE SBOOK SET
title=#title#,author=#author#,price=#price#,total=#total#,isbn=#isbn#,publisher=#publisher#
WHERE id=#id#
]]>
</update>
<!-- 查找特定图书 -->
<select id="findBookById" parameterClass="int" resultClass="sbook">
<![CDATA[
SELECT * FROM sbook WHERE ID=#id#
]]>
</select>
</sqlMap>
applicationContext-services.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="sbookServices" class="com.us.jack.services.impl.SBookServices">
<property name="sbookDAO" ref="sbookDAO"/>
</bean>
<!-- 将BookAction交给Spring控制 -->
<bean id="sbookAction" class="com.us.jack.action.SBookAction">
<property name="sbookServices" ref="sbookServices"/>
</bean>
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<aop:config>
<!-- 管理事务操作 -->
<aop:pointcut id="servicesPointcut"
expression="execution(* com.us.jack.services.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="servicesPointcut" />
</aop:config>
<!-- 事务控制 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="get*" read-only="true" />
</tx:attributes>
</tx:advice>
</beans>
上面是对Spring事务和业务层的控制配置。
剩下的就是对DAO层和Services层以及Action层啦,这里就不在对此部分内容进行详细描述啦,如果感兴趣的朋友,请下载源代码查看。