struts2.2.3 + spring3.1.0 + mybatis3.1.0集成简单demo

项目下载地址:http://download.csdn.net/detail/afgasdg/4171359

主要实现用户的增删改查操作

1、导入相应的jar包

2、配置web.xml主要是配置struts2和spring

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">  <welcome-file-list>  <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <!-- 加载spring的配置文件 -->  <listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <!-- 配置spring配置文件加载的位置 -->  <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:beans.xml</param-value>  </context-param>  <!-- 配置struts2 -->  <filter>  <filter-name>struts2</filter-name>  <filter-class>  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping> </web-app>  

3、配置spring配置文件,主要包括配置数据源、事务、mybaits等

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:context="http://www.springframework.org/schema/context"  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/aop   http://www.springframework.org/schema/aop/spring-aop-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/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd">  <!-- 采用注释的方式配置bean -->  <context:annotation-config />  <!-- 配置要扫描的包 -->  <context:component-scan base-package="com.pdsu.edu"></context:component-scan>  <!--proxy-target-class="true"强制使用cglib代理   如果为false则spring会自动选择-->  <aop:aspectj-autoproxy  proxy-target-class="true"/>  <!-- 数据库配置文件位置 -->  <context:property-placeholder location="classpath:jdbc.properties" />  <!-- 配置dbcp数据源 -->  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  <property name="driverClassName" value="${jdbc.driverClassName}" />  <property name="url" value="${jdbc.url}" />  <property name="username" value="${jdbc.username}" />  <property name="password" value="${jdbc.password}" />  <!-- 队列中的最小等待数 -->  <property name="minIdle" value="${jdbc.minIdle}"></property>  <!-- 队列中的最大等待数 -->  <property name="maxIdle" value="${jdbc.maxIdle}"></property>  <!-- 最长等待时间,单位毫秒 -->  <property name="maxWait" value="${jdbc.maxWait}"></property>  <!-- 最大活跃数 -->  <property name="maxActive" value="${jdbc.maxActive}"></property>  <property name="initialSize" value="${jdbc.initialSize}"></property>  </bean>  <!-- 配置mybitasSqlSessionFactoryBean -->  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  <property name="dataSource" ref="dataSource" />  <property name="configLocation" value="classpath:mybatis.xml"></property>  </bean>  <!-- 配置SqlSessionTemplate -->  <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">  <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />  </bean>  <!-- 事务配置 -->  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <property name="dataSource" ref="dataSource" />  </bean>  <!-- 使用annotation注解方式配置事务 -->  <tx:annotation-driven transaction-manager="transactionManager"/>  </beans>  

4.JDBC配置文件详细

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/operationLog
jdbc.username=root
jdbc.password=
jdbc.maxActive = 2
jdbc.maxIdle =5
jdbc.minIdle=1
jdbc.initialSize =3
jdbc.maxWait =3000 

5、配置mybatis主配置文件:

<?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="user" type="com.pdsu.edu.domain.User"/>  </typeAliases>  <mappers>  <mapper resource="com/pdsu/edu/domain/sqlMappers/user.xml" />  </mappers>
</configuration> 

6、配置user.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.pdsu.edu.domain.User">  <resultMap type="com.pdsu.edu.domain.User" id="userResult">  <result property="id" column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />  <result property="username" column="username" />  <result property="password" column="password" />  </resultMap>  <select id="userLogin"  parameterType="user" resultMap="userResult">  select * from user   where   username=#{username} and password=#{password}  </select>  <select id="selectAllUser" resultMap="userResult">  select * from user  </select>  <select id="findUserById" parameterType="int" resultMap="userResult">  select *  from user where id=#{id}  </select>  <insert id="insertUser" parameterType="user">  <![CDATA[ insert into user(username,password) values(#{username},#{password}) ]]>  </insert>  <update id="updateUser" parameterType="user">  update user set  username=#{username},password=#{password} where id=#{id}  </update>  <delete id="deleteUser" parameterType="int">  delete from user where  id=#{id}  </delete>  </mapper>  

7、User实体的写法

