天天看點

SSM架構搭建 --- 超詳細

本文介紹SSM架構的搭建過程

如有需要,可以參考

如有幫助,不忘 點贊 ❥

  • 首先建立一個Maven項目

點選下一步

點選下一步

SSM架構搭建 --- 超詳細

選擇自己本地的Maven配置,點選下一步

點選完成

SSM架構搭建 --- 超詳細

建好的Maven項目目錄結構:

java和resources是自己建的,然後對應右擊:

SSM架構搭建 --- 超詳細
  • 然後開始引入依賴,打開pom.xml
    • Spring 依賴
<properties>
  		 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  		 <spring.version>4.3.18.RELEASE</spring.version>
 	</properties>	
 	
	 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-core</artifactId>
     <version>${spring.version}</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-aop</artifactId>
     <version>${spring.version}</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-web</artifactId>
     <version>${spring.version}</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>${spring.version}</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
     <version>${spring.version}</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-tx</artifactId>
     <version>${spring.version}</version>
   </dependency>
           
  • java ee依賴
<dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
    </dependency>
           
  • 測試所需的依賴
<dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>4.12</version>
	    </dependency>
	    <dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-test</artifactId>
	      <version>4.3.18.RELEASE</version>
	    </dependency>
           
  • 實作slf4j接口
<dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.2</version>
    </dependency>
           
  • 資料庫所需依賴(包括連接配接池)
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
    </dependency>
           
  • Mybatis與(Mybatis和Spring整合)所需的依賴
<dependency>
	      <groupId>org.mybatis</groupId>
	      <artifactId>mybatis</artifactId>
	      <version>3.4.1</version>
	    </dependency>
	    <dependency>
	      <groupId>org.mybatis</groupId>
	      <artifactId>mybatis-spring</artifactId>
	      <version>1.3.1</version>
	    </dependency>
           
  • Servlet web
<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
           
  • Spring AOP 日志管理
<dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.13</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.18.RELEASE</version>
    </dependency>
           

以上便是搭建SSM所需要的基本依賴

  • 編寫web.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
  <display-name>Archetype Created Web Application</display-name>

  <!-- 定義Spring監聽器,加載spring -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- 編碼過濾器 -->
  <filter>
    <filter-name>CharacterEncodingFilter</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>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- springMVC核心配置  --- 注意:servlet-name裡面填寫的如果是dispatcherServlet
  								 就要在同級目錄建立dispatcherServlet-servlet.xml作為Spring-mvc的配置檔案 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 攔截設定 -->
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
           
  • 編寫Spring-MVC配置檔案 --->dispatcherServlet-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

    <!--SpringMVC的配置檔案    ----  包含網站跳轉邏輯的控制,配置-->

    <!-- 掃描所有包 -->
    <context:component-scan base-package="cbuc.ssm" use-default-filters="false">
        <!--隻掃描控制器controller-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!-- 能支援SpringMVC更進階的一些功能, JSR303校驗,快捷的ajax請求...來映射動态請求 -->
    <mvc:annotation-driven/>
    <!-- 将springMVC不能處理的資源交給Tomcat -->
    <mvc:default-servlet-handler/>

    <!-- 對模型視圖添加前字尾 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp"/>

    <!-- 配置json轉換器 -->
    <bean id="jsonMessageConverters" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
    </bean>
</beans>
           
  • 編寫Spring配置檔案,在src/main/resource目錄下建立applicationContext.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" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--Spring的配置檔案,這裡主要配置和業務邏輯有關的-->
    <!--Spring配置檔案的核心點(資料源,與mybatis的整合,事務控制)-->
    
    <!--掃描包下的所有元件除了controller-->
    <context:component-scan base-package="cbuc.ssm">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!-- 配置資料庫相關參數properties的屬性:${url} -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- ===================================資料庫連接配接池=============================== -->
    <!-- ===================在src/main/resource目錄下建立jdbc.properties====================== -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
        <property name="minPoolSize" value="${c3p0.minPoolSize}"/>
        <property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
        <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
        <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
    </bean>
    <!--====================================================================================-->

    <!-- ==================================配置和mybatis的整合============================= -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 配置MyBaties全局配置檔案:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!-- 注入資料庫連接配接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 掃描sql配置檔案:mapper需要的xml檔案 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>
    <!--配置掃描器,将mybatis接口的實作加入到ioc容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 給出需要掃描Mapper接口包 -->
        <property name="basePackage" value="cbuc.ssm.mapper" />
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    <!--====================================================================================-->	

    <!-- =====================================事務控制的配置================================= -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 控制住資料源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <aop:config>
        <!--切入點表達式-->
        <aop:pointcut id="txPoint" expression="execution(* cbuc.ssm.service..*(..))"></aop:pointcut>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
    </aop:config>
    <!--配置事務增強,事務如何切入-->
    <tx:advice id="txAdvice">
        <tx:attributes>
            <!--所有方法都是事務方法-->
            <tx:method name="*"/>
            <!--以get開始的所有方法-->
            <tx:method name="get*" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    <!--====================================================================================-->
</beans>
           
  • 編寫jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
#資料庫位址
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
#使用者名
jdbc.username=root
#密碼
jdbc.password=xxxxxx
#最大連接配接數
c3p0.maxPoolSize=30
#最小連接配接數
c3p0.minPoolSize=10
#關閉連接配接後不自動commit
c3p0.autoCommitOnClose=false
#擷取連接配接逾時時間
c3p0.checkoutTimeout=10000
#當擷取連接配接失敗重試次數
c3p0.acquireRetryAttempts=2
           
  • 編寫mybatis-config.xml,在src/main/resource目錄下建立mybatis-config.xml
<?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="mapUnderscoreToCamelCase" value="true" />
    </settings>
        <!--配置别名-->
    <typeAliases>
        <package name="cbuc.ssm.bean"/>
    </typeAliases>
</configuration>
           
  • 編寫列印日志配置logback.xml,在src/main/resource目錄下建立logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
           

配置完後目錄如下:

接下來測試一下SpringMVC:

  • 編寫一個controller:
    SSM架構搭建 --- 超詳細
  • WEB-INF下建立jsp包,建立一個test.jsp頁面:
  • 啟動項目通路http://localhost:8080/hello , 通路成功:
    SSM架構搭建 --- 超詳細

接下來測試一下與Mybatis的整合:

  • 這邊建立一個名為test的資料庫,裡面有張student表
  • 編寫一個bean:
    SSM架構搭建 --- 超詳細
  • 編寫一個controller:
  • 編寫一個service:(注意标上service注解)
  • 編寫一個mapper:(注意标上mapper注解)
    SSM架構搭建 --- 超詳細
    這裡我們用注解的方式寫SQL語句,如果采用xml的形式如下:
    在src/main/下建立mapper包在裡面建立一個student.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="cbuc.ssm.mapper"><!-- 注意命名空間和我們的mapper路徑相對應 -->
        <select id="selectAll" resultType="Student" parameterType="long">
            SELECT * FROM student WHERE id = #{id}
        </select>
    </mapper>
               
  • 啟動項目通路http://localhost:8080/test/1 , 通路成功:
SSM架構搭建 --- 超詳細