IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
前言:
網上很多整合SSM博客文章并不能讓初探ssm的同學思路完全的清晰,可以試著關掉整合教程,搖兩下頭骨,哈一大口氣,就在萬事具備的時候,開整,這個時候你可能思路全無 ~中招了咩~ ,還有一些同學依舊在使用eclipse或者Myeclipse開發,我想對這些朋友說IDEA 的編譯速度很快,人生苦短,來不及解釋了,直接上手idea吧。
這篇文章每一步搭建過程都測試過了,應該不會有什么差錯。本文章還有個比較優秀的特點,就是idea的使用,基本上關于idea的操作都算是比較詳細的,所以不用太擔心不會擼idea!最后,本文章旨在清晰地整合各個框架之間的流程與思路。
相信有很多小伙伴都是學了SSM框架,而且學的時候應該是用eclipse或者Myeclipse開發的,隨著idea崛起,實力碾壓eclipse,IDEA 的編譯速度很快,通常比ec快2倍!外加喪心病狂的代碼提示引起程序員的尖叫!
當然,我不是說eclipse不好,只是idea更加便捷,更加便于開發,這是事實。我相信很多小伙伴都是從eclipse轉向idea(包括我,普遍一開始上手不習慣idea,時刻保持一顆畏懼敬畏的心,生怕敲不出一行靚麗的Hello Word(你們都是大神,記得當時的我一直syso,敲不出一行輸出語句QAQ)。
作為過來人,我告訴大家,這些都是沒必要的擔心,你只要記住,具(工具idea)在我手中,碼(代碼)就在我手中,管他三七四十九呢,拿起idea就是一頓擼碼,我就是醬紫的,所以呢才有了這篇idea版的SSM框架整合,不然你以為怎么來的?
1. 搭建整合環境
1. 整合說明
整合說明:SSM整合可以使用多種方式,咱們選擇XML + 注解的方式,不要覺得不妥,這樣其實最便捷-
2. 整合的思路:
1、先搭建整合的環境?
?
2、先把Spring的配置搭建完成?
?
3、再使用Spring整合SpringMVC框架
?
4、之后使用Spring整合MyBatis框架
?
5、最后spring整合mybatis框架配置事務(Spring的聲明式事務管理)
3. 創建數據庫和表結構語句:
復制在MySQL中運行即可:
create database ssm;?
use ssm;?
create table account (
id int primary key auto_increment,?
name varchar(50),?
money double
);
4. 創建maven的工程
具體的使用idea創建maven,請看這篇使用IntelliJ IDEA創建第一個Mawen項目
創建Twossm_parent父工程(打包方式選擇pom,必須的)
創建Twossm_web子模塊(打包方式是war包)
創建Twossm_service子模塊(打包方式是jar包)
創建Twossm_dao子模塊(打包方式是jar包)
創建Twossm_domain子模塊(打包方式是jar包)
web依賴于service,service依賴于dao,dao依賴于domain
在Twossm_parent的pom.xml文件中引入坐標依賴
找到對應的< properties >標簽,以及< dependencies >標簽,復制粘貼即可
版本控制是在< properties >標簽中控制,從坐標依賴中可以看出版本號:spring5X、MySQL3.1.6、mybatis3.4.5
部署Twossm_web的項目,只要把Twossm_web項目加入到tomcat服務器中即可
5. 編寫實體類,在Twossm_domain項目中編寫
在這里,我提醒一下,可能各位不熟悉idea快捷鍵,就比如說getset方法搞不出來哈哈,就這篇整合SSM的文章所用到的idea快捷鍵可以參考下面藍色字體文章(點擊藍色字體即可),熟悉idea的哥們可以當我沒說,當我在放pi(快快快捂住鼻子….)
IDEA快速實現接口、查找接口的實現、getSet方法快速生成等等常用快捷鍵
6. 編寫dao接口
在dao包中編寫dao接口IAccountdao
package?com.gx.dao;import?com.gx.domain.Account; import?org.apache.ibatis.annotations.Insert; import?org.apache.ibatis.annotations.Select; import?org.springframework.stereotype.Repository;import?java.util.List;public?interface?IAccountdao?{public?List<Account>?findAll();public?void?saveAccount(Account?account); }7. 編寫service接口和實現類
service接口:
package?com.gx.service;import?com.gx.domain.Account;import?java.util.List;public?interface?AccountService?{//?查詢所有賬戶public?List<Account>?findAll();//?保存帳戶信息public?void?saveAccount(Account?account); }service接口實現類:
package?com.gx.service.Impl;import?com.gx.domain.Account; import?com.gx.service.AccountService; import?org.springframework.stereotype.Service;import?java.util.List; @Service("accountService") public?class?AccountServiceImpl?implements?AccountService?{@Overridepublic?List<Account>?findAll()?{System.out.println("Service業務層:查詢所有賬戶...");return?null;}@Overridepublic?void?saveAccount(Account?account)?{System.out.println("Service業務層:保存帳戶...");} }到這里,整合環境就搭建好了效果如下,接下來搭建Spring的配置!
2、Spring框架代碼的編寫
搭建和測試Spring的開發環境
1、創建resources的資源文件目錄管理XML配置文件
創建一個叫resources的資源文件目錄,用來管理放置XML配置文件
2、編寫applicationContext.xml的配置文件
在resources資源文件中創建applicationContext.xml的配置文件,編寫具體的配置信息
applicationContext.xml中的配置信息
3. 在項目中編寫測試方法,進行測試
1、創建Test包
2、在test包中創建一個叫TestSpring的class類,具體的內容如下:
運行如下效果,說明搭建Spring的開發環境成功!
到這里,Spring的開發環境成功!接下來搭建SpringMVC框架環境。
3、SpringMVC框架代碼的編寫
搭建和測試SpringMVC的開發環境
1. 在web.xml中配置DispatcherServlet前端控制器
???<!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加載springmvc.xml配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--啟動服務器,創建該servlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>2. 在web.xml中配置DispatcherServlet過濾器解決中文亂碼
<!--解決中文亂碼的過濾器--><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></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>3. web.xml中配置的整體效果
<!DOCTYPE?web-app?PUBLIC"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd"?><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"version="3.0"><display-name>Archetype?Created?Web?Application</display-name><!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加載springmvc.xml配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--啟動服務器,創建該servlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--解決中文亂碼的過濾器--><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></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping> </web-app>4. 創建springmvc.xml的配置文件,編寫配置文件
同樣是在resources資源文件夾中創建springmvc.xml配置文件
springmvc.xml的配置文件內容:
5.創建jsp頁面,并編寫controller代碼
編寫index.jsp頁面
<%@?page?contentType="text/html;charset=UTF-8"?language="java"?%> <html> <body> <a?href="account/findAll">測試SpringMVC查詢</a> </body> </html>在controller層中的AccountController的class類中編寫代碼
package?com.gx.controller;import?com.gx.domain.Account; import?com.gx.service.AccountService; import?org.springframework.beans.factory.annotation.Autowired; import?org.springframework.stereotype.Controller; import?org.springframework.ui.Model; import?org.springframework.web.bind.annotation.RequestMapping;import?java.util.List;@Controller public?class?AccountController?{@RequestMapping("/account/findAll")public?String?findAll(){System.out.println("Controller表現層:查詢所有賬戶...");return?"list";??//在視圖解析器中配置了前綴后綴} }這時候就要創建controller跳轉的list.jsp頁面了:
list.jsp頁面創建好了,編寫一下內容,只是看是否跳轉成功,輸出一句話即可:
6.部署Tomcat進行測試
7.測試運行
到這里,spring、springmvc的開發環境就都搭建好了,不容易啊,都堅持看到這里了,給你點個贊,接下來是整合spring和springmvc了!
4. Spring整合SpringMVC的框架
整合之前,想一想,怎樣去整合Spring、SpringMVC框架呢,怎么才算是整合成功了呢,帶著問題,一起來吧!
1、Spring整合SpringMVC的框架原理分析
整合成功的表現:在controller(SpringMVC)中能成功的調用service(Spring)對象中的方法。
要想在controller中調用service方法,就要注入service到controller中來,有service對象才可以調用service方法,方法是這樣沒有錯,但是有一個問題,就是啟動Tomcat之后試想一下,在web.xml中配置有前端控制器,web容器會幫我們加載springmvc.xml配置文件,在springmvc.xml配置文件中我們配置情況是只掃描controller,別的不掃,而spring.xml文件就從頭到尾沒有執行過,spring中的配置掃描自然也不會去掃描,就相當于沒有將spring交到IOC容器當中去
所以,現在的解決方案就是,在啟動服務器時就加載spring配置文件,怎么實現呢?這時候監聽器listener就派上用場了,具體實現如下:
2、在web.xml中配置ContextLoaderListener監聽器
在項目啟動的時候,就去加載applicationContext.xml的配置文件,在web.xml中配置ContextLoaderListener監聽器(該監聽器只能加載WEB-INF目錄下的applicationContext.xml的配置文件)。要想加載applicationContext.xml的配置文件有兩種方法,第一種(不建議):
第二種(強烈建議):在web.xml中配置加載路徑
至于為啥強烈建議第二種呢,是因為我們在整合過程中會有許多配置文件,我們自定義一個類似pages資源文件夾專門管理這些配置文件,方便管理,方便維護!!!
3. controller中注入service對象,調用service對象方法并測試
這時候,啟動服務器時也會加載spring配置文件了,那么,我們可以在controller中注入service了,于是開始編寫controller代碼:
package?com.gx.controller;import?com.gx.domain.Account; import?com.gx.service.AccountService; import?org.springframework.beans.factory.annotation.Autowired; import?org.springframework.stereotype.Controller; import?org.springframework.ui.Model; import?org.springframework.web.bind.annotation.RequestMapping;import?java.util.List;@Controller public?class?AccountController?{@Autowired???//按類型注入private?AccountService?accountService;@RequestMapping("/account/findAll")public?String?findAll(Model?model){System.out.println("Controller表現層:查詢所有賬戶...");List<Account>?list?=?accountService.findAll();return?"list";} }編寫完成,開始測試,啟動Tomcat,效果
到這里,
總算是整合完了spring、springmvc,同學你還能看到這里,我也挺欣慰的哈哈,手動再給你點個贊,接下來編寫MyBatis環境惹!
5、MyBatis框架代碼的編寫
一看到Mybatis,就要想到dao,沒錯,MyBatis環境搭建首先是dao,搭建mybatis,之前要編寫mapper映射的配置文件,其實挺麻煩的,所以我選擇使用注解!
1、在IAccountdao接口方法上添加注解,編寫SQL語句
package?com.gx.dao;import?com.gx.domain.Account; import?org.apache.ibatis.annotations.Insert; import?org.apache.ibatis.annotations.Select; import?org.springframework.stereotype.Repository;import?java.util.List;@Repository??//此注解代表這是一個持久層,用法類似@controller、@service public?interface?IAccountdao?{@Select("select?*?from?account")public?List<Account>?findAll();@Insert("insert?into?account?(name,money)?value(#{name},#{money})")public?void?saveAccount(Account?account); }2.創建SqlMapConfig.xml的配置文件并編寫
和之前創建配置文件一樣,創建:
編寫:
因為我使用的是注解,我覺得還是有必要提一下以下三種方法:
3. 創建并編寫Mybatis測試方法
創建:
編寫:
運行測試:
運行效果:
到這里,mybatis環境搭建算是完成了,
,哈哈接下來搭建最后整合spring、mybatis!(估計看到這里,你也餓了吧)
6. Spring整合MyBatis框架
Spring整合MyBatis框架之前,先想一想,怎樣才算整合成功呢?其實,這和之前的spring整合springMVC的套路差不多,其實就是,Service能成功調用dao對象,能夠做查詢操作或者新增數據能存進數據庫。
現在spring已經是在IOC容器中了,dao是一個接口,可以通過程序幫這個接口生成代理對象,我們要是可以把這個代理對象也放進IOC容器,那么service就可以拿到這個對象,之后在service中做一個注入,service從而調用dao代理對象的方法,那么我們怎么去實現dao接口生成的代理對象放入IOC容器呢?其實很簡單,只需要如下操作!
整合目的:把SqlMapConfig.xml配置文件中的內容配置到applicationContext.xml配置文件中
1、在applicationContext.xml中配置數據庫連接池
至于為啥要配池子,我不說大家應該也知道,畢竟各位都是學過ssm的大神了
<!--Spring整合MyBatis框架--><!--配置連接池--><bean?id="dataSource"?class="com.mchange.v2.c3p0.ComboPooledDataSource"><property?name="driverClass"?value="com.mysql.jdbc.Driver"/><property?name="jdbcUrl"?value="jdbc:mysql:///ssm"/><property?name="user"?value="root"/><property?name="password"?value="root"/></bean>2、在applicationContext.xml中配置SqlSessionFactory工廠
沒配置工廠之前,我們用Test測試的時候,每次都要先創建工廠,因為工廠能夠給我們創建SqlSession,有了SqlSession就可以通過SqlSession拿到代理對象。
現在我們直接在applicationContext.xml中配置SqlSessionFactory工廠,這就相當于IOC容器中有了工廠,就可以去創建SqlSession,進而通過SqlSession拿到代理對象,沒必要每次測試都去創建工廠。
?<!--配置SqlSessionFactory工廠--> <bean?id="sqlSessonFactory"?class="org.mybatis.spring.SqlSessionFactoryBean"><property?name="dataSource"?ref="dataSource"/></bean>3、在applicationContext.xml中配置IAccountdao接口所在包
因為工廠有了,SqlSession也有了,那代理誰呢,所以我們要配置IAccountdao接口所在包,告訴SqlSession去代理接口所在包中的代理,從而存到IOC容器中
?<!--配置IAccountdao接口所在包--> <bean?id="mapperScanner"?class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property?name="basePackage"?value="com.gx.dao"/> </bean>4、小結上面的三個配置
其實,上面的操作就是把mybatis中的配置(SqlMapConfig.xml)轉移到spring中去,讓它產生代理并存到IOC容器中!
5、完善Service層代碼
在AccountServiceImpl實現類中編寫代碼:
package?com.gx.service.Impl;import?com.gx.dao.IAccountdao; import?com.gx.domain.Account; import?com.gx.service.AccountService; import?org.springframework.beans.factory.annotation.Autowired; import?org.springframework.stereotype.Service;import?java.util.List; @Service("accountService") public?class?AccountServiceImpl?implements?AccountService?{@Autowiredprivate?IAccountdao?iaccountdao;@Overridepublic?List<Account>?findAll()?{System.out.println("Service業務層:查詢所有賬戶...");return?iaccountdao.findAll();}@Overridepublic?void?saveAccount(Account?account)?{System.out.println("Service業務層:保存帳戶...");} }6、完善Controller層代碼
package?com.gx.controller;import?com.gx.domain.Account; import?com.gx.service.AccountService; import?org.springframework.beans.factory.annotation.Autowired; import?org.springframework.stereotype.Controller; import?org.springframework.ui.Model; import?org.springframework.web.bind.annotation.RequestMapping;import?java.util.List;@Controller public?class?AccountController?{@Autowiredprivate?AccountService?accountService;@RequestMapping("/account/findAll")public?String?findAll(Model?model){??//存數據,?Model對象System.out.println("Controller表現層:查詢所有賬戶...");//?調用service的方法List<Account>?list?=?accountService.findAll();model.addAttribute("list",list);return?"list";} }7、完善list.jsp頁面
因為要使用到jstl顯示數據庫數據,所以list.jsp頁面如下:
<%--Created?by?IntelliJ?IDEA.User:?BuleDate:?2019/9/2Time:?7:32To?change?this?template?use?File?|?Settings?|?File?Templates. --%> <%@?page?contentType="text/html;charset=UTF-8"?language="java"?isELIgnored="false"?%> <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%><html> <head><title>Title</title> </head> <body><h2>查詢所有的賬戶</h2><c:forEach?items="${list}"?var="account">${account.name}</c:forEach> </body> </html>8、運行測試
到這里,SSM整合就基本完成,各位可以去打王者樓嘍,咳咳等等…還沒完成,我只是說基本完成。
接下來,spring整合mybatis框架還需要配置事務(Spring的聲明式事務管理),至于為啥,一張圖告訴你!(哎呀…ai..ai..別打…別打…別打臉…)
7.spring整合mybatis框架配置事務(Spring的聲明式事務管理)
細心的小伙伴可能發現了,我在整合spring、mybatis測試的時候(TestMybatis中),新增數據保存的時候手動的提交過事務?session.commit(),如果不寫這一句,就會出現數據沒提交的情況,因此為了完美的整合ssm,我們必須配置Spring的聲明式事務管理!
1、在applicationContext.xml中配置Spring框架聲明式事務管理
如果對一些execution表達式什么的不太清除的或者AOP不是特別印象深刻,可以去看看我的這篇文章【Spring框架學習總結二】Spring的AOP通俗理解以及AOP的入門開發
?<!--配置Spring框架聲明式事務管理--><!--配置事務管理器--><bean?id="transactionManager"?class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property?name="dataSource"?ref="dataSource"?/></bean><!--配置事務通知--><tx:advice?id="txAdvice"?transaction-manager="transactionManager"><tx:attributes><tx:method?name="find*"?read-only="true"/><tx:method?name="*"?isolation="DEFAULT"/></tx:attributes></tx:advice><!--配置AOP增強--><aop:config><aop:advisor?advice-ref="txAdvice"?pointcut="execution(*?com.gx.service.Impl.*ServiceImpl.*(..))"/></aop:config>2、完善index.jsp頁面
<%@?page?contentType="text/html;charset=UTF-8"?language="java"?%> <html> <head><title>Title</title> </head> <body><a?href="account/findAll">測試查詢</a><h3>測試包</h3><form?action="account/save"?method="post">姓名:<input type="text"?name="name"?/><br/>金額:<input type="text"?name="money"?/><br/><input?type="submit"?value="保存"/><br/> </form></body> </html>3、完善Service層、Controller層代碼
Service層:在AccountServiceImpl實現類中調用service中的saveAccount(account)方法
?@Overridepublic?void?saveAccount(Account?account)?{System.out.println("Service業務層:保存帳戶...");iaccountdao.saveAccount(account);??//調用service中的saveAccount(account)方法}Controller層代碼:在AccountController類中添加一個保存save的方法
????@RequestMapping("/account/save")public?void?save(Account?account,?HttpServletRequest?request,?HttpServletResponse?response)?throws?IOException?{accountService.saveAccount(account);response.sendRedirect(request.getContextPath()+"/account/findAll");return;}4、測試運行
OK ,到這里,能夠堅持到這里的各位都是人才,說話有好聽,敲的代碼又好看,我超喜歡你們,所以,我要是哪里寫錯了,歡迎指出,還望不吝賜教!!!
8、源碼、源碼、源碼~重要的標題發三遍
同時附上源碼給各位,畢竟堅持看到最后,也是真的不容易(
)源碼上傳至:CSDN主頁資源上
考慮到C幣問題,已分享至百度網盤,啥?沒有網盤賬戶?出門右轉,秋名山決斗…
鏈接:https://pan.baidu.com/s/1lYtogVNBvK2taR1luDCdoA
提取碼:htov
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
總結
以上是生活随笔為你收集整理的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ练习题 下三角矩形 (模拟)
- 下一篇: NYOJ练习题 how many h