Struts2+Spring3+Mybatis3開發環境搭建

來源:互聯網
上載者:User
  本文主要介紹Struts2+Spring3+Mybatis3開發環境搭建Struts和Spring不過多介紹。MyBatis 是支援普通 SQL 查詢,預存程序和進階映射的優秀持久層架構。MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML 或註解用於配置和原始映射,將介面和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 對象)映射成資料庫中的記錄。環境:Struts-2.3.14Spring-3.2.1MyBatis-3.2.2 在apache-tomcat-7.0.39下測試通過  Project目錄結構 lib檔案夾下的依賴包:  入口web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>test_ssm</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 配置spring資源 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/applicationContext-*.xml</param-value></context-param><!-- 配置spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置Struts2 --><filter><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,/config/struts.xml</param-value></init-param></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

Spring設定檔applicationContext-common.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:context="http://www.springframework.org/schema/context" 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.2.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><!-- 啟用spring註解支援 --><context:annotation-config /><!-- 配置DataSource資料來源 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/mybatis" /><property name="username" value="root" /><property name="password" value="123456" /></bean><!--建立sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:config/mabatis-config.xml" /><property name="dataSource" ref="dataSource" /><property name="mapperLocations" value="classpath:com/jialin/mapper/**/*.xml" />  </bean><!-- 配置交易管理員,注意這裡的dataSource和SqlSessionFactoryBean的dataSource要一致,不然事務就沒有作用了 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSource" ref="dataSource" /></bean>  <!-- 配置事務的傳播特性 --> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">    <property name="transactionManager" ref="transactionManager" />    <property name="transactionAttributes">        <props>            <prop key="add*">PROPAGATION_REQUIRED</prop>            <prop key="edit*">PROPAGATION_REQUIRED</prop>            <prop key="remove*">PROPAGATION_REQUIRED</prop>            <prop key="insert*">PROPAGATION_REQUIRED</prop>            <prop key="update*">PROPAGATION_REQUIRED</prop>            <prop key="del*">PROPAGATION_REQUIRED</prop>            <prop key="*">readOnly</prop>        </props>    </property></bean> </beans>

applicationContext-beans.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:context="http://www.springframework.org/schema/context" 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.2.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">   <bean id="userInfoDao"  class="org.mybatis.spring.mapper.MapperFactoryBean"scope="prototype"><property name="mapperInterface" value="com.jialin.dao.UserInfoDao" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean><bean id="userInfoService" class="com.jialin.service.UserInfoService"scope="prototype"><property name="userInfoDao" ref="userInfoDao" /></bean><!-- 為IRegisterService介面配置事務攔截器,baseTransactionProxy是事務攔截器,在Controller中擷取這個對象 --><bean id="IUserInfoService" parent="baseTransactionProxy"><!-- 實作類別 --><property name="target" ref="userInfoService" /></bean><bean id="userManageAction" class="com.jialin.action.UserManageAction"scope="prototype"><property name="userInfoService" ref="IUserInfoService" /></bean></beans>

Struts設定檔struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!-- 將Action的建立交給spring來管理 -->      <constant name="struts.objectFactory" value="spring" />  <!-- 更改struts2請求Action的尾碼名,預設為action。若想去掉尾碼,設為","即可 --><constant name="struts.action.extension" value=","></constant><package name="abstract_struts" abstract="true" extends="struts-default"namespace="/"><!-- 公用東西可以放到這個抽象包下 -->  </package><!-- 包含的設定檔 --><include file="/config/struts-user.xml"></include></struts>

struts-user.xml 

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>   <package name="MyActions" extends="struts-default">             <action name="*_*" class="userManageAction" method="{1}"><result name="success" type="redirect">/{2}.jsp</result></action>    </package></struts>

Mybatis設定檔mabatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>  <typeAliases>              <typeAlias alias="userinfo" type="com.jialin.entity.UserInfo"/>        </typeAliases>              <!-- 因為已經在applicationContext-common中指定了對應檔的位置,這裡就省略了 -->      <!-- <mappers>              <mapper resource="com/jialin/dao/registerMapper.xml"/>        </mappers>   --></configuration>

UserManageAction.java

package com.jialin.action;import com.jialin.entity.UserInfo;import com.jialin.service.IUserInfoService;public class UserManageAction {private IUserInfoService userInfoService;public IUserInfoService getUserInfoService() {return userInfoService;}public void setUserInfoService(IUserInfoService userInfoService) {this.userInfoService = userInfoService;}private UserInfo userInfo;public UserInfo getUserInfo() {return userInfo;}public void setUserInfo(UserInfo userInfo) {this.userInfo = userInfo;} public String insertUser() {userInfoService.insertUser(userInfo);return "success";}public String editUser() {userInfoService.edit(userInfo);return "success";}public String removeUser() {userInfoService.remove(userInfo);return "success";}public String getUserById() {userInfoService.get(userInfo);return "success";}public String getListByName() {userInfoService.getList(userInfo);return "success";}public String getAllUser() {userInfoService.getAllUser();return "success";}}
 IUserInfoService.java
package com.jialin.service;import java.util.List;import com.jialin.entity.UserInfo;public interface IUserInfoService {public void insertUser(UserInfo user);public void edit(UserInfo user);public void remove(UserInfo user);public UserInfo get(UserInfo user);public List getList(UserInfo user);public List getAllUser();}

UserInfoService.java

