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层啦,这里就不在对此部分内容进行详细描述啦,如果感兴趣的朋友,请下载源代码查看。
原文地址:http://jackzhangyunjie.iteye.com/blog/247467