SSM → Spring + SpringMVC + MyBatis前端
DAO層:DAO層主要是作數據持久層的工做,負責與數據庫進行聯絡的一些任務都封裝在此。DAO層的設計首先是設計DAO的接口,而後在Spring的配置文件中定義此接口的實現類,而後就可在模塊中調用此接口來進行數據業務的處理,而不用關心此接口的具體實現類是哪一個類,顯得結構很是清晰,DAO層的數據源配置,以及有關數據庫鏈接的參數都在Spring的配置文件中進行配置。java
Service層:Service層主要負責業務模塊的邏輯應用設計。 首先設計接口,再設計其實現的類接着再在Spring的配置文件中配置其實現的關聯。這樣咱們就能夠在應用中調用Service接口來進行業務處理。 Service層的業務實現,具體要調用到已定義的DAO層的接口,封裝Service層的業務邏輯有利於通用的業務邏輯的獨立性和重複利用性,程序顯得很是簡潔。web
Controller層:Controller層負責具體的業務模塊流程的控制, 在此層裏面要調用Service層的接口來控制業務流程,控制的配置也一樣是在Spring的配置文件裏面進行,針對具體的業務流程,會有不一樣的控制器,咱們具體的設計過程當中能夠將流程進行抽象概括,設計出能夠重複利用的子單元流程模塊,這樣不只使程序結構變得清晰,也大大減小了代碼量。spring
DAO層,Service層這兩個層次均可以單獨開發,互相的耦合度很低,徹底能夠獨立進行,這樣的一種模式在開發大項目的過程當中尤爲有優點。Controller,View層由於耦合度比較高,於是要結合在一塊兒開發,可是也能夠看做一個總體獨立於前兩個層進行開發。這樣,在層與層以前咱們只須要知道接口的定義,調用接口便可完成所須要的邏輯單元應用,一切顯得很是清晰簡單。sql
Service邏輯層設計:Service層是創建在DAO層之上的,創建了DAO層後才能夠創建Service層,而Service層又是在Controller層之下的,於是Service層應該既調用DAO層的接口,又要提供接口給Controller層的類來進行調用,它恰好處於一箇中間層的位置。每一個模型都有一個Service接口,每一個接口分別封裝各自的業務處理方法。數據庫
配置別名:用於批量掃描Pojo包spring-mvc
不須要配置mappers標籤,但必定要保證mapper.java
文件與mapper.xml
文件同名mybatis
主要配置內容 :數據源,SqlSessionFactory,mapper掃描器 架構
這裏使用sqlSessionFactoryBeanName屬性是由於若是配置的是sqlSessionFactory屬性,將不會先加載數據庫配置文件及數據源配置mvc
通常不動原始生成的po類,而是將原始類進行集成vo類
目標:讓spring管理service接口。
通常在ssm.service包下定義接口 eg:ItemsService
由於在applicationContext-dao.xml中已經使用了mapper掃描器,這裏能夠直接經過註解的方式將itemsMapperCustom自動注入。
applicationContext-service.xml在此文件中配置service。
建立springmvc.xml文件,配置處理器映射器 、 適配器、視圖解析器
在web.xml中加入以下內容 contextConfigLocation配置springmvc加載的配置文件(配置處理器映射器、適配器等等) 若是不配置contextConfigLocation,默認加載的是/WEB-INF/servlet名稱-serlvet.xml(springmvc-servlet.xml) 在url-pattern中 填入.action,表示訪問以.action結尾 由DispatcherServlet進行解析 填入/,全部訪問的地址都由DispatcherServlet進行解析,對於靜態文件的解析須要配置不讓DispatcherServlet進行解析,使用此種方式能夠實現RESTful風格的url
在web.xml
中,添加spring容器監聽器,加載spring容器
一、數據庫鏈接,使用時建立,不使用就關閉,對數據庫進行頻繁鏈接開啓和關閉,形成數據庫資源的浪費
解決:使用數據庫鏈接池管理數據庫鏈接
二、將sql 語句硬編碼到Java代碼中,若是sql語句修改,須要對java代碼從新編譯,不利於系統維護
解決:將sql語句設置在xml配置文件中,即便sql變化,也無需從新編譯
三、向preparedStatement中設置參數,對佔位符位置和設置參數值,硬編碼到Java文件中,不利於系統維護
解決:將sql語句及佔位符,參數所有配置在xml文件中
四、從resutSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,不利於系統維護。解決:將查詢的結果集,自動映射成java對象
<select id="queryById" parameterType="long" resultType="Paper" >
SELECT paper_id,name,number,detail FROM paper WHERE paper_id=#{paperId}
</select>
如圖,parameterType表示接收變量的類型,resultType表示返回的結果的數據類型,這個select表示接收long型數據,返回paper型結果
#{}
告訴 MyBatis 建立一個預處理語句(PreparedStatement)參數,在 JDBC 中,這樣的一個參數在 SQL 中會由一個「?」來標識,並被傳遞到一個新的預處理語句中,就像這樣:
// JDBC 代碼,非 MyBatis 代碼...
String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);
Maven 的翻譯爲 「專家」、「行家」 ,是一個跨平臺的項目管理工具。主要用於:基於 Java 平臺的項目(Maven 自己也是 Java 編寫的)的構建、依賴包管理和項目信息管理。
Maven能提供一種項目的依賴配置,配置好的項目,Maven 能自動的從 Maven 的中央倉庫中幫咱們下載並管理項目依賴的 jar 包,而且還能自動的管理這些 jar 包依賴的其餘 jar 包。 maven 風格的項目,首先把全部的 jar 包都放在"倉庫「 裏,而後哪一個項目須要用到這個 jar 包,只須要給出 jar 包的名稱和版本號就好了。 這樣 jar 包就實現了共享。
在pom.xml
文件中聲明依賴的 jar 包,在web.xml
中聲明編碼過濾器並配置 DispatcherServlet。在spring-mybatis.xml
中完成 spring 和 mybatis 的配置。在spring-mvc.xml
中完成 Spring MVC 的相關配置。在jdbc.properties
中配置 c3p0 數據庫鏈接池。在logback.xml
中完成日誌輸出的相關配置。
三層架構由用戶界面層/表示層(User Interface),業務邏輯層(Business Logic Layer)和數據訪問層(Data Acess Layer)構成。
其中每一層的做用爲:
用戶界面層:負責與用戶進行交互。
業務邏輯層:主要是針對具體的問題的操做,也能夠理解成對數據層的操做,對數據業務邏輯處理。
數據訪問層
SSM主要由Spring,SpringMVC 和 Mybatis三個構成。它們在三層架構中所處的位置是不一樣的,即它們在三層架構中的功能各不相同,各司其職。
SpringMVC:做爲View層的實現者,完成用戶的請求接收功能。SpringMVC的Controller做爲整個應用的控制器,完成用戶請求的轉發及對用戶的響應
MyBatis:做爲 Dao層的實現者,完成對數據庫的增、刪、改、查功能
Spring:以整個應用大管家的身份出現。整個應用中全部的Bean的生命週期行爲,均由Spring來管理。即整個應用中全部對象的建立、初始化、銷燬,及對象間關聯關係的維護,均由Spring進行管理