public class User implements Serializable {  private static final long serialVersionUID = -4415990281535582814L;  private Integer id;  private String username;  private String password;  public Integer getId() {  return id;  }  public void setId(Integer id) {  this.id = id;  }  public String getUsername() {  return username;  }  public void setUsername(String username) {  this.username = username;  }  public String getPassword() {  return password;  }  public void setPassword(String password) {  this.password = password;  }  @Override  public String toString() {  return "User [id=" + id + ", password=" + password + ", username=" + username + "]";  }  @Override  public int hashCode() {  final int prime = 31;  int result = 1;  result = prime * result + ((id == null) ? 0 : id.hashCode());  return result;  }  @Override  public boolean equals(Object obj) {  if (this == obj)  return true;  if (obj == null)  return false;  if (getClass() != obj.getClass())  return false;  User other = (User) obj;  if (id == null) {  if (other.id != null)  return false;  } else if (!id.equals(other.id))  return false;  return true;  }
}  

8、UserDao的写法

public interface UserDao {  public abstract void insertUser(User user);  public abstract void updateUser(User user);  public abstract void deleteUser(Integer userId);  public abstract User findUserByid(Integer userId);  public abstract List<User> findAll();  public abstract User userLogin(User user);  }  

9、UserDao的实现

@Repository
public class UserDaoImpl implements UserDao {  private final String INSERT_USER = "insertUser";  private final String UPDATE_USER = "updateUser";  private final String DELETE_USER = "deleteUser";  private final String FIND_USER_BYID = "findUserById";  private final String SELECT_ALL_USER = "selectAllUser";  private final String USER_LOGIN = "userLogin";  @Autowired  private SqlSessionTemplate sqlSessionTemplate;  public void insertUser(User user) {  sqlSessionTemplate.insert(INSERT_USER, user);  }  public void updateUser(User user) {  sqlSessionTemplate.update(UPDATE_USER, user);  }  public void deleteUser(Integer userId) {  sqlSessionTemplate.delete(DELETE_USER, userId);  }  public User findUserByid(Integer userId) {  return sqlSessionTemplate.selectOne(FIND_USER_BYID, userId);  }  public List<User> findAll() {  return sqlSessionTemplate.selectList(SELECT_ALL_USER);  }  public User userLogin(User user) {  return sqlSessionTemplate.selectOne(USER_LOGIN, user);  }
}  

10、UserService接口

