以項目驅動學習,以實踐檢驗真知php
如今使用Java後端開發使用的技術棧基本上比較統一:Spring + SpringMVC + Mybatis,即你們常說的SSM。雖然如今流行的作法是使用SpringBoot來快速搭建、配置好SSM項目,但仍是有必要知道如何不用SpringBoot來組合好這三者,由於SpringBoot也只是幫助咱們作好了許多配置,並非說捨棄掉了那些配置,因此知道原生的SSM如何整合能夠更好幫助咱們理解SSM也能更好的理解SpringBoot帶來的好處!並且有的老項目就是沒有用SpringBoot,若是你對原生SSM整合與配置一無所知那維護老項目起來會極其難受。css
SSM整合相比起SpringBoot的快速搭建天然是繁瑣無比,可是不用擔憂,本文會一步一步演示如何整合這三者,而且會講解每一個配置的含義。老套路,文章最後還放上了思惟導圖和項目Github地址,clone下來便可直接運行,若是想本身作一個完整的SSM項目,直接用這套架子進行開發也是徹底沒問題的!html
這裏使用idea進行項目建立,maven來管理依賴包。首先咱們在idea上新建一個project,選擇Maven,而後選擇web應用:前端
點擊下一步後輸入GroupId和ArtifactId後點擊下一步直到完成。項目建立完畢後整個項目結構以下:java
如今還先彆着急配置SSM,咱們先得配置一下這個idea下的web項目才行。你們也能夠看到,項目創建起來後這個web.xml文件裏寫的是2.3版本,這個版本太老了,不行。mysql
咱們按住catl + shift + alt + S
打開idea的Project Structure,而後點擊左側的Modules,再點擊Web,而後點擊右邊的刪除按鈕,肯定,最後點擊APPLY先將這個默認的刪除:git
此時咱們會發現默認的web.xml文件已經被刪除了。而後咱們再點擊右側的添加按鈕,點擊web.xml進行添加:github
這裏咱們選擇3.1版本,選擇好後點擊彈出框的OK,再點擊下方的OK便可建立完畢:web
建立完畢後就會發現咱們的web.xml內容已經變成了3.1了。spring
此時還先不要着急去配置SSM,咱們如今項目連個基本的結構都沒有呢,你核心代碼寫在哪,你測試在哪些,你資源放哪這些都是咱們要去創建的。
首先,咱們在src路徑下新建test文件夾,而後在src/main路徑下新建java和resources文件夾。創建好文件夾後,右鍵點擊文件夾,而後拖到下方,選擇Mark Directory as,而後選擇對應的目錄結構。
java文件夾對應SourcesRoot,表明標記爲項目源代碼路徑,代碼就寫在這裏。
resources文件夾對應ResourcesRoot,表明標記爲資源路徑,全部資源好比配置文件就放在這。
test文件夾對應TestSourcesRoot,表明標記爲測試路徑,測試代碼都會放在這裏。
文件夾指定好後,咱們就要在java文件夾下建立咱們的代碼包結構。包的話就分爲最基本的controller、service、mapper、entity。包建好後目錄結構以下:
基本的項目結構整理好後,接下來咱們就要開始對SSM進行整合了。首先確定要作的就是在pom.xml文件中導入必備的依賴包,直接複製粘貼就行了,各個地方都作了註釋說明:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!--統一配置jar包的版本-->
<mysql.version>5.1.48</mysql.version>
<spring.version>5.2.0.RELEASE</spring.version>
<jackson.version>2.10.0</jackson.version>
</properties>
<dependencies>
<!--單元測試,注意哦要4.12版本以上。scope爲test表明只用來作測試,並不隨版本打包發佈此依賴包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--日誌咱們使用logback-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 簡化Getter、Setter的工具lombok。非必需 注意:使用lombok還要在idea上下載對應的插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
<!-- ***************數據庫相關配置****************** -->
<!-- mysql驅動依賴包,鏈接mysql必備-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 數據源依賴包,能大幅提高性和便利性。這裏咱們用阿里的德魯伊數據源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!-- Mybatis必備依賴包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- ***************web相關配置****************** -->
<!--配置JavaEE依賴包,包含了Servlet、Validation等功能-->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0</version>
<scope>provided</scope>
</dependency>
<!-- JSTL依賴包,若是用將jstl標籤用在jsp中就要此依賴包。非必需的 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- jackson依賴包,用來將java對象轉換JSON格式,SpringMVC要用的 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- ***************Spring相關配置****************** -->
<!--配置Spring JDBC容器所需的jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--配置Spring IOC容器所需的jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring mvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- AspectJ所需的jar包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!--Spring測試依賴-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!--配置Spring整合mybatis的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
複製代碼
在進行整合以前咱們來準備一下數據庫,好接下來進行一個完整的演示。我這裏用的是MySQL 5.7.25,我們創建一個名爲ssm_demo的數據庫,執行語句新建一張user表並插入兩條測試數據:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
`name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '帳戶名',
`password` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '帳戶密碼',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
INSERT INTO `user` VALUES (1, 'admin', '123456');
INSERT INTO `user` VALUES (2, 'rudecrab', '654321');
複製代碼
而後咱們在entity包下創建和數據庫表對應的實體類User:
@Data // lombok註解,自動生成Getter、Setter、toString方法
public class User implements Serializable {
private Long id;
private String name;
private String password;
}
複製代碼
而後咱們在resources文件夾下創建database.properties
文件來配置數據庫鏈接的相關信息(這裏根據本身的數據庫信息配置哦),等下整合Mybatis要用到的:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm_demo?characterEncoding=utf-8&useSSL=false&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
複製代碼
真實項目中通常是要觀察日誌輸出的,咱們再配置一下日誌。在resources目錄下新建logback.xml
文件。注意啊,在尾部須要指定某個包,這個根據本身項目結構包名來設置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--定義日誌文件輸出地址-->
<property name="LOG_ERROR_HOME" value="error"/>
<property name="LOG_INFO_HOME" value="info"/>
<!--經過appender標籤指定日誌的收集策略,咱們會定義三個收集策略:控制檯輸出、普通訊息文件輸出、錯誤信息文件輸出-->
<!--name屬性指定appender命名-->
<!--class屬性指定輸出策略,一般有兩種,控制檯輸出和文件輸出,文件輸出就是將日誌進行一個持久化-->
<!--控制檯輸出-->
<appender name="CONSOLE_LOG" class="ch.qos.logback.core.ConsoleAppender">
<!--使用該標籤下的標籤指定日誌輸出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- %p:輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL %r:輸出自應用啓動到輸出該日誌訊息所耗費的毫秒數 %t:輸出產生該日誌事件的線程名 %f:輸出日誌訊息所屬的類別的類別名 %c:輸出日誌訊息所屬的類的全名 %d:輸出日誌時間點的日期或時間,指定格式的方式: %d{yyyy-MM-dd HH:mm:ss} %l:輸出日誌事件的發生位置,即輸出日誌訊息的語句在他所在類別的第幾行。 %m:輸出代碼中指定的訊息,如log(message)中的message %n:輸出一個換行符號 -->
<pattern>%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %yellow([%-5p]) %highlight([%t]) %boldMagenta([%C]) %green([%L]) %m%n</pattern>
</encoder>
</appender>
<!--普通訊息文件輸出-->
<appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--經過使用該標籤指定過濾策略-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--標籤指定過濾的類型-->
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<!--標籤指定日誌輸出格式-->
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.SSS}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</encoder>
<!--標籤指定收集策略,好比基於時間進行收集-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--標籤指定生成日誌保存地址,經過這樣配置已經實現了分類分天收集日誌的目標了-->
<fileNamePattern>${LOG_INFO_HOME}//%d.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!--錯誤信息文件輸出-->
<appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.SSS}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!--用來設置某一個包或具體的某一個類的日誌打印級別-->
<logger name="com.rudecrab.ssm.mapper" level="DEBUG"/>
<!--必填標籤,用來指定最基礎的日誌輸出級別-->
<root level="info">
<!--添加append-->
<appender-ref ref="CONSOLE_LOG"/>
<appender-ref ref="INFO_LOG"/>
<appender-ref ref="ERROR_LOG"/>
</root>
</configuration>
複製代碼
如今咱們開始終於能夠進行Spring和Mybatis的整合了。咱們先在resources文件夾下新建mybatis-config.xml
文件來對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>
<!--配置全局設置-->
<settings>
<!--啓用日誌,並指定日誌實現方式-->
<setting name="logImpl" value="SLF4J"/>
<!--啓用主鍵生成策略-->
<setting name="useGeneratedKeys" value="true"/>
<!--配置啓用下劃線轉駝峯的映射-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--啓用二級緩存-->
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
複製代碼
再來新建spring-mybatis.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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--屬性文件的讀取,這裏讀取剛纔咱們的數據庫鏈接相關配置-->
<context:property-placeholder location="classpath:database.properties" file-encoding="UTF-8"/>
<!--配置自動掃描,若是不配置這個那麼就沒法使用@Autowired加載bean-->
<context:component-scan base-package="com.rudecrab.ssm" use-default-filters="true">
<!--這裏要排除掉Controller的註解,Controller專門交給MVC去掃描,這樣會就不會衝突-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--配置數據源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!--配置JDBC基礎屬性,即數據庫鏈接相關配置-->
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!--配置鏈接池的設置,這個是要根據真實項目狀況來配置的,隨着項目的發展會不斷修改-->
<property name="initialSize" value="10"/>
<property name="maxActive" value="100"/>
</bean>
<!-- 重點來了,這裏配置是MyBatis的SqlSessionFactory,就是這一塊配置將Spring和Mybatis整合到了一塊兒 若是不配置這裏,你的mapper接口只能經過SqlSession來獲取,十分麻煩。這裏配置好後就能夠經過Spring IoC來獲取mapper接口了 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
<!--指定數據源-->
<property name="dataSource" ref="dataSource"/>
<!--加載mybatis全局設置,classpath即咱們的資源路徑resources-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--配置Mybatis的映射xml文件路徑-->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!--指定Mybatis的mapper接口掃描包-->
<!--注意!!!若是用的是tk.mybatis自動生成的mapper接口,必定要將org.mybatis.改爲tk.mybatis-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定剛纔咱們配置好的sqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--指定mapper接口掃描包-->
<property name="basePackage" value="com.rudecrab.ssm.mapper"/>
</bean>
<!--配置事務管理器,若是不配置這個,不啓動事務掃描的話,那麼發生了異常也不會觸發回滾-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--還得指定數據源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--啓動事務的掃描-->
<tx:annotation-driven/>
</beans>
複製代碼
至此Spring和Myabtis已經整合配置好了,口說無憑,我們仍是得測試一下看下效果。在測試以前咱們得先創建好mapper接口文件、myabtis映射xml文件、service接口和實現類:
UserMapper接口專門用來聲明各類數據庫操做方法,@Repository
註解將其定義爲Spring所管理的Bean:
@Repository
public interface UserMapper {
/** * 從數據庫中查詢出全部的User對象 * @return User對象集合 */
List<User> selectAll();
}
複製代碼
UserMapper.xml映射文件用來寫方法對應要執行的SQL語句:
<?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.rudecrab.ssm.mapper.UserMapper">
<!--開啓緩存-->
<cache/>
<!--從數據庫中查詢出全部的User對象-->
<select id="selectAll" resultType="com.rudecrab.ssm.entity.User">
select * from user
</select>
</mapper>
複製代碼
UserService接口用來聲明關於User的業務方法:
public interface UserService {
/** * 從數據庫中查詢出全部的User對象 * @return User對象集合 */
List<User> getAll();
}
複製代碼
UserServiceImpl實體類用來實現關於User的業務邏輯,@Service
註解和@Repository
註解用處同樣,將其定義爲Bean。@Transactional
註解爲聲明式事務,若是該業務層的方法有異常拋出則會觸發事務回滾。而後使用@Autowired
註解在私有屬性上,自動加載Bean,無需咱們手動建立UserMapper了:
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getAll() {
return userMapper.selectAll();
}
}
複製代碼
相關類和文件都建好了,如今咱們在test文件夾下創建一個測試類UserServiceTest,必定要在測試類上加上那兩個註解,不然沒法正常使用Spring相關功能:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void getAll() {
System.out.println(userService.getAll());
System.out.println(userService.getAll());
}
}
複製代碼
運行後咱們就能夠看到運行結果了:
能夠看到結果正常顯示,而且日誌也打印在了控制檯上。這表明咱們已經完成了Spring和Mybatis的整合!
咱們接下來配置SpringMVC,在resources目錄下新建spring-mvc.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:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置視圖解析器,這樣控制器裏就直接返回文件名就行了-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前綴-->
<property name="prefix" value="/WEB-INF/views/"/>
<!--後綴-->
<property name="suffix" value=".jsp"/>
</bean>
<!--配置靜態資源過濾,否則靜態資源好比css是訪問不到的-->
<mvc:default-servlet-handler/>
<!--配置掃描的包-->
<context:component-scan base-package="com.rudecrab.ssm.controller" use-default-filters="false">
<!--只掃描controller,實際開發中最好用這種方式來寫,這邊MVC就只掃描controller,就不會IOC那邊衝突,不然事務會被覆蓋,IOC那邊就要排除這個controller-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--啓用MVC的註解-->
<mvc:annotation-driven/>
</beans>
複製代碼
最後一個配置天然就是在web.xml裏進行整合了,主要配置三點:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<!--1.配置Spring IOC容器的建立,若是不配置這個,Mybatis就在web應用裏沒法使用-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!--spring和mybatis整合配置文件路徑-->
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--2.配置SpringMVC的前端控制器-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--SpringMVC整合配置文件路徑-->
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--3.配置字符編碼過濾器-->
<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>
</web-app>
複製代碼
以上,全部的配置都弄好了,那麼接下來我們就跑一個最簡單的web項目來看看是否整合成功!還記得咱們在在spring-mvc.xml
文件中配置的視圖解析前綴嘛,咱們在**/WEB-INF/views/**文件夾下新建一個index.jsp文件:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首頁-RudeCrab</title>
</head>
<body>
<%--循環提取userList中的元素--%>
<c:forEach var="user" items="${userList}">
<ul>
<li>${user}</li>
</ul>
</c:forEach>
</body>
</html>
複製代碼
接下來再在controller包下新建一個控制器類來定義訪問接口:
@Controller
@RequestMapping(value = "user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/getList")
public String getList(Model model) {
// 將數據存到model對象裏,這樣jsp就能訪問數據
model.addAttribute("userList", userService.getAll());
// 返回jsp文件名
return "index";
}
@GetMapping("/getJson")
@ResponseBody
public List<User> getList() {
// 若是想作先後端分離的話能夠加上@ResponseBody註解,直接返回數據對象,這樣前端就能夠經過獲取json來渲染數據了
return userService.getAll();
}
}
複製代碼
而後咱們啓動Tomcat,在瀏覽器中訪問接口:
能夠看到咱們成功的訪問到了數據,至此SSM徹底整合完畢!
總體的整合配置思路已經畫好思惟導圖了,其中每一個節點上都寫好了比較詳細的備註,能夠下載文件後觀看。文件放在末位的github地址中:
上面包含了整個項目,clone下來用idea打開便可運行!同時也放上了思惟導圖文件。若是對你有幫助麻煩點一個star,項目中還有其餘的【項目實踐】,未來我也會不斷更新更多的項目實踐!