Struts2+Spring3+Mybatis3开发环境搭建

本文主要介绍Struts2+Spring3+Mybatis3开发环境搭建
Struts和Spring不过多介绍。
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
 
环境:
Struts-2.3.14
Spring-3.2.1
MyBatis-3.2.2
 
在apache-tomcat-7.0.39下测试通过
 
Project目录结构
lib文件夹下的依赖包:
 
入口web.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  5.     id="WebApp_ID" version="3.0">  
  6.     <display-name>test_ssm</display-name>  
  7.     <welcome-file-list>  
  8.         <welcome-file>index.jsp</welcome-file>  
  9.     </welcome-file-list>  
  10.   
  11.     <!-- 配置spring资源 -->  
  12.     <context-param>  
  13.         <param-name>contextConfigLocation</param-name>  
  14.         <param-value>classpath:config/applicationContext-*.xml</param-value>  
  15.     </context-param>  
  16.   
  17.     <!-- 配置spring -->  
  18.     <listener>  
  19.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  20.     </listener>  
  21.   
  22.     <!-- 配置Struts2 -->  
  23.     <filter>  
  24.         <filter-name>struts2</filter-name>  
  25.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  26.         <init-param>  
  27.             <param-name>config</param-name>  
  28.             <param-value>struts-default.xml,struts-plugin.xml,/config/struts.xml</param-value>  
  29.         </init-param>  
  30.     </filter>  
  31.   
  32.     <filter-mapping>  
  33.         <filter-name>struts2</filter-name>  
  34.         <url-pattern>/*</url-pattern>  
  35.     </filter-mapping>  
  36.   
  37. </web-app>  
Spring配置文件
applicationContext-common.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  6.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd  
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  8.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">  
  9.   
  10.     <!-- 启用spring注解支持 -->  
  11.     <context:annotation-config />  
  12.   
  13.     <!-- 配置DataSource数据源 -->  
  14.     <bean id="dataSource"  
  15.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  16.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  17.         <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />  
  18.         <property name="username" value="root" />  
  19.         <property name="password" value="123456" />  
  20.     </bean>  
  21.   
  22.     <!--创建sqlSessionFactory -->  
  23.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  24.         <property name="configLocation" value="classpath:config/mabatis-config.xml" />  
  25.         <property name="dataSource" ref="dataSource" />     
  26.         <property name="mapperLocations" value="classpath:com/jialin/mapper/**/*.xml" />    
  27.           
  28.     </bean>  
  29.   
  30. <!-- 配置事务管理器,注意这里的dataSource和SqlSessionFactoryBean的dataSource要一致,不然事务就没有作用了 -->  
  31.  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  32.     <property name="dataSource" ref="dataSource" />  
  33. </bean>   
  34.    
  35. <!-- 配置事务的传播特性 -->  
  36.  <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">  
  37.     <property name="transactionManager" ref="transactionManager" />  
  38.     <property name="transactionAttributes">  
  39.         <props>  
  40.             <prop key="add*">PROPAGATION_REQUIRED</prop>  
  41.             <prop key="edit*">PROPAGATION_REQUIRED</prop>  
  42.             <prop key="remove*">PROPAGATION_REQUIRED</prop>  
  43.             <prop key="insert*">PROPAGATION_REQUIRED</prop>  
  44.             <prop key="update*">PROPAGATION_REQUIRED</prop>  
  45.             <prop key="del*">PROPAGATION_REQUIRED</prop>  
  46.             <prop key="*">readOnly</prop>  
  47.         </props>  
  48.     </property>  
  49. </bean>   
  50.   
  51. </beans>  
applicationContext-beans.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  6.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd  
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  8.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">  
  9.   
  10.      
  11.     <bean id="userInfoDao"  class="org.mybatis.spring.mapper.MapperFactoryBean"  
  12.         scope="prototype">  
  13.         <property name="mapperInterface" value="com.jialin.dao.UserInfoDao" />  
  14.         <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  15.     </bean>  
  16.   
  17.     <bean id="userInfoService" class="com.jialin.service.UserInfoService"  
  18.         scope="prototype">  
  19.         <property name="userInfoDao" ref="userInfoDao" />  
  20.     </bean>  
  21.   
  22.     <!-- 为IRegisterService接口配置事务拦截器,baseTransactionProxy是事务拦截器,在Controller中获取这个对象 -->  
  23.     <bean id="IUserInfoService" parent="baseTransactionProxy">  
  24.         <!-- 实现类 -->  
  25.         <property name="target" ref="userInfoService" />  
  26.     </bean>  
  27.   
  28.     <bean id="userManageAction" class="com.jialin.action.UserManageAction"  
  29.         scope="prototype">  
  30.         <property name="userInfoService" ref="IUserInfoService" />  
  31.     </bean>  
  32.   
  33. </beans>  
