struts2+spring+ibatis架構的簡易搭建執行個體

來源:互聯網
上載者:User

由於工作的幾個項目都是基於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"?><beansxmlns="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.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://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 sqlMapPUBLIC "-//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."; /** * 新增資料 */@Overridepublic 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@Overridepublic 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, 新增一個實體測試一下,若在資料庫中查詢到該記錄說明架構搭建成功。





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.