SSM(springmvc/spring/mybatis)框架整合

首先學習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>

之後進行代碼編寫添加註釋進行測試

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章