Struts配置文件
struts.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.       
  8.     <!-- 将Action的创建交给spring来管理 -->    
  9.     <constant name="struts.objectFactory" value="spring" />    
  10.       
  11.     <!-- 更改struts2请求Action的后缀名,默认为action。若想去掉后缀,设为","即可 -->  
  12.     <constant name="struts.action.extension" value=","></constant>  
  13.   
  14.     <package name="abstract_struts" abstract="true" extends="struts-default"  
  15.         namespace="/">  
  16.         <!-- 公共东西可以放到这个抽象包下 -->    
  17.     </package>  
  18.       
  19.     <!-- 包含的配置文件 -->  
  20.     <include file="/config/struts-user.xml"></include>  
  21. </struts>  
struts-user.xml
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.      
  8.     <package name="MyActions" extends="struts-default">       
  9.         <action name="*_*" class="userManageAction" method="{1}">  
  10.             <result name="success" type="redirect">/{2}.jsp</result>  
  11.         </action>  
  12.     </package>  
  13.   
  14. </struts>  
Mybatis配置文件
mabatis-config.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3. <configuration>  
  4.   
  5.       <typeAliases>    
  6.             <typeAlias alias="userinfo" type="com.jialin.entity.UserInfo"/>    
  7.       </typeAliases>    
  8.         
  9.       <!-- 因为已经在applicationContext-common中指定了映射文件的位置,这里就省略了 -->  
  10.       <!-- <mappers>    
  11.             <mapper resource="com/jialin/dao/registerMapper.xml"/>    
  12.       </mappers>   -->  
  13.   
  14. </configuration>  
UserManageAction.java
  1. package com.jialin.action;  
  2.   
  3. import com.jialin.entity.UserInfo;  
  4. import com.jialin.service.IUserInfoService;  
  5.   
  6. public class UserManageAction {  
  7.   
  8.     private IUserInfoService userInfoService;  
  9.   
  10.     public IUserInfoService getUserInfoService() {  
  11.         return userInfoService;  
  12.     }  
  13.   
  14.     public void setUserInfoService(IUserInfoService userInfoService) {  
  15.         this.userInfoService = userInfoService;  
  16.     }  
  17.   
  18.     private UserInfo userInfo;  
  19.   
  20.     public UserInfo getUserInfo() {  
  21.         return userInfo;  
  22.     }  
  23.   
  24.     public void setUserInfo(UserInfo userInfo) {  
  25.         this.userInfo = userInfo;  
  26.     }  
  27.   
  28.       
  29.    
  30.     public String insertUser() {  
  31.   
  32.         userInfoService.insertUser(userInfo);  
  33.         return "success";  
  34.     }  
  35.   
  36.     public String editUser() {  
  37.   
  38.         userInfoService.edit(userInfo);  
  39.         return "success";  
  40.     }  
  41.   
  42.     public String removeUser() {  
  43.   
  44.         userInfoService.remove(userInfo);  
  45.         return "success";  
  46.     }  
  47.   
  48.     public String getUserById() {  
  49.         userInfoService.get(userInfo);  
  50.         return "success";  
  51.     }  
  52.   
  53.     public String getListByName() {  
  54.   
  55.         userInfoService.getList(userInfo);  
  56.   
  57.         return "success";  
  58.     }  
  59.   
  60.     public String getAllUser() {  
  61.         userInfoService.getAllUser();  
  62.         return "success";  
  63.     }  
  64.   
  65. }  
  66. <span style="font-family:微软雅黑;BACKGROUND-COLOR: #ffffff"></span>  
 
IUserInfoService.java
  1. package com.jialin.service;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.jialin.entity.UserInfo;  
  6.   
  7. public interface IUserInfoService {  
  8.     public void insertUser(UserInfo user);  
  9.   
  10.     public void edit(UserInfo user);  
  11.   
  12.     public void remove(UserInfo user);  
  13.   
  14.     public UserInfo get(UserInfo user);  
  15.   
  16.     public List getList(UserInfo user);  
  17.       
  18.     public List getAllUser();  
  19. }  
