struts2+spring+ibatis框架的简易搭建实例

由于工作的几个项目都是基于S2SM(strut2+spring+mybatis)或者是S2SI 的框架;所以趁着双休日休息,自己在这两天也尝试着搭了一个简易的SSI框架。废话不多讲,我们直接进入正题:

准备工作: (1)开发工具+数据库 (myEclipse 8.5 +tomcat 6.0+mysql 5.5);

 (2)框架所需的jar包(这里就不一一列出jar包名了)

第一步,在准备工作完成之后,接下来就是创建web项目工程,创建完工程后,可以通过myEclipse  导入默认的spring 3.0 jar 包(【注】:通过默认导入的myEclipse自带的jar ,并且可以生产默认的applicationContext.xml文件。我们这里只要这个文件,将applicationContext.xml放在项目/WebRoot/WEB-INF文件夹下);当然同样可以通过导入默认的struts2的jar包 得到strut.xml。然后删除掉自带的jar包 ,引入我们自己的jar包(包括ibatis 和数据库连接的jar包)。

第二步,前面工作完成之后,我们要创建项目与数据库的连接(数据源配置),这里我们配置在applicationContext.xml ,包括ibatis 的sqlMapClient, 以及事物管理配置;详细见代码:

<?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:p="http://www.springframework.org/schema/p"
	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-3.0.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
	<!-- 设置 MYSQL 数据源-->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://localhost:3306/zengmeizhan?characterEncoding=utf8"/>
		<property name="username" value="root"/>
		<property name="password" value="782306"/>
	</bean>
	<!-- 事物注解(数据库连接管理) -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
		<property name="globalRollbackOnParticipationFailure" value="false"/>
	</bean>
	<!-- 事务注解支持 -->
	<tx:annotation-driven transaction-manager="transactionManager" />
	<!--spring配置 ibatis -->
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocations" >
			<value>classpath*:sqlMapConfig.xml</value>
		</property>
		<!-- 引入数据源 -->
		<property name="dataSource" ref="dataSource"/>
		<property name="useTransactionAwareDataSource">
			<value>
				false
			</value>
		</property>
	</bean>
</beans>

以及在sqlMapconfig.xml 的配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig   
 PUBLIC "-//iBatis.com//DTD SQL Map Config 2.0//EN"  
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> 
<sqlMapConfig>
    <settings cacheModelsEnabled = "false" 
 		enhancementEnabled = "false"
 		lazyLoadingEnabled = "false"
 		useStatementNamespaces = "true"
 		maxRequests = "128"
 		maxSessions = "64"
 		maxTransactions= "16"
     />	
</sqlMapConfig>
【注】:cacheModelsEnabled :全局性地启用或禁用 SqlMapClient 的所有缓存cacheModelsEnabled model。调试程序时使用。

    enhancementEnabled :全局性地启用或禁用运行时字节码增强,以优化访问Java Bean属性的性能,同时优化延迟加载的性能。

     lazyLoadingEnabled :全局性地启用或禁用SqlMapClient的所有延迟加载。lazyLoadingEnabled 调试程序时使用。

     useStatementNamespaces:如果启用本属性,必须使用全限定名来引用 mapped useStatementNamespaces statement。

     Mapped statement 的全限定名由 sql-map 的名称和 mapped-statement 的名称合成。

     maxRequests    :同时执行 SQL 语句的最大线程数。

     maxSessions    :同一时间内活动的最大 session 数。

     maxTransactions:同时进入 SqlMapClient.startTransaction()的最大线程maxTransactions 数。

      第二步,要配置web.xml 文件,

<?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/applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
 	 <welcome-file-list>
    	<welcome-file>index.jsp</welcome-file>
  	</welcome-file-list>
  <filter>
  <!-- struts fiter -->
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	</filter-class>
  	<init-param>
  		<param-name>config</param-name>
  		<param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>*.action</url-pattern>
  </filter-mapping>
 </web-app>
第四步、接下来要创建我们所需要的包(基于mvc框架),已经创建一个实体Userbean(这里bean的代码就不贴出来了) ,以及对应映射的sqlMapper.xml文件。【注】由于之前在 sqlMapconfig.xml中指定useStatementNamespaces =true,所以在我们创建sqlMapper.xml 要给这个指定一个对应的namespace,而且要把配好的sqlMap.xml 引入到sqlMapconfig.xml中。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBatis.com//DTD SQL Map 2.0//EN" 
"http://ibatis.apache.org/dtd/sql-map-2.dtd"> 
<sqlMap namespace="user">
	<!-- 通过typeAlias使得我们在下面使用Contact实体类的时候不需要写包名 -->
	<typeAlias alias ="alias_user" type ="com.zengMeizan.charge.domain.UserEntity"/>
	<resultMap class="alias_user" id="userResultMapper">
		<result property="id" column="ID" jdbcType="VARCHAR"/>
		<result property="userName" column="USER_NAME" jdbcType="VARCHAR"/>
		<result property="userCode" column="USER_CODE" jdbcType="VARCHAR"/>
		<result property="password" column="PASSWORD" jdbcType="VARCHAR"/>
		<result property="active" column="ACTIVE" jdbcType="VARCHAR"/>
		<result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
		<result property="modifyTime" column="MODIFY_TIME" jdbcType="TIMESTAMP"/>
		<result property="createUser" column="CREATE_USER_CODE" jdbcType="VARCHAR"/>
		<result property="modifyUser" column="MODIFY_USER_CODE" jdbcType="VARCHAR"/>
	</resultMap>
	<!--insert  sql   -->
	<insert id="insertOneUser" parameterClass="alias_user">
		insert into user(ID,
		USER_NAME,
		USER_CODE,
		PASSWORD,
		ACTIVE,
		CREATE_TIME,
		MODIFY_TIME,
		CREATE_USER_CODE,
		MODIFY_USER_CODE
		)values(
			#id#,
			#userName#,
			#userCode#,
			#password#,
			#active#,
			#createTime#,
			#modifyTime#,
			#createUser#,
			#modifyUser#
		);
	</insert>
