springMVC只是spring這個框架中的一部分功能,spring與mabatis整合不僅包含sprinMVC與mybatis的整合,而且還可以使用spring的AOP,IOC功能來管理組件以及事物等。
hibernate,優(yōu)化難度比較大,配置比較困難,但搭好框架后開發(fā)效率比mybatis高很多。
mybatis對sql細(xì)節(jié)更容易控制,但是寫sql比較耗時,要控制好查詢sql的重用比較難,造成開發(fā)效率較低。 用好了,兩個的性能沒有區(qū)別,hibernate也有很完善的配置和方法讓你做到精細(xì)控制,所以說hibernate比mybatis性能差是沒什么根據(jù)的,多數(shù)人不會去很深入地優(yōu)化hibernate,因為比較復(fù)雜。
hibernate傾向于以犧牲一些性能提升開發(fā)效率,而mybatis把性能掌握更直接地交到了你手里,犧牲了開發(fā)效率
spring是框架,mvc是一種設(shè)計模式。,M代表model;V代表View;C代表controller從字面意思你也可以看出來M是指模型一般指DAO和service ;view代表顯示一般指頁面eg:jsp,html ftl等c值得是控制器,比如struts和springMVC 中的action與controller 而springMVC嚴(yán)格意義上指的是前端控制器,就是每次客戶端與服務(wù)器交互都要經(jīng)過springMVC的controller。
工作流程(12步)
1.DispatcherServlet(前端控制器)接收用戶的請求;
2.DispatcherServlet調(diào)用HandlerMapping(處理器映射器),找到合適的Handler;
3.HandlerMapping(處理器映射器)返回HandlerExecutionChain(合適的Handler的位置)給DispatcherServlet;
4.發(fā)送請求到HandlerAdapter(處理器適配器)(打一個比方:家用電的電壓為220V,我們的電腦或手機(jī)所需要的電壓各不相同,所以就需要有電源適配器來起到橋梁作用,這里的處理器適配器也是同樣的作用);
5.HandlerAdapter(處理器適配器)將請求交給Handler(處理器)去執(zhí)行;
6.Handler(處理器)執(zhí)行請求,并將處理后的結(jié)果封裝成為一個ModelAndView對象,返回給HandlerAdapter(處理器適配器);
7.HandlerAdapter(處理器適配器)將ModelAndView對象返回給DispatcherServlet;
8.DispatcherServlet調(diào)用InternalResourceViewResolver(視圖解析器)請求視圖解析;
9.InternalResourceViewResolver(視圖解析器)解析視圖后返回給DispatcherServlet;
10.DispatcherServlet請求渲染視圖;
11.View(視圖)將渲染好的視圖返回給DispatcherServlet;
12.DispatcherServlet響應(yīng)用戶的請求。
Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供了構(gòu)建 Web 應(yīng)用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構(gòu),從而在使用Spring進(jìn)行WEB開發(fā)時,可以選擇使用Spring的Spring MVC框架或集成其他MVC開發(fā)框架,如Struts1(現(xiàn)在一般不用),Struts 2(一般老項目使用)等等。
框架
通過策略接口,Spring 框架是高度可配置的,而且包含多種視圖技術(shù),例如 JavaServer Pages(JSP)技術(shù)、Velocity、Tiles、iText和POI。Spring MVC 框架并不知道使用的視圖,所以不會強(qiáng)迫開發(fā)者只使用 JSP 技術(shù)。Spring MVC 分離了控制器、模型對象、過濾器以及處理程序?qū)ο蟮慕巧?,這種分離讓它們更容易進(jìn)行定制。
優(yōu)點編輯
Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)無縫集成,采用IOC便于測試。
它是一個典型的教科書式的mvc構(gòu)架,而不像struts等都是變種或者不是完全基于mvc系統(tǒng)的框架,對于初學(xué)者或者想了解mvc的人來說我覺得 spring是最好的,它的實現(xiàn)就是教科書!第二它和tapestry一樣是一個純正的servlet系統(tǒng),這也是它和tapestry相比 struts所具有的優(yōu)勢。而且框架本身有代碼,看起來容易理解。
1.接收簡單參數(shù),在Controller的方法后面添加相應(yīng)的參數(shù)列表,Controller的參數(shù)列表要和view層傳的參數(shù)名一致。
2.接收對象參數(shù),在Controller的方法后面添加相應(yīng)的實體類,實體類的屬性名要和view層傳的參數(shù)名一致。
Controller類
package com.zhiyou100.kfs.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.zhiyou100.kfs.bean.User;
@Controller
@RequestMapping("/login")
public class LoginController {
@RequestMapping("/login.do")
public ModelAndView login(String username,String password) {//要和view層傳的參數(shù)名一致
ModelAndView mv=new ModelAndView("login");
if("張三".equals(username)&&"admin".equals(password)) {
mv.addObject("name", "歡迎"+username+"!");
}else {
mv.addObject("name", "出錯了!");
}
return mv;
}
@RequestMapping("/login1.do")
public ModelAndView login1(User user) {//實體類的屬性名對應(yīng)要和view層傳的參數(shù)名一致
ModelAndView mv=new ModelAndView("login");
if("張三".equals(user.getUsername())&&"admin".equals(user.getPassword())) {
mv.addObject("name", "歡迎"+user.getUsername()+"!");
}else {
mv.addObject("name", "出錯了!");
}
return mv;
}
}
和jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
${name }
<a>跳轉(zhuǎn)到login.do</a>
<a>跳轉(zhuǎn)到login1.do</a>
</body>
</html>
3.接收日期時間參數(shù)
a) 只能接受一個日期時間使用@initBinder在Controller:當(dāng)接收的日期時間參數(shù)時會先經(jīng)過該方法進(jìn)行處理,但網(wǎng)頁傳的日期時間格式要和bider格式一樣。
需要在接收日期時間參數(shù)的Controller里增加:
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
//只要網(wǎng)頁中傳來的數(shù)據(jù)格式為yyyy-MM-dd 就會轉(zhuǎn)化為Date類型,
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}
b) 能接受多個日期時間參數(shù),在實體類對應(yīng)屬性上使用@DateTimeFormart(pattern=”yyyy-MM-dd”)
4.接收對象中的對象的屬性值(包裝類:此處不是int等基本類型的包裝類,而是對象里有個對象),例如User類里有個person對象(Person類有age屬性,getter和setter)
a) 在頁面?zhèn)鲄?shù)時name要是對象中的對象名點屬性名(person.age)
personAge:<input type="text" name="person.age"/>
b) 在controller層正常用user對象接就能接到了。
SpringMVC(Model-View-Controller)是一個基于MVC設(shè)計模式的Web框架,用于創(chuàng)建Web應(yīng)用程序。SpringMVC框架使用經(jīng)典的模型-視圖-控制器模式,其中模型表示應(yīng)用程序中用于處理數(shù)據(jù)的對象,視圖表示呈現(xiàn)GUI的用戶界面,控制器使用模型和視圖組合來實現(xiàn)業(yè)務(wù)邏輯。
SpringMVC框架是Spring框架的一部分,通過將其與Spring框架相結(jié)合,可以實現(xiàn)基于MVC的Web應(yīng)用程序的完整堆棧開發(fā)。SpringMVC框架提供了一個靈活的請求處理流程,使開發(fā)人員能夠?qū)崿F(xiàn)自定義路由邏輯和響應(yīng)數(shù)據(jù)格式。
此外,SpringMVC提供了許多內(nèi)置的HTTP請求處理器,它們負(fù)責(zé)與服務(wù)器通信以及處理來自客戶端的請求和響應(yīng)??傊?,SpringMVC框架是一個功能強(qiáng)大且靈活的Web框架,廣泛應(yīng)用于企業(yè)級Web應(yīng)用程序開發(fā)中。
springMvc是spring基礎(chǔ)之上的一個MVC框架,主要處理web開發(fā)的路徑映射和視圖渲染,屬于spring框架中WEB層開發(fā)的一部分;
Eureka是注冊中心,將服務(wù)注冊進(jìn)來,統(tǒng)一管理。就好比是滴滴,負(fù)責(zé)管理、記錄服務(wù)提供者的信息。服務(wù)調(diào)用者無需自己尋找服務(wù),而是把自己的需求告訴Eureka,然后Eureka會把符合你需求的服務(wù)告訴你。Eureka說白了就是一個注冊服務(wù)中心。
springmvc可以集成euraka,做注冊中心。同時springboot框架也可以集成euraka,后者用的較多,主要還是看公司的選擇。
SpringMVC重要的五大組件:
DispatcherServlet、HandleMapping、Controller、ModeAndView、ViewResolver。
1.DispatcherServlet
這個控件是SpringMVC 最核心的一個控件,顧名思義其實他就是一個Servlet,是Spring寫好的一個Servlet
2.HandleMapping
控件標(biāo)明了路徑與Controller的對應(yīng)關(guān)系,不同的路徑訪問不同的Controller
3. Controller
用來處理業(yè)務(wù)邏輯的Java類
4. ModeAndView
Mode用來綁定處理后所得的數(shù)據(jù),View視圖名
5. ViewResolver
視圖解析器明確了視圖名與視圖對象的關(guān)系,是調(diào)用demo.jsp還是調(diào)用demo.html,以及明確視圖的位置
springmvc的標(biāo)示符,其在JSP中使用的tag均為form開頭,其對原生的HTML元素進(jìn)行了在封裝