UserInfoService.java
  1. package com.jialin.service;  
  2.   
  3. import java.util.List;  
  4.   
  5. import java.util.Iterator;  
  6.   
  7. import com.jialin.dao.UserInfoDao;  
  8. import com.jialin.entity.UserInfo;  
  9.   
  10. public class UserInfoService implements IUserInfoService {  
  11.       
  12.     private UserInfoDao userInfoDao;  
  13.       
  14.   
  15.     public UserInfoDao getUserInfoDao() {  
  16.         return userInfoDao;  
  17.     }  
  18.   
  19.     public void setUserInfoDao(UserInfoDao userInfoDao) {  
  20.         this.userInfoDao = userInfoDao;  
  21.     }  
  22.   
  23.     @Override  
  24.     public void insertUser(UserInfo user)  
  25.     {  
  26.         userInfoDao.insertUser(user);  
  27.     }  
  28.   
  29.     @Override  
  30.     public void edit(UserInfo user) {  
  31.         userInfoDao.edit(user);  
  32.           
  33.     }  
  34.   
  35.     @Override  
  36.     public void remove(UserInfo user) {  
  37.         userInfoDao.remove(user);  
  38.           
  39.     }  
  40.   
  41.     @Override  
  42.     public UserInfo get(UserInfo user) {  
  43.         UserInfo user1=userInfoDao.get(user);  
  44.         System.out.println(user1.getUsername());  
  45.         return user1;  
  46.     }  
  47.   
  48.     @Override  
  49.     public List getList(UserInfo user) {  
  50.         List list=userInfoDao.getList(user);  
  51.           
  52.         for(Iterator iter=list.iterator();iter.hasNext();)  
  53.         {  
  54.             UserInfo user1=(UserInfo)iter.next();  
  55.             System.out.println(user1.getUsername()+",");  
  56.         }  
  57.           
  58.         return list;  
  59.     }  
  60.   
  61.     @Override  
  62.     public List getAllUser() {  
  63.         List list= userInfoDao.getAllUser();  
  64.         for(Iterator iter=list.iterator();iter.hasNext();)  
  65.         {  
  66.             UserInfo user=(UserInfo)iter.next();  
  67.             System.out.println(user.getUsername()+",");  
  68.         }  
  69.           
  70.         return list;  
  71.     }  
  72.       
  73. }  
UserInfoDao.java
  1. package com.jialin.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.jialin.entity.UserInfo;  
  6.   
  7. public interface UserInfoDao {  
  8.       
  9.     public void insertUser(UserInfo user);  
  10.   
  11.     public void edit(UserInfo user);  
  12.   
  13.     public void remove(UserInfo user);  
  14.   
  15.     public UserInfo get(UserInfo user);  
  16.   
  17.     public List getList(UserInfo user);  
  18.       
  19.     public List getAllUser();  
  20. }  
UserInfo.java
  1. package com.jialin.entity;  
  2.   
  3. public class UserInfo {  
  4.     private int id;  
  5.     private String username;  
  6.     private String password;  
  7.     private String ismanager;  
  8.   
  9.     public void setIsmanager(String ismanager) {  
  10.         this.ismanager = ismanager;  
  11.     }  
  12.   
  13.     public String getIsmanager() {  
  14.         return ismanager;  
  15.     }  
  16.   
  17.     public void setUsername(String username) {  
  18.         this.username = username;  
  19.     }  
  20.   
  21.     public String getUsername() {  
  22.         return username;  
  23.     }  
  24.   
  25.     public void setPassword(String password) {  
  26.         this.password = password;  
  27.     }  
  28.   
  29.     public String getPassword() {  
  30.         return password;  
  31.     }  
  32.   
  33.     public void setId(int id) {  
  34.         this.id = id;  
  35.     }  
  36.   
  37.     public int getId() {  
  38.         return id;  
  39.     }  
  40.   
  41. }  
