首先學習ssm框架整合之前需要對框架相關知識進行了解,先階段兩大開發框架ssm與ssh分別是什麼,ssh不瞭解的可以去另一篇博客去進行學習https://blog.csdn.net/qq_40852784/article/details/79696008
ssm簡單的介紹,用大白話來講ssm指的是使用springmvc作爲web層進行路徑解析處理/spring進行其他操作(ioc/di/aop....)/mybatis數據操作
SpringMVC:它用於web層,相當於controller(等價於傳統的servlet和struts的action),用來處理用戶請求。舉個例子,用戶在地址欄輸入http://網站域名/login,那麼springmvc就會攔截到這個請求,並且調用controller層中相應的方法,(中間可能包含驗證用戶名和密碼的業務邏輯,以及查詢數據庫操作,但這些都不是springmvc的職責),最終把結果返回給用戶,並且返回相應的頁面(當然也可以只返回json/xml等格式數據)。springmvc就是做前面和後面過程的活,與用戶打交道!!
Spring:太強大了,以至於我無法用一個詞或一句話來概括它。但與我們平時開發接觸最多的估計就是IOC容器,它可以裝載bean(也就是我們java中的類,當然也包括service dao裏面的),有了這個機制,我們就不用在每次使用這個類的時候爲它初始化,很少看到關鍵字new。另外spring的aop,事務管理等等都是我們經常用到的。
MyBatis:如果你問我它跟鼎鼎大名的Hibernate有什麼區別?我只想說,他更符合我的需求。第一,它能自由控制sql,這會讓有數據庫經驗的人(當然不是說我啦捂臉)編寫的代碼能搞提升數據庫訪問的效率。第二,它可以使用xml的方式來組織管理我們的sql,因爲一般程序出錯很多情況下是sql出錯,別人接手代碼後能快速找到出錯地方,甚至可以優化原來寫的sql。
在瞭解這些之後下面我們開始ssm框架的搭建整合工作
首先打開開發工具創建maven項目(不要問爲什麼不使用動態web工程.jar包不想自己找)
工程目錄簡介
目錄 | 描述 |
src | 根目錄,沒什麼好說的,下面有main和test。 |
- main | 主要目錄,可以放java代碼和一些資源文件。 |
- - java | 存放我們的java代碼,這個文件夾要使用Build Path -> Use as Source Folder,這樣看包結構會方便很多,新建的包就相當於在這裏新建文件夾咯。 |
- - resources | 存放資源文件,譬如各種的spring,mybatis,log配置文件。 |
- - - mapper | 存放dao中每個方法對應的sql,在這裏配置,無需寫daoImpl。 |
- - - spring | 這裏當然是存放spring相關的配置文件也可以直接放在resources中 |
- - - webapp | 這個貌似是最熟悉的目錄了,用來存放我們前端的靜態資源,如jsp js css。 |
- - - - WEB-INF | 很重要的一個目錄,外部瀏覽器無法訪問,只有羨慕內部才能訪問,可以把jsp放在這裏,另外就是web.xml了。你可能有疑問了,爲什麼上面java中的resources裏面的配置文件不妨在這裏,那麼是不是會被外部竊取到?你想太多了,部署時候基本上只有webapp裏的會直接輸出到根目錄,其他都會放入WEB-INF裏面,項目內部依然可以使用classpath:XXX來訪問,好像IDE裏可以設置部署輸出目錄 |
- - - - -page | 存放jsp頁面 |
之後創建我們書寫代碼需要用到的包
包名 | 名稱 | 作用 |
controller | 控制層(控制器) | springmvc就是在這裏發揮作用的,一般人叫做controller控制器,相當於struts中的action。 |
dao/mapper | 數據訪問層(接口) | 與數據打交道,可以是數據庫操作,也可以是文件讀寫操作,甚至是redis緩存操作,總之與數據操作有關的都放在這裏,也有人叫做dal或者數據持久層都差不多意思。爲什麼沒有daoImpl,因爲我們用的是mybatis,所以可以直接在配置文件中實現接口的每個方法。 |
pojo/javaBean/entity | 實體類 | 一般與數據庫的表相對應,封裝dao層取出來的數據爲一個對象,也就是我們常說的pojo,一般只在dao層與service層之間傳輸。 |
serivce | 業務邏輯層(接口) | 寫我們的業務邏輯,也有人叫bll,在設計業務接口時候應該站在“使用者”的角度。 |
impl | 業務邏輯層(實現) | 實現我們業務接口,一般業務的實現是寫在這裏,沒什麼好說的。 |
還有最後一步基礎工作,導入我們相應的jar包,我使用的是maven來管理我們的jar,所以只需要在pom.xml
中加入相應的依賴就好了,如果不使用maven的可以自己去官網下載相應的jar,放到項目WEB-INF/lib目錄下。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
下面進行配置文件的配置,mybatis相關使用交由spring,所以mybatis只進行簡單配置mybatis相關屬性即可
mybatis.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="cacheEnabled" value="false" />
<!-- 查詢時,關閉關聯對象即時加載以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 設置關聯對象加載的形態,此處爲按需加載字段(加載字段由SQL指 定), 不會加載關聯表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 對於未知的SQL查詢,允許返回不同的結果集以達到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允許使用列標籤代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允許使用自定義的主鍵值(比如由程序生成的UUID 32位編碼作爲鍵值), 數據表的PK生成策略將被覆蓋 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 給予被嵌套的resultMap以字段-屬性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 對於批量更新操作緩存SQL以提高性能 -->
<setting name="defaultExecutorType" value="BATCH" />
<!-- 數據庫超過25000秒仍未響應則超時 -->
<setting name="defaultStatementTimeout" value="25000" />
</settings>
</configuration>
spring作爲一個強大框架提供了很多功能
applicationServlet.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:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx" 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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="driver" />
<property name="url" value="url" />
<property name="username" value="username" />
<property name="password" value="password" />
<!-- 從數據源中返回的連接是否採用自動提交機制 -->
<property name="defaultAutoCommit" value="true" />
<!-- 是否僅能執行只讀操作 -->
<property name="defaultReadOnly" value="false" />
<!-- 初始化數據庫連接數 -->
<property name="initialSize" value="0" />
<!-- 最大連接數據庫連接數,設置爲0時,表示沒有限制 -->
<property name="maxActive" value="10" />
<!-- 最大等待連接中的數量,設置爲0時,表示沒有限制 -->
<property name="maxIdle" value="1" />
<!-- 最大等待秒數,單位爲毫秒 -->
<property name="maxWait" value="6000" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="numTestsPerEvictionRun" value="1" />
<property name="validationQuery" value="select 1" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis.xml" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!-- mybatis.spring自動映射,DAO接口所在包名,Spring會自動查找其下的類 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory“/> -->
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="basePackage" value="com.mapper" />
</bean>
<!-- 事務管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 開啓事務控制的註解支持 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 默認掃描的包路徑 -->
<context:component-scan base-package="com" />
<!-- 視圖解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 配置文件上傳相應插件 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="4096" />
<property name="defaultEncoding" value="UTF-8"/>
</bean>
</beans>
最後修改web.xml在其中添加配置
<!-- 指定spring配置文件,多個文件逗號間隔 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationServlet.xml
</param-value>
</context-param>
<!-- 添加spring監聽 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 添加springmvc監聽 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationServlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 指定controller都以.do結尾 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 添加編碼過濾器,常用組件,非必須 -->
<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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
之後進行代碼編寫添加註釋進行測試