`

Struts2+Spring2.5+Ibatis2.3图书管理

阅读更多
   看了Ibatis也有好长时间啦,一直也没有和Struts2+Spring2.5进行整合,今天也没有什么任务,写一个简单的例子和大家一起分享下。
   首先建立一下简单的数据库表: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文件已经配置完成啦。
    现在转入真正要写代码的地方啦。
   首先为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文件里做到数据库字段的映射即可。
   
现在请注意啦,到Spring和Ibatis集成配置的关键地方啦:

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层啦,这里就不在对此部分内容进行详细描述啦,如果感兴趣的朋友,请下载源代码查看。
分享到:
评论
16 楼 xuyoubin1987 2012-06-11  
谢了  支持楼主
15 楼 wx_hello 2011-12-15  
哈哈。。谢啦。。
14 楼 wuhongyu 2009-06-15  
不错的小例子,正在学这个,听说我们的下个项目是struts2+spring+ibatis,这里感谢了先
13 楼 haishou520 2009-05-31  
也学习一下吧。
12 楼 InnocentBoy 2009-04-30  
支持楼主,确实是不错的,至少可以帮助很多学习者!
11 楼 aquleo 2009-04-21  
不错的例子...学习了...
10 楼 mikeandmore 2009-04-21  
话说这个应该算不上企业应用吧。。。

PS。听说图书馆的管理系统是COBOL派一直控制着。。。嗯嗯。
9 楼 walle1027 2009-04-21  
caipanjin 写道
楼主既然用Spring 2.5,为什么不用一下Annotation方式的IoC呢

annotation虽然好用,但是也要改代碼。
8 楼 javajdbc 2009-04-20  
2.0 和 2.5 有什么区别没 ?
7 楼 InnocentBoy 2008-10-30  
学习中......
6 楼 pobaby 2008-10-30  
caipanjin 写道
楼主既然用Spring 2.5,为什么不用一下Annotation方式的IoC呢


楼主的jar包是2.0 不是spring2.5,2.5的新特性估计还不是太多人使用。
5 楼 caipanjin 2008-10-09  
楼主既然用Spring 2.5,为什么不用一下Annotation方式的IoC呢
4 楼 coolstar648 2008-10-08  
楼主的例子很好啊。
3 楼 largelove 2008-10-01  
weblogic jvm内存设置好像是2.2G左右。tomcat,jboss不知道多少。我这里有一个应用,一群程序员把数据取出来生成excel,然后3个人同时访问jvm就高达1G,应用没办法跑,后来限制weblogic queue,就是那个页面只能跑一个queue,其他人是进不来的。
2 楼 largelove 2008-10-01  
看上楼上说会话跟踪,我突然有个问题,一直不太明白。请问session的保存需要多少内存? 还有这个内存是占用服务器本身的内存还是占用jvm的内存?

如果是占用jvm内存,如果我有1000个人甚至10000个,那jvm内存不是很快就用完了?
1 楼 jy02411368 2008-09-29  
以后不断的推出好的 例子 另外JACK我想建议一下 尽量把代码写规范 例如你在开发项目的时候一个登陆 需要坐许多 例如会话跟踪之类的 希望能写全一点 这样看起来更实用 谢谢你的无私奉献!!!

相关推荐

Global site tag (gtag.js) - Google Analytics