因?yàn)?Spring MVC 是 Spring 框架中的一個(gè)子模塊,所以 Spring 與 SpringMVC 之間不存在整合的問題。實(shí)際上,SSM 框架的整合只涉及 Spring 與 MyBatis 的整合以及 Spring MVC 與 MyBatis 的整合。
詳細(xì)步驟如下:
創(chuàng)建應(yīng)用ssmDemo并導(dǎo)入相關(guān) JAR 包
1>MyBatis 框架所需的 JAR 包
MyBatis 框架所需的 JAR 包包括它的核心包和依賴包
2>Srping框架所需要的JAR包
Spring 框架所需的 JAR 包包括它的核心模塊 JAR、AOP 開發(fā)使用的 JAR、JDBC 和事務(wù)的 JAR 包
3> MyBatis 與 Spring 整合的中間 JAR 包 mybatis-spring-2.0.3.jar
4> 數(shù)據(jù)庫驅(qū)動(dòng) JAR 包 mysql-connector-java-5.1.39-bin.jar
5> 數(shù)據(jù)源所需的 JAR 包
在整合時(shí)使用的是 DBCP 數(shù)據(jù)源,需要準(zhǔn)備 DBCP 和連接池的 JAR 包
commons-dbcp2-2.7.0.jar
下載地址: http://mirror.bit.edu.cn/apache//commons/dbcp/binaries/commons-dbcp2-2.7.0-bin.tar.gz
commons-pool2-2.8.0.jar
下載地址:http://mirror.bit.edu.cn/apache//commons/pool/binaries/commons-pool2-2.8.0-bin.tar.gz
6> Spring MVC 的相關(guān) JAR 包
spring-web-5.2.3.RELEASE.jar 和 spring-webmvc-5.2.3.RELEASE.jar
7. 事務(wù)管理相關(guān)的JAR包
aspectjrt-1.8.7.jar, aspectjweaver.jar
8> spring mvc返回json格式需要引入的jar
最終所有的JAB包如下:
創(chuàng)建數(shù)據(jù)庫及表格
CREATE DATABASE `ssmone` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; CREATE TABLE `user` ( `uid` tinyint(2) NOT NULL, `uname` varchar(20) DEFAULT NULL, `usex` varchar(10) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
創(chuàng)建持久化類
在 src 目錄下創(chuàng)建一個(gè)名為 com.po 的包,并在該包中創(chuàng)建一個(gè) PO 類 MyUser。具體代碼如下
package com.po; public class MyUser { private Integer uid; private String uname; private String usex; public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUsex() { return usex; } public void setUsex(String usex) { this.usex = usex; } @Override public String toString() { // 為了方便查看結(jié)果,重寫了toString方法 return "User[uid=" + uid + ",uname=" + uname + ",usex=" + usex + "]"; } }
5. 創(chuàng)建 Dao 層
在 src 目錄下創(chuàng)建一個(gè)名為 com.dao 的包,并在該包中創(chuàng)建一個(gè)名為 UserDao 的接口。具體代碼如下:
package com.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import com.po.MyUser; @Repository("userDao") @Mapper /* * 使用Spring自動(dòng)掃描MyBatis的接口并裝配 (Spring將指定包中所有被注解標(biāo)注的接口自動(dòng)裝配為Mybatis的映射接口 */ public interface UserDao { /** * 接口方法對(duì)應(yīng)的SQL映射文件UserMapper.xml中的id */ public MyUser selectUserById(Integer uid); public List<MyUser> selectAllUser(); public int addUser(MyUser user); public int updateUser(MyUser user); public int deleteUser(Integer uid); }
6. 創(chuàng)建 Controller 層
在 src 目錄下創(chuàng)建一個(gè)名為 com.controller 的包,并在該包中創(chuàng)建一個(gè)名為 UserController 的控制器類。具體代碼如下:
package com.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.dao.UserDao; import com.po.MyUser; @Controller("userController") public class UserController { @Autowired private UserDao userDao; @RequestMapping("/select") public String test(Model model) { // 查詢一個(gè)用戶 MyUser auser = userDao.selectUserById(1); System.out.println(auser); System.out.println("============================"); // 添加一個(gè)用戶 MyUser addmu = new MyUser(); addmu.setUname("莊子"); addmu.setUsex("男"); int add = userDao.addUser(addmu); System.out.println("添加了" + add + "條記錄"); System.out.println("============================"); // 修改一個(gè)用戶 MyUser updatemu = new MyUser(); updatemu.setUid(1); updatemu.setUname("老子"); updatemu.setUsex("男"); int up = userDao.updateUser(updatemu); System.out.println("修改了" + up + "條記錄"); System.out.println("============================"); // 刪除一個(gè)用戶 int dl = userDao.deleteUser(9); System.out.println("刪除了" + dl + "條記錄"); System.out.println("============================"); // 查詢所有用戶 List<MyUser> list = userDao.selectAllUser(); for (MyUser myUser : list) { System.out.println(myUser); } List<MyUser> list1 = userDao.selectAllUser(); model.addAttribute("userList", list1); return "user/userList"; } }
7. 創(chuàng)建用戶信息顯示頁面
在 WEB-INF 目錄下創(chuàng)建文件夾views/user,并在該文件夾下user創(chuàng)建用戶信息顯示頁面 userList. jsp。具體代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>顯示用戶信息</title> </head> <body> 用戶信息 <br> <c:forEach items="${userList }" var="user"> ${user.uid } ${user.uname } ${user.usex }<br> </c:forEach> </body> </html>
8. 創(chuàng)建相關(guān)配置文件
1> web.xml
在 WEB-INF 目錄下創(chuàng)建 web.xml 文件,并在該文件中實(shí)例化 ApplicationContext 容器、啟動(dòng) Spring 容器、配置 DispatcherServlet 以及配置字符編碼過濾器。具體代碼如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>ssmDemo</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 實(shí)例化ApplicationContext容器 --> <context-param> <!-- 加載src目錄下的 applicationContext-*.xml文件--> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- ContextLoaderListener的作用就是啟動(dòng)Web容器時(shí),自動(dòng)裝配ApplicationContext.xml的配置信息。 因?yàn)樗鼘?shí)現(xiàn)了ServletContextListener這個(gè)接口,在web.xml配置這個(gè)監(jiān)聽器,啟動(dòng)容器時(shí),就會(huì)默認(rèn)執(zhí)行它實(shí)現(xiàn)的方法。 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
2> springmvc-servlet.xml
在 src目錄下創(chuàng)建Spring MVC的核心配置文件 springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 使用掃描機(jī)制掃描包 --> <context:component-scan base-package="com.controller" /> <mvc:annotation-driven > <!-- 消息轉(zhuǎn)換器 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- annotation-driven用于簡化開發(fā)的配置,注解DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --> <!-- 完成視圖的對(duì)應(yīng) --> <!-- 對(duì)轉(zhuǎn)向頁面的路徑解析。prefix:前綴, suffix:后綴 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
3> applicationContext.xml
在 src 目錄下創(chuàng)建 Spring 的配置文件 applicationContext.xml,在該文件中配置數(shù)據(jù)源、添加事務(wù)支持、開啟事務(wù)注解、配置 MyBatis 工廠、進(jìn)行 Mapper 代理開發(fā)以及指定掃描包。具體代碼如下:
<?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:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" 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-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!--配置數(shù)據(jù)源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" scope="singleton"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/ssmone?characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="root" /> <property name="maxTotal" value="30" /> <property name="maxIdle" value="10" /> <property name="initialSize" value="5" /> </bean> <!-- 添加事務(wù)支持 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 開啟事務(wù)注解 --> <tx:annotation-driven transaction-manager="txManager" /> <!-- 配置mybitas工廠,同時(shí)指定數(shù)據(jù)源,并與MyBatis完美整合 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- configLocation的屬性值為Mybatis的核心配置文件 --> <!-- <property name="configLocation" value="classpath:mybatis-config.xml" /> --> <!-- 所有配置的mapper文件 --> <property name="mapperLocations" value="classpath:com/mybatis/*.xml" /> </bean> <!-- Mapper代理開發(fā),使用Spring自動(dòng)掃描Mybatis的接口并裝配 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- mybatis-spring組件的掃描器 --> <property name="basePackage" value="com.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> </beans>
4> 在 com.mybatis 文件夾中創(chuàng)建 SQL 映射文件 UserMapper.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.dao.UserDao"> <!--根據(jù)uid查詢一個(gè)用戶信息 --> <select id="selectUserById" parameterType="Integer" resultType="com.po.MyUser"> select * from user where uid = #{uid} </select> <!-- 查詢所有用戶信息 --> <select id="selectAllUser" resultType="com.po.MyUser"> select * from user </select> <!-- 添加一個(gè)用戶,#{uname}為 com.mybatis.po.MyUser 的屬性值 --> <insert id="addUser" parameterType="com.po.MyUser"> insert into user (uname,usex) values(#{uname},#{usex}) </insert> <!--修改一個(gè)用戶 --> <update id="updateUser" parameterType="com.po.MyUser"> update user set uname = #{uname},usex = #{usex} where uid = #{uid} </update> <!-- 刪除一個(gè)用戶 --> <delete id="deleteUser" parameterType="Integer"> delete from user where uid = #{uid} </delete> </mapper>
9. 發(fā)布運(yùn)行應(yīng)用程序
相關(guān): 通過eclipse創(chuàng)建基于maven的ssm(Spring+SpringMVC+Mybayts)框架
配置信息下載:
注配置文件包目錄與上文不一致