package com.jialin.service;import java.util.List;import java.util.Iterator;import com.jialin.dao.UserInfoDao;import com.jialin.entity.UserInfo;public class UserInfoService implements IUserInfoService {private UserInfoDao userInfoDao;public UserInfoDao getUserInfoDao() {return userInfoDao;}public void setUserInfoDao(UserInfoDao userInfoDao) {this.userInfoDao = userInfoDao;}@Overridepublic void insertUser(UserInfo user){userInfoDao.insertUser(user);}@Overridepublic void edit(UserInfo user) {userInfoDao.edit(user);}@Overridepublic void remove(UserInfo user) {userInfoDao.remove(user);}@Overridepublic UserInfo get(UserInfo user) {UserInfo user1=userInfoDao.get(user);System.out.println(user1.getUsername());return user1;}@Overridepublic List getList(UserInfo user) {List list=userInfoDao.getList(user);for(Iterator iter=list.iterator();iter.hasNext();){UserInfo user1=(UserInfo)iter.next();System.out.println(user1.getUsername()+",");}return list;}@Overridepublic List getAllUser() {List list= userInfoDao.getAllUser();for(Iterator iter=list.iterator();iter.hasNext();){UserInfo user=(UserInfo)iter.next();System.out.println(user.getUsername()+",");}return list;}}

UserInfoDao.java

package com.jialin.dao;import java.util.List;import com.jialin.entity.UserInfo;public interface UserInfoDao {public void insertUser(UserInfo user);public void edit(UserInfo user);public void remove(UserInfo user);public UserInfo get(UserInfo user);public List getList(UserInfo user);public List getAllUser();}
UserInfo.java
package com.jialin.entity;public class UserInfo {private int id;private String username;private String password;private String ismanager;public void setIsmanager(String ismanager) {this.ismanager = ismanager;}public String getIsmanager() {return ismanager;}public void setUsername(String username) {this.username = username;}public String getUsername() {return username;}public void setPassword(String password) {this.password = password;}public String getPassword() {return password;}public void setId(int id) {this.id = id;}public int getId() {return id;}}

Mybaitis對應檔userinfo-mapper.xml

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">     <mapper namespace="com.jialin.dao.UserInfoDao">         <!-- 自動產生id策略 -->    <insert id="insertUser"  parameterType="userinfo"  useGeneratedKeys="true"  keyProperty="id">          insert into userinfo(username,password,ismanager) values (#{username},#{password},#{ismanager})      </insert>      <!-- userInfoResultMap是userinfo-resultmap.xml中定義的resultmap -->  <select id="getList"  parameterType="userinfo" resultType="list" resultMap="userInfoResultMap">select * from userinfo where username like '%' #{username} '%'</select><select id="getAllUser" resultType="list"  resultMap="userInfoResultMap">select * from userinfo</select><select id="get"  parameterType="userinfo"  resultType="com.jialin.entity.UserInfo" resultMap="userInfoResultMap"><![CDATA[select * from userinfo where id = #{id}        ]]></select><update id="edit"  parameterType="userinfo">update userinfo setusername = #{username},password = #{password}where id = #{id}</update><delete id="remove" parameterType="userinfo">delete from userinfo where id = #{id}</delete>  </mapper>  

userinfo-resultMap.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.jialin.dao.UserInfoDao"><resultMap type="com.jialin.entity.UserInfo" id="userInfoResultMap"><id property="id" column="id"/><result property="username" column="username"/><result property="password" column="password"/><result property="ismanager" column="ismanager"/></resultMap></mapper>

測試jsp

<%@ page contentType="text/html; charset=UTF-8"%><html><head><title></title><script type="text/javascript">function insertUser(){var myform=document.forms[0];myform.action="insertUser_success";myform.method="post";myform.submit();}function getUserByName(){var myform=document.forms[0];myform.action="getListByName_success";myform.method="post";myform.submit();}function getAllUser(){var myform=document.forms[0];myform.action="getAllUser_success";myform.method="post";myform.submit();}function editUser(){var myform=document.forms[0];myform.action="editUser_success";myform.method="post";myform.submit();}function getUserById(){var myform=document.forms[0];myform.action="getUserById_success";myform.method="post";myform.submit();}function removeUser(){var myform=document.forms[0];myform.action="removeUser_success";myform.method="post";myform.submit();}</script></head><body><h1>使用者管理</h1><hr><form name="myform" >        id:<input type="text" name="userInfo.id"> <br>使用者名稱:<input type="text" name="userInfo.username"> <br>密碼:<input type="text" name="userInfo.password">  <br>是否為管理員:<input type="text" name="userInfo.ismanager"><br>        <input type="button" name="btninsert" onclick="insertUser()" value="增加" />    <input type="button" name="btnedit" onclick="editUser()" value="修改" />    <input type="button" name="btnremove" onclick="removeUser()" value="刪除"  /><br>    <input type="button" name="btnget" onclick="getUserById()" value="按id查詢"  />    <input type="button" name="btngetlist" onclick="getUserByName()" value="按名稱查詢"  />    <input type="button" name="btngetall" onclick="getAllUser()" value="查詢全部"  /></form></body></html>

貼代碼也是個體力活,多餘的話沒有,核心的幾個設定檔的說明都已寫到注釋裡。 下面會出一篇文章探討一個Hibernate和Mybatis的區別,還會出一些對這些架構討論的文章,歡迎大家關注!  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.