文章目錄
- 一、前言
- 二、Spring項目
- 2.1 Spring步驟
- 2.2 Spring具體實現
- 2.3 小結
- 2.4 spring整合mybatis
- 2.4.1 導入五個依賴、構建好三層
- 2.4.2 完成dao層,User.java Mapper.java Mapper.xml
- 2.4.3 service層,IUserService.java UserServiceImpl.java
- 2.4.4 完成controller層,UserController.java
- 2.4.5 spring配置文件、springmvc配置文件、數據庫表設計
- 2.4.6 運行成功
- 2.5 SSM小結
- 三、Springboot項目
- 3.1 Springboot項目引入
- 3.2 Springboot具體實現
- 3.3 Springboot約定優於配置-Springboot的四大約定
- 3.3.1 只要依賴spring-boot-starter-web的jar包,就會自動內置一個tomcat容器(可以替換)
- 3.3.2 項目結構的約定
- 3.3.3 默認提供配置文件application.properties
- 3.3.4 spring-boot-starter-web的jar包提供自動依賴/啓動依賴,如果是一個webstarter,默認認爲你是構建一個spring mvc的應用
- 3.4 Springboot整合mybatis
- 3.4.1 導入兩個依賴、構建好三層、配置好數據庫四個
- 3.4.2 完成dao層,dao.entity.User.java dao.mapper.UserMapper.java resources.UserMapper.xml
- 3.4.3 完成services層,services.IUserService.java services.impl.UserServiceImpl.java
- 3.4.4 完成controller層,controller.HelloController.java
- 3.4.5 數據庫表設計和啓動類
- 3.4.6 運行成功
- 3.5 springboot小結
- 附:springboot沒有視圖解析器,如果完成頁面跳轉?
- 四、小結
一、前言
從spring到springboot的三個原因
Spring本身配置的重量化
Spring web項目的配置太多
微服務的萌芽階段,需要一個輕量級框架
idea快捷鍵 search everything double shift
二、Spring項目
2.1 Spring步驟
1、創建一個maven項目結構
2、pom.xml添加兩個依賴:spring-context的依賴、spring-webmvc的依賴
3、web.xml DispatcherServlet
4、啓動一個springmvc的配置,Dispatcher-servlet.xml
5、創建一個controller,發佈一個http請求
6、發佈到jsp/servlet容器
Spring需要 1 2 3 4 5 6,但是Springboot僅需要 5 黑體標粗。
2.2 Spring具體實現
1、基於maven搭建webapp項目
2、然後,pom.xml添加Spring需要的依賴
3、web.xml中添加servlet
注意:classpath就是resources目錄
4、webapp同級目錄下,新建resources/dispatcher.xml
servlet-dispatcher.xml 中註解掃描、視圖解析
5、新建源碼目錄 source root
servlet-dispatcher.xml 配置開啓註解掃描
6、部署到tomcat
7、運行成功,localhost:8080/test,controller中的return值返回至前端
2.3 小結
①pom.xml導入兩個依賴spring-context spring-webmvc;
②web.xml 配置 servlet-dispatcher.xml 或 springmvc-servlet.xml (名稱自定義),新建resources/servlet-dispatcher.xml 或 springmvc-servlet.xml;
③工程文件java 設置controller。
2.4 spring整合mybatis
2.4.1 導入五個依賴、構建好三層
2.4.2 完成dao層,User.java Mapper.java Mapper.xml
2.4.3 service層,IUserService.java UserServiceImpl.java
2.4.4 完成controller層,UserController.java
2.4.5 spring配置文件、springmvc配置文件、數據庫表設計
數據庫表設計
2.4.6 運行成功
2.5 SSM小結
附1:IOC和DI
IOC 反轉控制 是Spring的基礎,Inversion Of Control 簡單說就是創建對象由以前的程序員自己new 構造方法來調用,變成了交由Spring創建對象。
DI 依賴注入 Dependency Inject. 簡單地說就是拿到的對象的屬性,已經被注入好相關值了,直接使用即可。
附2:spring配置文件和springmvc配置文件
SSM兩個配置文件(web.xml指定兩個配置文件 servlet-dispatcher.xml/springmvc-servlet.xml 和 mybatis xml配置)
第一個配置文件,springmvc的配置文件,對於web.xml將攔截到的請求(一般是所有請求)轉發到ServletDispatcher對應的xml配置文件,一般是包含視圖解析器和掃描spring註解component-scan,視圖解析器屬於springmvc,掃描spring註解屬於spring。視圖解析器只有在controller返回ModelAndView,需要打開jsp頁面時定位jsp頁面使用,如果controller返回值字符串String和類對象,前端直接顯示,沒用。掃描spring註解component-scan主要是掃描@Controller @Service @Repository,使controller service entity 不再 applicationContext.xml / servlet-Dispatcher.xml 中配置,還是用@Autowired/@Resource 自動注入,不再需要setter-getter,主要是controller service
第二個配置文件,spring的配置文件,數據庫連接四個常量 + MapperScan + Mapper.xml 路徑
附3: mvc:annotation-driven和context:annotation-config/
前者 mvc:annotation-driven 在web.xml中DispatcherServlet指定的配置文件,標誌啓動註解驅動, 是spring MVC爲@Controllers分發請求所必須的,需要寫。
後者在web.xml中的contextConfigLocation指定的配置文件中,當使用 context:component-scan/ 後,就可以將 context:annotation-config/ 移除了。
附4:Spring和SpringMVC的父子關係
Spring和SpringMVC的容器具有父子關係,Spring容器爲父容器,SpringMVC爲子容器,子容器可以引用父容器中的Bean,而父容器不可以引用子容器中的Bean。所以,可以在@Controller中注入@Service,@Component,@Repository等Bean,但是反過來就不行。
@Service,@Repository,@Component爲什麼要與@Controller要分開配置掃描。在SpringMVC的配置文件中掃描Controlller Bean(@Controller),在Spring的配置文件中掃描除了Controller的其他Bean(如@Service,@Repository,@Component等)。
1、極端:僅使用Spring掃描所有的bean,不可以
SpringMVC在匹配Controller與url的映射關係時只會在自己的上下文中查找Controller進行請求的處理。由於所有Controller的都在Spring容器中,SpringMVC找不到Controller對象,報404錯誤。(另外,此時的@Controller Bean可以注入@Service Bean中,因爲兩者都在Spring容器中,@Controller Bean可以被Spring注入)
2、第一個極端修改:Spring掃描所有Bean,SpringMVC掃描@Controller Bean,可以
沒有問題,Controller與URL正常映射。此外,@Service Bean可以注入@Controller Bean(來自Spring容器非SpringMVC容器)。
3、極端:僅使用SpringMVC掃描所有的bean,可以
這就是自家項目的配置方法,使用上完全沒有問題。所以我們項目中根本沒有使用Spring的容器,而是用的SpringMVC的容器。(我們的項目就是用是springmvc掃描所有spring註解,不包括@Mapper,它是ibatis註解)
所以,分開掃描的好處是便於擴展,如果要是項目需要加入Struts等可以整合進來,分開配置可以使SpingMVC和Struts都使用可使用Spring中的Bean。若只使用SpringMVC掃描,那麼Struts中無法使用SpringMVC中的Bean。
附5:@Controller 和 @RestController
@Controller @RequestBody @RestController 三個都是spring註解,由於後端更多的是返回數據而不是頁面跳轉,所有@RestController出現了
@RestController註解相當於@ResponseBody + @Controller合在一起的作用。
1.使用@Controller 註解,在對應的方法上,視圖解析器可以解析return 的jsp,html頁面,並且跳轉到相應頁面;若返回json等內容到頁面,則需要加@ResponseBody註解。
@CrossOrigin
@Controller
public class FileUploadController {
//跳轉到上傳文件的頁面
@RequestMapping(value="/gouploadimg", method = RequestMethod.GET)
public String goUploadImg() {
//跳轉到 templates 目錄下的 uploadimg.html
return “uploadimg”;
}
//處理文件上傳
@RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
public @ResponseBody String uploadImg(@RequestParam(“file”) MultipartFile file,
HttpServletRequest request) {
System.out.println(“調用文件上傳方法”);
String contentType = file.getContentType();
String fileName = file.getOriginalFilename();
2.@RestController註解,相當於@Controller+@ResponseBody兩個註解的結合,返回json數據不需要在方法前面加@ResponseBody註解了,但使用@RestController這個註解,就不能返回jsp,html頁面,視圖解析器無法解析jsp,html頁面。
@CrossOrigin
@RestController /* @Controller + @ResponseBody*/
public class HospitalController {
//注入Service服務對象
@Autowired
private HospitalService hospitalService;
/**
* 查詢所有醫院信息(未分頁)
*/
@RequestMapping(value = “findAllHospital”,method = RequestMethod.GET)
public List findAllHospital(){
List hospitalList= hospitalService.findAllHospital();
return hospitalList;
}
附6:@GetMapping和@RequestMapping
@GetMapping @PostMapping @RequestMapping 三個都是spring註解
@GetMapping用於將HTTP get請求映射到特定處理程序的方法註解
具體來說,@GetMapping是一個組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫。
@PostMapping用於將HTTP post請求映射到特定處理程序的方法註解
具體來說,@PostMapping是一個組合註解,是@RequestMapping(method = RequestMethod.POST)的縮寫。
@GetMapping("/getRule")
public Rule getRule(){
Rule rule=new Rule(" @GetMapping",“404”);
return rule;
}
@RequestMapping(method = RequestMethod.GET ,value = “/getRule2”)
public Rule getRule2(){
Rule rule=new Rule("@RequestMapping(method = RequestMethod.GET ",“404”);
return rule;
}
三、Springboot項目
3.1 Springboot項目引入
springboot 在約定優於配置理念下,是 springframework 的腳手架,快速高效的構建應用。
springboot starter-web的jar,會自動內置一個tomcat,不再需要配置tomcat了。
3.2 Springboot具體實現
注意1:構建springboot項目之前,配置好全局maven。idea 配置全局默認maven ,File/Other Settings/Default Settings…/Maven, File/Settings/Maven 只能配置當前項目的maven,新建springboot項目要先配置好默認的Maven相關,因爲在新建springboot項目的時候無法配置。
注意2:構建springboot項目開始:idea新建springboot項目的時候,可以使用 https://start.aliyun.com/ 或者 https://start.spring.io 或者 http://start.spring.io ,筆者這裏使用 http://start.spring.io 。
注意3:啓動Springboot項目報錯:IDEA運行Springboot報錯,找不到org.springframework.context.ConfigurableApplicationContext類,可刪除本地〜/ .m2 / repository / org / springframework下的文件夾並運行。
3.3 Springboot約定優於配置-Springboot的四大約定
Springboot是一個依賴優於配置理論的產物,主要包括四個約定。
1、只要依賴spring-boot-starter-web的jar包,就會自動內置一個tomcat容器(可以替換)
2、項目結構的約定
3、默認提供配置文件application.properties
4、spring-boot-starter-web的jar包提供自動依賴/啓動依賴,如果是一個webstarter,默認認爲你是構建一個spring mvc的應用
3.3.1 只要依賴spring-boot-starter-web的jar包,就會自動內置一個tomcat容器(可以替換)
像上面的springboot的項目一樣,自帶tomcat容器,不需要額外提供,值得注意的是,springboot只是模式tomcat服務器,可以替換,一般來說,springboot可以支持四種服務器,分別是 tomcat jetty Undertow Reactor,其中,前三種是Servlet服務器,最後一種是Reactive 服務器。
3.3.2 項目結構的約定
springboot第二個約定,提供一個同一個項目結構,源工程均是src/main/java
resources資源目錄下兩個目錄一個文件,static目錄存放前端靜態文件,templates目錄存放前端模板(static中放靜態頁面html,而templates中放動態頁面jsp),application.properties用於全局常量配置
其中,static目錄存放前端靜態文件,templates目錄存放前端模板,application.properties存放全局常量配置信息。
3.3.3 默認提供配置文件application.properties
3.3.4 spring-boot-starter-web的jar包提供自動依賴/啓動依賴,如果是一個webstarter,默認認爲你是構建一個spring mvc的應用
在springboot項目中,僅依賴spring-boot-starter-web這個jar包,但是卻可以完成整個web操作,這是因爲其他的jar包依賴都使用 spring-boot-starter-web 自動依賴了,並且都已經匹配上正確的版本,不需要程序員關心。
在使用springboot項目的時候,我們再也不用擔心少導入的哪個依賴,或者依賴之間的版本匹配問題了,spring-boot-starter-web的自動依賴也是它的一個約定。
在springboot中,只要是使用了spring-boot-starter-web,就默認你是一個spring mvc應用,把需要的依賴自動配置給你了。
3.4 Springboot整合mybatis
3.4.1 導入兩個依賴、構建好三層、配置好數據庫四個
3.4.2 完成dao層,dao.entity.User.java dao.mapper.UserMapper.java resources.UserMapper.xml
UserMapper.xml儘量放在resources目錄下,如果放在src/main/java/com/example/demo/dao/mappers 源碼目錄下,默認是不會被打包的,放在resources目錄下,要在application.properties文件中指定一下。
3.4.3 完成services層,services.IUserService.java services.impl.UserServiceImpl.java
3.4.4 完成controller層,controller.HelloController.java
注意,一般404都是controller這裏的GetMapping錯了。
3.4.5 數據庫表設計和啓動類
啓動類中爲什麼要配置@ComponentScan註解:因爲springboot只掃描啓動類所在包及其子包下面的註解,該項目中啓動類在com.example.demo下面,可以去掉@Component(“com.example.demo”)這個註解,如下:
啓動類中爲什麼要配置@MapperScan註解:@ComponentScan 只能掃描指定目錄下spring中的註解,要掃描ibatis中的@Mapper註解,所以這裏使用@MapperScan
3.4.6 運行成功
3.5 springboot小結
spring +springmvc+mybatis | springboot +mybatis | |
---|---|---|
web.xml | 指定contextConfigLocation和DispatcherServlet配置文件 | 沒有web.xml文件,沒有DispatcherServlet配置文件,沒有contextConfigLocation配置文件 |
視圖解析器 | 在DispatcherServlet配置文件中 | 沒有視圖解析器 |
spring註解掃描器 | 本項目在DispatcherServlet配置文件中(也可以讓springmvc掃描Controller,spring掃描service component/repository) | spring註解掃描在啓動類中 |
數據庫四個屬性 | contextConfigLocation配置文件中 | application.properties文件中 |
Mapper類掃描 | contextConfigLocation配置文件中 | mapper註解掃描在啓動類中 |
Mapper.xml | contextConfigLocation配置文件中 | application.properties文件中 |
附:springboot沒有視圖解析器,如果完成頁面跳轉?
回答:兩種方式,static和templates
新建springboot工程,導入thymeleaf依賴
四種方式
注意,controller的方法名儘量不要與頁面名稱重合,比如這裏,都加上了say前綴,sayhello sayhello2 sayhello3 sayhello4
方式1運行成功:
方式2運行成功:
方式3運行成功:
方式4運行成功:
四、小結
Springboot是Spring的腳手架,完成對Spring封裝,使後臺開發更加高效。
spring工程代碼:https://download.csdn.net/download/qq_36963950/12552110
springboot工程代碼:https://download.csdn.net/download/qq_36963950/12552116
springboot頁面跳轉工程代碼:https://download.csdn.net/download/qq_36963950/12552737