public interface UserService {  // 添加用户  public abstract void addUser(User user);  public abstract void updateUser(User user);  public abstract void deleteUser(Integer userId);  public abstract User findUserById(Integer userId);  public abstract List<User> findAllUser();  public abstract User login(User user);  }  

11、UserService接口的实现

@Service
@Transactional
public class UserServiceImpl implements UserService {  @Autowired  private UserDao userDao;  // 添加用户  public void addUser(User user) {  userDao.insertUser(user);  }  // 更新用户  public void updateUser(User user) {  userDao.updateUser(user);  }  public void deleteUser(Integer userId) {  userDao.deleteUser(userId);  }  public User findUserById(Integer userId) {  return userDao.findUserByid(userId);  }  public List<User> findAllUser() {  return userDao.findAll();  }  public User login(User user) {  return userDao.userLogin(user);  }
}  

12、配置Struts2

<?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>    <constant name="struts.i18n.encoding" value="UTF-8"/>  <!-- 指定默认编码集 ,作用于HttpServletRequest的setCharacterEncoding()和freemarker,vilocity的输出 -->  <constant name="struts.configuration.xmlreload" value="true"/>  <!-- 当struts配置文件修改时是否自动加载 -->  <constant name="struts.devMode" value="true"/>  <!-- 开发模式下打印详细的错误信息 -->  <constant name="struts.ui.theme" value="xhtml"/>  <package name="user" namespace="/user" extends="struts-default">  <action name="user_*" class="userAction" method="{1}">  <result name="success" type="redirectAction">user_queryAllUser.action</result>  <result name="input">/index.jsp</result>  <result name="userList">/userList.jsp</result>  <result name="addUser">/userAdd.jsp</result>  <result name="updateUser">/userUpdate.jsp</result>  </action>  </package>
</struts> 

13、UserAction具体实现

@Controller
@Scope("prototype")
public class UserAction extends ActionSupport {  @Autowired  private UserService userService;  private User user;  private List<User> userList;  public String execute() throws Exception {  return null;  }  public String login() {  if (user != null) {  User user2 = userService.login(user);  if (user2 != null) {  return SUCCESS;  }  }  this.addFieldError("user.username", "用户名或密码错误!");  return INPUT;  }  public String addUI() {  return "addUser";  }  public String updateUI() {  user = userService.findUserById(user.getId());  return "updateUser";  }  public String add() {  userService.addUser(user);  return SUCCESS;  }  public String delete() {  userService.deleteUser(user.getId());  return SUCCESS;  }  public String update() {  userService.updateUser(user);  return SUCCESS;  }  public User getUser() {  return user;  }  public void setUser(User user) {  this.user = user;  }  public String queryAllUser() {  userList = userService.findAllUser();  return "userList";  }  public List<User> getUserList() {  return userList;  }  public void setUserList(List<User> userList) {  this.userList = userList;  }  }  

14、登录页面的实现

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s"  uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  <head>  <base href="<%=basePath%>">  <title>用户登录</title>  <meta http-equiv="pragma" content="no-cache">  <meta http-equiv="cache-control" content="no-cache">  <meta http-equiv="expires" content="0">      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  <meta http-equiv="description" content="This is my page">  <!-- <link rel="stylesheet" type="text/css" href="styles.css"> -->  <s:head/>  </head>  <body>  <center>  <h1>用户登录</h1>  <s:a action="user_addUI" namespace="/user">添加新用户</s:a>  <s:form action="user_login" namespace="/user" method="post">  <s:textfield label="用户名" name="user.username"></s:textfield>  <s:password label="密码" name="user.password"></s:password>  <s:submit value="登录"></s:submit>  </s:form>  </center>  </body>
</html>  

15、添加页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s"  uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  <head>  <title>添加新用户</title>  <meta http-equiv="pragma" content="no-cache">  <meta http-equiv="cache-control" content="no-cache">  <meta http-equiv="expires" content="0">     </head>  <body>  <center>  <h1>添加新用户</h1>  <s:form action="user_add" namespace="/user" method="post">  <s:textfield label="用户名" name="user.username"></s:textfield>  <s:password label="密码" name="user.password"></s:password>  <s:submit value="提交"></s:submit>  </s:form>  </center>  </body>
</html>  

16、修改页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s"  uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  <head>  <title>修改用户</title>  <meta http-equiv="pragma" content="no-cache">  <meta http-equiv="cache-control" content="no-cache">  <meta http-equiv="expires" content="0">     </head>  <body>  <center>  <h1>修改用户</h1>  <s:form action="user_update" namespace="/user" method="post">  <s:hidden name="user.id"></s:hidden>  <s:textfield label="用户名" name="user.username"></s:textfield>  <s:password label="密码" name="user.password"></s:password>  <s:submit value="提交"></s:submit>  </s:form>  </center>  </body>
</html>  

17、列表页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s"  uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  <head>  <title>用户列表</title>  <meta http-equiv="pragma" content="no-cache">  <meta http-equiv="cache-control" content="no-cache">  <meta http-equiv="expires" content="0">     </head>  <body>  <center>  <h2>用户列表</h2>  <h3><s:a action="user_addUI" namespace="/user">添加新用户</s:a> </h3>  <table width="90%" border="1">  <tr>  <th>用户id</th>  <th>用户名称</th>  <th>用户密码</th>  <th>操作</th>  </tr>  <s:iterator  value="userList">  <tr>  <td><s:property value="id"/> </td>  <td><s:property value="username"/> </td>  <td><s:property value="password"/> </td>  <td><s:a action="user_updateUI" namespace="/user"><s:param name="user.id">${id}</s:param>修改</s:a>  <s:a action="user_delete" namespace="/user"><s:param name="user.id">${id}</s:param>删除</s:a></td>  </tr>  </s:iterator>  </table>  </center>  </body>
</html> 

项目下载地址:http://download.csdn.net/detail/afgasdg/4171359

本文转自:http://www.cnblogs.com/fucktom/p/3747891.html

转载于:https://www.cnblogs.com/dreammyle/p/4085965.html

spring+struts2+mybatis相关推荐