Mybaitis映射文件
userinfo-mapper.xml
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">     
  3.     
  4. <mapper namespace="com.jialin.dao.UserInfoDao">     
  5.       <!-- 自动生成id策略 -->  
  6.     <insert id="insertUser"  parameterType="userinfo"  useGeneratedKeys="true"  keyProperty="id">    
  7.             insert into userinfo(username,password,ismanager) values (#{username},#{password},#{ismanager})    
  8.     </insert>    
  9.       
  10.     <!-- userInfoResultMap是userinfo-resultmap.xml中定义的resultmap -->  
  11.     <select id="getList"  parameterType="userinfo" resultType="list" resultMap="userInfoResultMap">  
  12.             select * from userinfo where username like '%' #{username} '%'  
  13.     </select>  
  14.       
  15.     <select id="getAllUser" resultType="list"  resultMap="userInfoResultMap">  
  16.             select * from userinfo  
  17.     </select>  
  18.       
  19.     <select id="get"  parameterType="userinfo"  resultType="com.jialin.entity.UserInfo" resultMap="userInfoResultMap">  
  20.         <![CDATA[ 
  21.             select * from userinfo where id = #{id} 
  22.         ]]>  
  23.     </select>  
  24.       
  25.     <update id="edit"  parameterType="userinfo">  
  26.         update userinfo set  
  27.         username = #{username},  
  28.         password = #{password}  
  29.         where id = #{id}  
  30.     </update>  
  31.       
  32.     <delete id="remove" parameterType="userinfo">  
  33.         delete from userinfo where id = #{id}  
  34.     </delete>  
  35.       
  36. </mapper>    
userinfo-resultMap.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3.     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.jialin.dao.UserInfoDao">  
  5.     <resultMap type="com.jialin.entity.UserInfo" id="userInfoResultMap">  
  6.         <id property="id" column="id"/>  
  7.         <result property="username" column="username"/>  
  8.         <result property="password" column="password"/>  
  9.         <result property="ismanager" column="ismanager"/>  
  10.     </resultMap>  
  11. </mapper>  
测试jsp
  1. <%@ page contentType="text/html; charset=UTF-8"%>  
  2.   
  3.   
  4. <html>  
  5. <head>  
  6. <title></title>  
  7.   
  8. <script type="text/javascript">  
  9.       
  10.     function insertUser()  
  11.     {  
  12.         var myform=document.forms[0];  
  13.         myform.action="insertUser_success";  
  14.         myform.method="post";  
  15.         myform.submit();  
  16.     }  
  17.       
  18.     function getUserByName()  
  19.     {  
  20.         var myform=document.forms[0];  
  21.         myform.action="getListByName_success";  
  22.         myform.method="post";  
  23.         myform.submit();  
  24.     }  
  25.       
  26.     function getAllUser()  
  27.     {  
  28.         var myform=document.forms[0];  
  29.         myform.action="getAllUser_success";  
  30.         myform.method="post";  
  31.         myform.submit();  
  32.     }  
  33.       
  34.     function editUser()  
  35.     {  
  36.         var myform=document.forms[0];  
  37.         myform.action="editUser_success";  
  38.         myform.method="post";  
  39.         myform.submit();  
  40.     }  
  41.       
  42.     function getUserById()  
  43.     {  
  44.         var myform=document.forms[0];  
  45.         myform.action="getUserById_success";  
  46.         myform.method="post";  
  47.         myform.submit();  
  48.     }  
  49.       
  50.     function removeUser()  
  51.     {  
  52.         var myform=document.forms[0];  
  53.         myform.action="removeUser_success";  
  54.         myform.method="post";  
  55.         myform.submit();  
  56.     }  
  57.       
  58.   
  59. </script>  
  60.   
  61.   
  62. </head>  
  63. <body>  
  64.     <h1>用户管理</h1>  
  65.     <hr>  
  66.     <form name="myform" >  
  67.         id:<input type="text" name="userInfo.id"> <br>  
  68.         用户名:<input type="text" name="userInfo.username"> <br>  
  69.         密码:<input type="text" name="userInfo.password">  <br>  
  70.         是否为管理员:<input type="text" name="userInfo.ismanager"><br>  
  71.         <input type="button" name="btninsert" onclick="insertUser()" value="增加" />  
  72.         <input type="button" name="btnedit" onclick="editUser()" value="修改" />  
  73.         <input type="button" name="btnremove" onclick="removeUser()" value="删除"  /><br>  
  74.         <input type="button" name="btnget" onclick="getUserById()" value="按id查询"  />  
  75.         <input type="button" name="btngetlist" onclick="getUserByName()" value="按名称查询"  />  
  76.         <input type="button" name="btngetall" onclick="getAllUser()" value="查询全部"  />  
  77.     </form>  
  78. </body>  
  79. </html>  
贴代码也是个体力活,多余的话没有,核心的几个配置文件的说明都已写到注释里。
 
下面会出一篇文章探讨一个Hibernate和Mybatis的区别,还会出一些对这些框架讨论的文章,欢迎大家关注!
posted @ 2013-10-15 18:13  huidaoli  阅读(282)  评论(0编辑  收藏  举报