</sqlMap>
sqlMapconfig.xml中:

<!-- 引入mapper 文件 -->
     <sqlMap resource="/com/zengMeizan/charge/domain/sqlMap/UserMapper.xml"/>

第五步、创建持久化数据层Dao接口,以及它的实现类;创建业务层Service接口,以及他的实现类。dao接口的实现类要还要继承SqlMapClientDaoSupport的抽象类;而且实现类中记得指定命名空间。由于通过spring来集成管理框架,所以要在applicationContext.xml 注入service中对dao层的依赖(action中也是由于注入对service层的依赖)

UserDaoImpl类

/**
 * userDao的实现类
 * @author leo
 *
 */
public class UserDao extends SqlMapClientDaoSupport implements IUserDao {
	public static final String NAMESPACE ="user."; 
	/**
	 * 新增数据
	 */
	@Override
	public int addUser(UserEntity userEntity) {
		Date now =new Date();
		userEntity.setId(UUIDUtils.getUUID());
		userEntity.setActive("Y");
		userEntity.setCreateTime(now);
		userEntity.setModifyTime(now);
		 UserEntity result= (UserEntity) this.getSqlMapClientTemplate().insert(NAMESPACE+"insertOneUser", userEntity);
		return result !=null?1:0;
	}

}
userServiceImpl类:

/**
 * 
 * @author leo
 *
 */
public class UserService implements IUserService {
	/**
	 * userdao
	 */
	private IUserDao userDao;
	
	public void setUserDao(IUserDao userDao) {
		this.userDao = userDao;
	}
	/**
	 * 新增用户
	 */
	@Transactional
	@Override
	public int addUser(UserEntity userEntity) {
		if(null ==userEntity ||StringUtils.isBlank(userEntity.getUserCode())){
			throw new UserException("参数为空");
		}
		userEntity.setActive("Y");
		userEntity.setCreateUser("USER");
		userEntity.setCreateTime(new Date());
		return userDao.addUser(userEntity);
	}
}
applicationContext.xml中

<!-- spring 注入依赖 -->
<!-- dao -->
<bean id="userDao" class="com.zengMeizan.charge.dao.impl.UserDao">
<property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
<!-- service -->
<bean id="userService" class="com.zengMeizan.charge.service.impl.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<!-- action -->
<bean id="userAction" class="com.zengMeizan.charge.action.UserAction">
<property name="userService" ref="userService"/>
</bean>
第六步、创建UserAction,并且配置strut2.xml 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
 "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<include file="struts-user.xml"/>
	<include file="struts-main.xml"/>
	<!-- struts2 的开发模式 -->
	<constant name="struts-devModel" value="true"/>
<!-- 用到json 必须继承josn-default -->
	<package name="charge-default" extends="json-default">
	<!-- 定义一个全局的结果集 -->
		<global-results>
			<result>/WEB-INF/jsp/fail.jsp</result>
		</global-results>
	</package>
</struts>   
struts-user.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
 "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!-- 用户登录,增加,删除修改用户的struts -->
	<package name="charge_login" namespace="/login" extends="charge-default">
		<action name="user_addUser" class="userAction" method="addUser">
			<result name="success">/WEB-INF/jsp/success.jsp</result>
		</action>
	</package>
</struts> 
userAction类中
/**
 * 
 * @author leo
 *
 */
public class UserAction extends BaseAction {
	/**
	 * 
	 */
	private static final long serialVersionUID = -5421622271053463421L;
	/**
	 * service
	 */
	private IUserService userService;
	/**
	 * vo 前后台交互的尸体
	 */
	private UserEntityVo vo;
	
	
	public UserEntityVo getVo() {
		return vo;
	}


	public void setVo(UserEntityVo vo) {
		this.vo = vo;
	}


	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
	/**
	 * 新增用户
	 * @return
	 */
	public String addUser(){
		try {
			//获取user 
			UserEntity userEntity =	vo.getUserEntity();
			userService.addUser(userEntity);
			return "success";
		} catch (UserException e) {
			return "error";
		}
	}
	
}
 最后,在webRoot 下的index.jsp 中创建一个form  模拟新增user,启动tomcat, 新增一个实体测试一下,若在数据库中查询到该记录说明框架搭建成功。





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值