  1. spring struts2 mybatis框架学习总结(mvc三层架构)

    spring struts2 mybatis框架学习总结(mvc三层架构) ssi的框架主要是由struts2,spring以及ibatis组成,他们负责各层之间的交互与协作,从而实现整个web端的功 ...

  2. SSM(spring.struts2.mybatis)注解式开发步骤

    SSM注解式开发步骤 1.引入依赖 spring.mybatis.struts2.mybatis-spring.struts2-spring-plugin.mysql|oracle.fastjson. ...

  3. Spring+Struts2+Mybatis在Intellij下的整合

    环境:jdk 1.8,      tomcat 8.0.38; 开发工具:Intellj; 具体步骤: 1. 创建一个maven下的web项目 2. 配置相应的jar文件,具体的配置方式为: < ...

  4. Maven+Struts2+MyBatis+Spring搭建教程

    教程目标: 在MyEclipse中搭建Struts2+MyBatis+Spring环境,用Maven管理项目,利用mybatis-gernerator插件生成部分代码 附带目标: struts2的自定 ...

  5. 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发

    1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十一)——SpringMVC架构

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6985816.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十)--My ...

  7. struts、hibernate、spring、 mybatis、 spring boot 等面试题汇总

    1.谈谈你对Struts的理解. 答: 1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionS ...

  8. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  9. 《JavaEE框架整合开发入门到实战——Spring+SpringMVC+MyBatis》读书笔记

    加油生活,嗯,希望假期可以把这本书刷完,新年快乐,嘻嘻,今天是旧的一年里最后的一天,嗯,除夕一过,就25岁啦.希望新的一年里,学更多的东西,认识优秀的人,希望家人健康平安,希望自己少一些烦恼,总之先学 ...

最新文章

  1. 树莓派 raspberry安全关机命令重启命令
  2. 专家:电脑看多了掉头发怎么办?
  3. Android-完美解决在Activity中触摸返回键onBackPressed不能触发问题
  4. swagger 修改dto注解_Swagger 详解
  5. centos7环境下ELK部署之elasticsearch
  6. 数学建模灵敏度分析_数学建模中的灵敏度分析,到底在分析什么?
  7. 有人说赚钱靠项目,也有人说赚钱靠技术
  8. 艾伟_转载:Cookie是什么?用法是怎样?与SESSION有什么区别?(二)
  9. php 正则忽略空白,(PHP)正则表达式-忽略空白
  10. js模拟下雨js特效代码
  11. mysql pdo教程_(唯一合适) PDO 教程
  12. 微信成语接龙小程序|微擎框架|带流量主|前端+后端完整源码
  13. ProcessingJoy —— 字母流光粒子【JAVA】
  14. aria2c rpc php,Debian 如何搭建使用 aria2c 作为下载工具
  15. ghost使用大全-GHOST,竟然不知道这么多参数
  16. 垂直搜索引擎的关键技术
  17. 下一半***清除全集
  18. python 数据透视表_使用Python数据透视表探索幸福数据
  19. watershed分水岭详解
  20. c语言微分方程离散化,PID算法的C语言实现二 PID算法的离散化

热门文章

  1. PAT1057. 数零壹
  2. LNMP架构的简单应用--部署论坛
  3. php mosquitto,mosquitto 扩展安装php客户端库-Go语言中文社区
  4. opengl将bmp读成像素_在 opengl 环境下将 texture 保存为 bmp 图片
  5. SQL从入门到入魔之初入门
  6. byte类型和char类型
  7. 萌宠NFT将于4月16日正式上线
  8. ChaiNext:市场短期内延续区间震荡
  9. SAP License:SAP MM物料管理
  10. SAP License:CO相关知识点