Spring 是一个开源框架, Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 简单来说, Spring 是一个轻量级的控制反转( IoC )和面向切面( AOP )的容器框架。
Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。 Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
MyBatis 本是 Apache 的一个开源项目iBatis , 2010 年这个项目由 apache software foundation 迁移到了 google code ,并且改名为 MyBatis 。 MyBatis 是一个基于 Java 的 持久层框架。 iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects ( DAO ) MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。 MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs ( Plain Old Java Objects ,普通的 Java 对象)映射成数据库中的记录。
3、SSM项目结构搭建
①Spring:
spring-aop-4.3.0.RELEASE.jar
spring-aspects-4.3.0.RELEASE.jar
spring-beans-4.3.0.RELEASE.jar
spring-context-4.3.0.RELEASE.jar
spring-context-support-4.3.0.RELEASE.jar
spring-core-4.3.0.RELEASE.jar
spring-expression-4.3.0.RELEASE.jar
spring-jdbc-4.3.0.RELEASE.jar
spring-tx-4.3.0.RELEASE.jar
spring-web-4.3.0.RELEASE.jar
spring-webmvc-4.3.0.RELEASE.jar
spring-webmvc-portlet-4.3.0.RELEASE.jar
spring-websocket-4.3.0.RELEASE.jar
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-logging-1.2.jar
③MyBatis:
mybatis-3.1.1.jar
log4j-1.2.16.jar
mybatis-spring-1.2.1.jar
④文件上传/下载:
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
⑤C3P0数据源:
c3p0-0.9.5.1.jar
mchange-commons-java-0.2.10.jar
classmate-0.8.0.jar
⑥MySQL:
mysql-connector-java-5.0.8-bin.jar
⑦JSTL:
taglibs-standard-compat-1.2.5.jar
taglibs-standard-impl-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
⑧JSON:
jackson-annotations-2.6.0.jar
jackson-core-2.6.0.jar
jackson-databind-2.6.0.jar
⑨Hibernate Validate:
hibernate-validator-4.3.0.Final.jar
validation-api-1.0.0.GA.jar
validation-api-1.1.0.CR1.jar
jboss-logging-3.1.0.CR2.jar
jboss-logging-3.1.1.GA.jar
1 xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 id="WebApp_ID" version="3.1"> 6 <display-name>SSM_01display-name> 7 <welcome-file-list> 8 <welcome-file>index.jspwelcome-file> 9 welcome-file-list> 10 11 12 13 14 <context-param> 15 <param-name>contextConfigLocationparam-name> 16 <param-value>classpath:spring/applicationContext.xmlparam-value> 17 context-param> 18 19 20 <listener> 21 <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> 22 listener> 23 24 25 26 27 <servlet> 28 <servlet-name>springDispatcherServletservlet-name> 29 <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> 30 31 <init-param> 32 <param-name>contextConfigLocationparam-name> 33 <param-value>classpath:springmvc/springMvc.xmlparam-value> 34 init-param> 35 <load-on-startup>1load-on-startup> 36 servlet> 37 38 39 40 <servlet-mapping> 41 <servlet-name>springDispatcherServletservlet-name> 42 43 <url-pattern>/url-pattern> 44 servlet-mapping> 45 46 47 48 49 <filter> 50 <filter-name>encodingFilterfilter-name> 51 <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class> 52 <async-supported>trueasync-supported> 53 <init-param> 54 <param-name>encodingparam-name> 55 <param-value>UTF-8param-value> 56 init-param> 57 filter> 58 <filter-mapping> 59 <filter-name>encodingFilterfilter-name> 60 <url-pattern>/*url-pattern> 61 filter-mapping> 62 63 64 65 66 <filter> 67 <filter-name>HiddenHttpMethodFilterfilter-name> 68 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class> 69 filter> 70 71 72 73 <filter-mapping> 74 <filter-name>HiddenHttpMethodFilterfilter-name> 75 <url-pattern>/*url-pattern> 76 filter-mapping> 77 web-app>
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:context="http://www.springframework.org/schema/context" 4 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.xsd 6 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 7 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> 8 9 <context:component-scan base-package="cn.com.zfc.ssm"> 10 <context:include-filter type="annotation" 11 expression="org.springframework.stereotype.Component" /> 12 <context:include-filter type="annotation" 13 expression="org.springframework.stereotype.Repository" /> 14 <context:include-filter type="annotation" 15 expression="org.springframework.stereotype.Service" /> 16 context:component-scan> 17 18 19 <context:property-placeholder location="classpath:db.properties" /> 20 21 22 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 23 <property name="user" value="${user}">property> 24 <property name="password" value="${password}">property> 25 <property name="jdbcUrl" value="${jdbcUrl}">property> 26 <property name="driverClass" value="${driverClass}">property> 27 bean> 28 29 30 <bean id="transactionManager" 31 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 32 <property name="dataSource" ref="dataSource">property> 33 bean> 34 35 36 <tx:annotation-driven transaction-manager="transactionManager" /> 37 38 39 40 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 41 <property name="dataSource" ref="dataSource">property> 42 43 <property name="typeAliasesPackage" value="cn.com.zfc.ssm.entity">property> 44 bean> 45 46 47 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 48 <property name="basePackage" value="cn.com.zfc.ssm.dao" /> 49 50 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> 51 bean> 52 53 beans>
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:context="http://www.springframework.org/schema/context" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" 5 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd 6 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> 9 10 11 12 <context:component-scan base-package="cn.com.zfc.ssm"> 13 <context:include-filter type="annotation" 14 expression="org.springframework.stereotype.Controller" /> 15 context:component-scan> 16 17 18 <bean id="internalResourceViewResolver" 19 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 20 <property name="prefix" value="/WEB-INF/views/">property> 21 <property name="suffix" value=".jsp">property> 22 bean> 23 24 25 <mvc:default-servlet-handler /> 26 27 28 <mvc:annotation-driven /> 29 30 31 <aop:aspectj-autoproxy>aop:aspectj-autoproxy> 32 beans>
1 user=root 2 password=root 3 driverClass=com.mysql.jdbc.Driver 4 jdbcUrl=jdbc:mysql://localhost:3306/ssm_01
1 # Global logging configuration 2 log4j.rootLogger=DEBUG, stdout 3 # Console output... 4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 7 8 log4j.logger.java.sql.ResultSet=INFO 9 log4j.logger.org.apache=INFO 10 log4j.logger.java.sql.Connection=DEBUG 11 log4j.logger.java.sql.Statement=DEBUG 12 log4j.logger.java.sql.PreparedStatement=DEBUG
1 package cn.com.zfc.ssm.entity; 2 3 import org.springframework.stereotype.Component; 4 5 /** 6 * 定义实体类:如果实体类的属性名和数据表中的字段名不一致,则需要在 映射文件中配置 resultMap 7 * 8 * @author FuchangZhang 9 * 10 */ 11 @Component 12 public class User { 13 private Integer id; 14 private String userName; 15 private String userSex; 16 private Integer userAge; 17 18 public User() { 19 super(); 20 } 21 22 public User(String userName, String userSex, Integer userAge) { 23 super(); 24 this.userName = userName; 25 this.userSex = userSex; 26 this.userAge = userAge; 27 } 28 29 public User(Integer id, String userName, String userSex, Integer userAge) { 30 super(); 31 this.id = id; 32 this.userName = userName; 33 this.userSex = userSex; 34 this.userAge = userAge; 35 } 36 37 public Integer getId() { 38 return id; 39 } 40 41 public void setId(Integer id) { 42 this.id = id; 43 } 44 45 public String getUserName() { 46 return userName; 47 } 48 49 public void setUserName(String userName) { 50 this.userName = userName; 51 } 52 53 public String getUserSex() { 54 return userSex; 55 } 56 57 public void setUserSex(String userSex) { 58 this.userSex = userSex; 59 } 60 61 public Integer getUserAge() { 62 return userAge; 63 } 64 65 public void setUserAge(Integer userAge) { 66 this.userAge = userAge; 67 } 68 69 @Override 70 public String toString() { 71 return "User [id=" + id + ", userName=" + userName + ", userSex=" + userSex + ", userAge=" + userAge + "]"; 72 } 73 74 }
3.9 UserMapper.java
1 package cn.com.zfc.ssm.dao; 2 3 import java.util.List; 4 5 import org.springframework.stereotype.Repository; 6 7 import cn.com.zfc.ssm.entity.User; 8 9 /** 10 * 定义接口:方法名得和相应的 mapper.xml 中的 id 保持一致 11 * 12 * @author FuchangZhang 13 * 14 */ 15 @Repository 16 public interface UserMapper { 17 18 // 添加一条用户信息 19 public int save(User user); 20 21 // 删除一条用户信息 22 public int delete(int id); 23 24 // 修改一条用户信息 25 public int update(User user); 26 27 // 查询一条用户信息 28 public User getUser(int id); 29 30 // 查询全部用户信息 31 public ListgetUsers(); 32 33 }
3.10 UserMapper.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 <mapper namespace="cn.com.zfc.ssm.dao.UserMapper"> 4 5 <resultMap type="User" id="userResultMap"> 6 <id property="id" column="id" /> 7 <result property="userName" column="user_name" /> 8 <result property="userSex" column="user_sex" /> 9 <result property="userAge" column="user_age" /> 10 resultMap> 11 12 13 14 <parameterMap type="User" id="userParameterMap"> 15 <parameter property="id" resultMap="userResultMap" /> 16 <parameter property="userName" resultMap="userResultMap" /> 17 <parameter property="userSex" resultMap="userResultMap" /> 18 <parameter property="userAge" resultMap="userResultMap" /> 19 parameterMap> 20 21 22 <insert id="save" parameterMap="userParameterMap"> 23 insert into user_info 24 (user_name,user_sex,user_age) 25 values 26 (#{userName},#{userSex},#{userAge}) 27 insert> 28 29 <delete id="delete" parameterType="int"> 30 delete from user_info 31 where 32 id=#{id} 33 delete> 34 35 36 <update id="update" parameterMap="userParameterMap"> 37 update user_info 38 set 39 user_name=#{userName},user_sex=#{userSex},user_age=#{userAge} 40 where 41 id=#{id} 42 update> 43 44 45 <select id="getUser" parameterType="int" resultMap="userResultMap"> 46 select * from 47 user_info 48 where 49 id=#{id} 50 select> 51 52 53 <select id="getUsers" resultMap="userResultMap"> 54 select * from user_info 55 select> 56 mapper>
3.11、UserService.java
1 package cn.com.zfc.ssm.service; 2 3 import java.util.List; 4 5 import org.springframework.stereotype.Repository; 6 7 import cn.com.zfc.ssm.entity.User; 8 9 @Repository 10 public interface UserService { 11 // 添加一条用户信息 12 public boolean add(User user); 13 14 // 删除一条用户信息 15 public boolean delete(int id); 16 17 // 修改一条用户信息 18 public boolean update(User user); 19 20 // 查询一条用户信息 21 public User queryOne(int id); 22 23 // 查询全部用户信息 24 public ListqueryAll(); 25 }
3.12、UserServiceImpl.java
1 package cn.com.zfc.ssm.service.impl; 2 3 import java.util.List; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 import cn.com.zfc.ssm.dao.UserMapper; 9 import cn.com.zfc.ssm.entity.User; 10 import cn.com.zfc.ssm.service.UserService; 11 12 @Service("userService") 13 public class UserServiceImpl implements UserService { 14 15 @Autowired 16 private UserMapper userMapper; 17 private int result; 18 19 @Override 20 public boolean add(User user) { 21 result = userMapper.save(user); 22 if (result > 0) { 23 return true; 24 } else { 25 return false; 26 } 27 } 28 29 @Override 30 public boolean delete(int id) { 31 result = userMapper.delete(id); 32 if (result > 0) { 33 return true; 34 } else { 35 return false; 36 } 37 } 38 39 @Override 40 public boolean update(User user) { 41 result = userMapper.update(user); 42 if (result > 0) { 43 return true; 44 } else { 45 return false; 46 } 47 } 48 49 @Override 50 public User queryOne(int id) { 51 User user = userMapper.getUser(id); 52 return user; 53 } 54 55 @Override 56 public ListqueryAll() { 57 List users = userMapper.getUsers(); 58 return users; 59 } 60 61 }
3.13、UserHandler.java
1 package cn.com.zfc.ssm.handler; 2 3 import java.util.Map; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Controller; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 9 import cn.com.zfc.ssm.entity.User; 10 import cn.com.zfc.ssm.service.UserService; 11 12 @Controller 13 public class UserHandler { 14 15 @Autowired 16 private UserService userService; 17 18 // 添加页面 19 @RequestMapping("/addView") 20 public String addView(Mapmap) { 21 map.put("user", new User()); 22 return "addUser"; 23 } 24 25 // 保存操作 26 @RequestMapping("/addUser") 27 public String addUser(User user) { 28 if (userService.add(user)) { 29 return "success"; 30 } else { 31 return "redirect:/queryAll"; 32 } 33 } 34 35 // 删除操作 36 @RequestMapping("/delete") 37 public String delete(int id) { 38 if (userService.delete(id)) { 39 System.out.println("删除成功"); 40 } else { 41 System.out.println("删除失败"); 42 } 43 return "redirect:/queryAll"; 44 } 45 46 // 查询一个操作 47 @RequestMapping("/queryOne") 48 public String queryOne(int id, Map map) { 49 map.put("user", userService.queryOne(id)); 50 return "update"; 51 } 52 53 // 修改操作 54 @RequestMapping("/update") 55 public String update(User user, Map map) { 56 if (userService.update(user)) { 57 System.out.println("修改成功"); 58 return "redirect:/queryAll"; 59 } else { 60 System.out.println("修改失败"); 61 map.put("user", userService.queryOne(user.getId())); 62 return "update"; 63 } 64 } 65 66 // 查询全部操作 67 @RequestMapping("/queryAll") 68 public String queryAll(Map map) { 69 map.put("users", userService.queryAll()); 70 return "queryAll"; 71 } 72 }
3.14、index.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title heretitle> 8 head> 9 <body> 10 <a href="${pageContext.request.contextPath}/addView">添加用户a> 11 <hr /> 12 <a href="${pageContext.request.contextPath}/queryAll">查询全部a> 13 body> 14 html>
3.15、addUser.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.util.*"%> 4 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 6 DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 10 <title>用户添加title> 11 head> 12 <body> 13 <h1>用户添加h1> 14 <form:form action="addUser" method="post" modelAttribute="user"> 15 16 UserName:<form:input path="userName" /> 17 <hr /> 18 <% 19 Map<String, Object> sexes = new HashMap<>(); 20 sexes.put("男", "男"); 21 sexes.put("女", "女"); 22 request.setAttribute("sexes", sexes); 23 %> 24 Sex: 25 <form:radiobuttons path="userSex" items="${sexes}" /> 26 <hr /> 27 UserAge:<form:input path="userAge" /> 28 <hr /> 29 <input type="submit" value="添加" /> 30 form:form> 31 body> 32 html>
3.16、success.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title heretitle> 8 head> 9 <body> 10 <h1>Success Page!!!h1> 11 body> 12 html>
3.17、queryAll.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 5 DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>Insert title heretitle> 10 <style type="text/css"> 11 table, tr, th, td { 12 border: 1px solid black; 13 } 14 15 table { 16 width: 80%; 17 } 18 style> 19 head> 20 <body> 21 <table> 22 <thead> 23 <tr> 24 <th>IDth> 25 <th>UserNameth> 26 <th>UserSexth> 27 <th>UserAgeth> 28 <th>Operatorth> 29 tr> 30 thead> 31 <tbody> 32 <c:choose> 33 <c:when test="${requestScope.users.size()>0 }"> 34 <c:forEach items="${requestScope.users}" var="user"> 35 <tr> 36 <td>${user.id }td> 37 <td>${user.userName }td> 38 <td>${user.userSex }td> 39 <td>${user.userAge }td> 40 <td><a 41 href="${pageContext.request.contextPath}/delete?id=${user.id}">Deletea> 42 <a 43 href="${pageContext.request.contextPath}/queryOne?id=${user.id}">Updatea> 44 td> 45 tr> 46 c:forEach> 47 c:when> 48 <c:otherwise>没有人c:otherwise> 49 c:choose> 50 tbody> 51 table> 52 53 body> 54 html>
3.18、update.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.util.*"%> 4 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 6 DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 10 <title>Insert title heretitle> 11 head> 12 <body> 13 <h1>用户修改h1> 14 <form:form action="${pageContext.request.contextPath}/update" 15 method="post" modelAttribute="user"> 16 17 <input type="hidden" name="id" value="${user.id}" /> 18 UserName:<form:input path="userName" /> 19 <hr /> 20 <% 21 Map<String, Object> sexes = new HashMap<>(); 22 sexes.put("男", "男"); 23 sexes.put("女", "女"); 24 request.setAttribute("sexes", sexes); 25 %> 26 Sex: 27 <form:radiobuttons path="userSex" items="${sexes}" /> 28 <hr /> 29 UserAge:<form:input path="userAge" /> 30 <hr /> 31 <input type="submit" value="修改" /> 32 form:form> 33 body> 34 html>
四、数据库ssm_01
数据表:user_info
id、user_name、user_sex、user_age