TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:6 F5 O, _' b' N7 F) p, y- r
为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
/ | Q5 G6 s" a; ~+ X% H: h/ `1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。
7 z% L% d6 l8 \2、性能优秀,这是一个最能吸引眼球的话题。
/ V) ?6 Y& I* n9 `: w1 ]3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。3 p3 w3 O1 F" O
7 K2 P; T0 ]2 l/ F' z P如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
T6 w% k2 a5 @0 W
2 |6 C* _/ e0 Y' p- |Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。
: m+ j7 R. k+ C8 L4 o& ]$ ]) H8 O# C' Q3 P$ k5 H
Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。# ]; N( B2 R- \" B/ R
+ m8 @2 Y( C# N, q4 |# C1 ^" {& l- x) HSpring3 MVC的优点:2 [0 Q L5 R! F; E8 j' x
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
2 Q# S+ g; e) s7 _: L: N& E" k2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
5 C2 r- H* |) f( y3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。
5 [% n6 Q$ G- q4 z) D! e* F4 o
Struts2的众多优点:
. D% a* x% T/ B1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。! Z' b/ d& `. _
2、其它方面略...
+ i+ |2 r7 R! T' I==============================================================+ {' u5 r( Y( c. L1 w8 i' v
什么是mybatis" t+ R0 ~5 S) g2 t) k; G
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
6 Z4 i9 I! d) I. B. K( Q
% W, I9 ]+ p4 Morm工具的基本思想: q/ I" \6 h3 ]9 S# ~0 D
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:; P' i) O9 d1 P9 ?% Z) l
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2 f, ?' k& [9 E$ U0 i6 A, t2. 由sessionfactory 产生 session
8 A, m4 x/ _* I- B3. 在session 中完成对数据的增删改查和事务提交等.) a1 Z( Q" Z9 B* h% `, Y9 U
4. 在用完之后关闭session 。# f" T' h2 y% V* t7 ^) ~
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。+ q" ]+ N% v/ L! R1 k% ~0 X# H
) p7 E0 c9 Q3 _8 y
项目说明:实现了用户登陆demo。& R) x3 y6 s, y+ ~/ x; }) a
项目配置说明:
% ^- Y+ |% Y/ v/ X1 b% k& @web.xml:* P8 H! p, }4 r, H, A0 P* t
- <?xml version="1.0" encoding="UTF-8"?>
4 q4 p. e' E n- G" K6 v# w - <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" . t$ R5 I! X! C. u0 k4 ^0 m
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 A; v: i* V# J
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 8 G) y0 @) r; ?' X
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
{4 J' A$ s) L; x, b- Y - 9 T& ]& X( w' H$ {
- <!-- 监听spring上下文容器 --> 6 R5 g, a- M8 B# r; z. p
- <listener>
$ a7 q. H# w" B0 H H4 K6 h- { - <listener-class> 4 x" O/ v4 j7 o: H z
- org.springframework.web.context.ContextLoaderListener " N9 c# H. i% x/ f3 B; O
- </listener-class> " ?$ C9 H# Z9 L( G0 W! f8 O. l- f. G
- </listener> 6 A6 w( M: S( \1 Y; x" G. a* E
- 9 f; c/ j- h7 g" }0 a7 N
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 --> $ H5 O/ N) }1 C! U
- <context-param>
# r- D3 \/ t* `. F: q+ ^ - <param-name>contextConfigLocation</param-name> / W' {9 W7 ~4 G5 n
- <param-value>classpath:*-context.xml</param-value>
: x2 ^0 R8 U) z - </context-param> , }. O; ~1 F$ f# w9 G
-
2 W5 M ^; P% f( _. U: ] - <!-- 配置Spring MVC DispatcherServlet --> & u1 T( e$ w) @+ y& `; T
- <servlet>
0 P9 W! x7 A, A* U4 } - <servlet-name>MVC</servlet-name>
" ~. i) M1 G% n8 }; R - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- y& {' I+ k8 z& |8 Z - <!-- 初始化参数 --> 0 N3 D2 @& R6 S: D
- <init-param> ' C; G( @- y+ A! D2 l# d$ k& z
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> % E) ~7 Q2 ^/ h
- <param-name>contextConfigLocation</param-name> - ~3 e6 K; ]" f. H
- <param-value>
" n8 K+ T, V: S - /WEB-INF/classes/mvc-context.xml 3 Y4 |! _* q o1 y' K+ h5 g
- </param-value> 4 S$ W/ v. T# l( W
- </init-param> ) K- V( J: o: ~
- <load-on-startup>1</load-on-startup>
x b9 Q9 W5 O9 Z/ d0 p - </servlet>
# J- f* m* E5 Y P4 A -
0 \! _' B7 z8 v9 j - <!-- 配置DispatcherServlet所需要拦截的 url -->
( R& M- T e$ h( B6 ]0 S - <servlet-mapping> / G. j6 y% q, F' |" j3 o) J+ j2 q! [
- <servlet-name>MVC</servlet-name>
; }! q. e* r' c. F! M; K - <url-pattern>*.do</url-pattern> * E5 y8 Y% U6 C% k
- </servlet-mapping> + i* w* \& Q% I2 N
-
( E) x1 F- z2 d% D" n; K% T - <welcome-file-list> . g$ a+ X! t/ h5 L. M' |
- <welcome-file>index.jsp</welcome-file>
7 q0 w$ O) _- f( Q# \- ^4 O& M - </welcome-file-list> , c3 M# B, }1 F$ v. K- q+ j
- ! S' X) R9 \" P- \# a# a
- # y" Z4 N- c0 c9 U1 [
- </web-app>
复制代码
& `8 s1 n( U3 f. v2 z0 {' i& Nmvc-context.xml:) u& ~. @0 I2 Z; P( [" q) j: D
- <?xml version="1.0" encoding="UTF-8"?>+ R- S3 z$ Q) T$ w# p. v; P. }7 B
- <beans xmlns="http://www.springframework.org/schema/beans"; o: S; f* ] p C
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
% T1 D0 k" J# t) s- u" Y - xmlns:context="http://www.springframework.org/schema/context"0 K6 Z" L A' i, ^+ {' p& d* u
- xsi:schemaLocation="http://www.springframework.org/schema/beans
D+ g! t: d: E+ ` - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd, F" p: u( a/ F- s1 u- e6 ~
- http://www.springframework.org/schema/context
; m H$ T X( g6 x - http://www.springframework.org/schema/context/spring-context-3.0.xsd">0 n- {/ B7 u7 P7 u; L
- 1 z1 j5 Z/ m; a0 T& y
- <context:component-scan base-package="com.wg.*" />
3 A& w& J( p; {3 n9 D/ B6 X/ M - 0 _( x' V" k, w I* e7 n0 H, k' Z
- <bean id="viewResolver"- o5 D$ p% V$ K6 K6 @8 C0 e
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">
! o! q; ? f3 O# Y* R: w1 [ - <property name="viewClass"" [2 v& g6 M. q# ^+ r) V o1 H
- value="org.springframework.web.servlet.view.JstlView" />
/ X3 T9 S5 W' }. S. I# @ - <property name="prefix" value="/page/" />1 k) P# H( [0 l+ g
- <property name="suffix" value=".jsp" />
$ y: t" r5 H) r5 Y - </bean>: O4 E: r+ A9 ]; l" \
- </beans>
& {. S! t5 C; w- y
复制代码
" U; E! d" y; U8 y1 [: p5 b; |mybatis-config.xml: u* Y% h1 g# b
- <?xml version="1.0" encoding="UTF-8"?>6 a. @, U% |' v. C6 r6 |) H
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ) F8 i1 M0 B( m9 R0 ?, j/ u: b
- "http://mybatis.org/dtd/mybatis-3-config.dtd">7 Y% s2 N; _$ W( U/ _! J0 }/ A* G
- <configuration>& T6 Q/ j/ M/ G, z2 h3 b
- <typeAliases>
/ a) A4 w) Q- D Y% U5 |) h - <package name="com.wg.bean" />4 S) [- ]3 K6 }" `# v
- </typeAliases>
' l3 p' C6 b' z8 a" O - <mappers>0 C: i/ x; P- L) Y- w
- <mapper resource="com/wg/bean/UserMapper.xml" />
! I; g) t! ^4 g' K; d+ b - </mappers>
$ G: W- U& x/ V% V7 o+ K - </configuration>
复制代码 root-context.xml:! @; E( M6 X9 c/ s( f. t: t
- <?xml version="1.0" encoding="UTF-8"?>
& x3 M& O" f& [1 d - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 5 K* G }& p! P* f; n: w* S
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
) j% ~3 C' @ n8 Z( O$ ? - <configuration>
* L; v1 T: t4 w8 I( _ - <typeAliases>
3 e" H" A6 x/ m - <package name="com.wg.bean" />, n* K7 o2 g, J. C9 I& M$ A
- </typeAliases>( ^- l4 U S* V* c5 |
- <mappers>8 a$ |9 O% h) y6 Z8 s1 w
- <mapper resource="com/wg/bean/UserMapper.xml" />
' Z: n; c* ]/ _/ B" w - </mappers>" p7 x* }/ ]7 t7 ]1 W
- </configuration>
复制代码
3 p2 G1 b$ v2 D5 e, r/ K5 _( Vuser-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
2 W8 v) g0 T: J* W0 N - <beans xmlns="http://www.springframework.org/schema/beans"
5 O* L- ]. X) T3 c: w. \4 h0 g - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' j( a; o) G: z" L
- xmlns:context="http://www.springframework.org/schema/context"
J" r7 @5 B- d* A _ - xsi:schemaLocation="http://www.springframework.org/schema/beans& G6 N2 l; S5 C4 j3 D" j* T
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
p- S( z/ C( h: v* b - http://www.springframework.org/schema/context z8 o: C4 h& s0 o6 a: o$ R9 D7 W7 U
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >1 U- s/ |0 F8 M+ L- ^6 L" j) `9 k* Z
- % O2 b$ q8 U7 z! d; h
- 9 c# F7 |: C4 g8 n) A4 z. K
- <!-- 用户Dao -->. A* V4 D6 |: R* E, @5 T
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
2 u- p7 R: Y8 X) A - <property name="mapperInterface" value="com.wg.dao.UserDao" />
0 O5 L0 A2 ^& c0 D- w q; B - <property name="sqlSessionFactory" ref="sqlSessionFactory" />
i* x# s) x" n- v" U2 r( E - </bean>' e6 _: P/ C4 _
- + O5 \8 K, e; d1 f) D; y1 z
- " d. d2 K W* \% ]- @0 }! j
- </beans>
复制代码 5 q( L4 Z) {5 |( z8 ?/ f# K
; _. h. h5 p" V% z9 y2 |3 R
+ y0 j% Z4 y ] t9 w' j, a4 r链接:springMvc整合mybatis项目源码1 @* j6 }- F; J$ i
密码:1 {6 e5 ]$ Q+ U5 t0 `2 b
1 J* p) t7 [% M: E9 a8 K" g5 {1 ]" h
; a5 A, t6 D: O- v' a; ~0 U
|
|