TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
3 Z4 `1 M/ ~, U2 g$ _3 f; ~9 ?为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:0 \/ D$ J' G' X$ y( F+ a
1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。: T1 c6 u" w; }
2、性能优秀,这是一个最能吸引眼球的话题。
+ B' F3 z5 t5 v7 p- z3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。. _1 m8 k- f( I9 }# }8 r
w0 A% {1 E* e! Y& M
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。% Y4 o" b e* H4 t
" T& G, b' u8 @. _Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。# u2 V+ s" S8 x9 O2 @
2 z7 v; H H2 D1 h, ^5 MStruts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。0 b" B" D6 @: p, H) K: N
) d5 h+ x( ]& Y( K: t
Spring3 MVC的优点:, F. A& X0 e3 v" Q
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
' B* C/ L4 N9 Y6 d4 r6 B, Y, d2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
- S* W4 @. q' Z8 l. q3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。0 t) T) K: _2 c* t3 U. m/ S9 J$ w @4 z
8 |# c: j& W |5 y6 Q
Struts2的众多优点:- w7 t( b$ L) a) ^/ b. n# k9 e$ V8 A
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。+ q# \1 K! O% R& M
2、其它方面略...
" P3 q8 E/ \" z1 ~. p==============================================================
. e% S8 H( F- h2 f0 T \: h5 X什么是mybatis F# J: a" G r; ~
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.; U0 N" s+ R) H
: t! }3 W/ w2 D4 S- p+ X, qorm工具的基本思想, e' ^% w# B! r5 | ? d( W( n
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
6 F2 i0 N, p& R, [1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
# Y9 I2 R. O0 d' M' G5 W5 H5 V. ~2. 由sessionfactory 产生 session( ]$ ~; P( ]! ]5 q
3. 在session 中完成对数据的增删改查和事务提交等.
- \, H* t& z( c( ^4. 在用完之后关闭session 。/ }7 y7 k% C* v; ^) ]* h
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
3 I H( s2 `0 C, F( {% A
2 E% N& x5 d' _# Y& N; g' Q项目说明:实现了用户登陆demo。' X4 @6 O1 @2 G' ]" N
项目配置说明:% I, G6 c$ S5 i, y8 z) a
web.xml:: X% O; D0 m: a; z
- <?xml version="1.0" encoding="UTF-8"?> 9 k7 G( B* ?6 J3 k* n! J, n
- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 3 G8 K' d3 l4 w7 @! E
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
% H) U, x6 l1 L2 F# L - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
% _% P; c9 O$ M. l' P) c+ y, J" o1 f - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 2 Z5 H3 Q, Z1 k
- & d/ e0 i! c" r" h
- <!-- 监听spring上下文容器 --> : w9 T0 ^4 ?7 \3 s& X. ]
- <listener>
* g4 d/ s3 i5 m3 N& C - <listener-class>
4 a# [& U- I0 j$ G$ G - org.springframework.web.context.ContextLoaderListener
% P- K: t* U/ Z# k* v7 m2 X - </listener-class>
% T0 a. X. `2 h+ b - </listener> ' D8 M2 S" I5 v5 v
- r, `! a% o3 \) q0 ]6 [( P
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
! K5 X- |1 h; \ - <context-param> 5 s0 Z# C; D* e2 y, R X2 |
- <param-name>contextConfigLocation</param-name>
" R: e4 s% Z+ W3 C- `' w2 S. I6 E - <param-value>classpath:*-context.xml</param-value> % w+ P. u) Q6 r; k; L. w" ?
- </context-param>
( F& Q% v; i5 p# Z/ @ - ! p& A( U9 A; X( M# Q$ x' u9 i( S" z
- <!-- 配置Spring MVC DispatcherServlet -->
% j! Z) N7 c/ A - <servlet>
( b: m$ n. t5 E* J; } - <servlet-name>MVC</servlet-name>
: |6 s" U. K' T, T1 |% Y4 ? - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
; r1 f, i. w6 ^! T* p8 y6 k- E - <!-- 初始化参数 --> 5 U" _' V# F |
- <init-param> 1 f, t. `4 o0 _' E+ S$ R
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 -->
& x7 f, W% L3 F4 G' a( p6 y" [' N6 F - <param-name>contextConfigLocation</param-name>
1 p; ?. W5 B( _- i - <param-value>
+ r! w; v6 Y5 x - /WEB-INF/classes/mvc-context.xml
/ p, f& L, ~2 a) \! K: N - </param-value>
( J' w7 W5 C! ]# `+ o& j: x- j - </init-param>
8 b; B! U7 @6 }/ ~2 }& |5 i - <load-on-startup>1</load-on-startup> ( _$ [3 J& V, h
- </servlet>
, k9 v$ [$ q4 q8 J4 M -
2 @& Y) D' _, b( ]: b9 u$ J - <!-- 配置DispatcherServlet所需要拦截的 url -->
( H% Z) e7 x# o4 c; D' b - <servlet-mapping> ; r( [ ^% I D4 M) }
- <servlet-name>MVC</servlet-name> ; Z4 |4 b4 i4 d$ U0 C% w3 Q9 _% g1 `
- <url-pattern>*.do</url-pattern> / c, j5 K5 k7 l6 p V) O: @/ v8 n: ]
- </servlet-mapping>
7 e2 c# H) E; g7 b( t9 G - * a. a' W$ ]. e
- <welcome-file-list>
' ? C9 x! [& N- u9 n4 G7 Z- P - <welcome-file>index.jsp</welcome-file> 3 m7 R% A0 B! \, w( I& R
- </welcome-file-list>
! [9 L$ X8 g) U; R* s - " Q$ {: v+ o8 h' X' r- }6 i
- ' n( W2 s8 ^' S' y' z2 e: Z: L
- </web-app>
复制代码 % }/ f/ R1 k: s# z1 ~% w
mvc-context.xml:
$ z8 J1 P* w1 d4 D8 n- <?xml version="1.0" encoding="UTF-8"?>
. d) N0 S$ x3 J: k1 F, E# O( R' \ - <beans xmlns="http://www.springframework.org/schema/beans"7 ?% u# N) S f1 E- g/ o2 Q. O4 j
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
0 D& f1 a- N5 m9 x1 I' U: X# D2 X - xmlns:context="http://www.springframework.org/schema/context"
' L7 Y8 @/ j& w6 u" b# s6 D, B8 d - xsi:schemaLocation="http://www.springframework.org/schema/beans
$ x& Z9 n/ U+ I$ ?9 `* }& _6 r- R - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
5 J% R2 e% T- y7 L) S; d. E - http://www.springframework.org/schema/context
$ O% n; E. b, k - http://www.springframework.org/schema/context/spring-context-3.0.xsd">1 b* r3 x+ ]' S" y# K# ~6 M# D
- ( R; ^9 M' k5 W. o4 @
- <context:component-scan base-package="com.wg.*" />' E% H: s5 H3 ]
- ( c- @0 U% ?+ ^
- <bean id="viewResolver"! C* |/ A- o j1 W$ U/ X2 i- ^; E/ |
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">+ c; u5 _, y# g6 m! v1 p
- <property name="viewClass"
! j s+ W8 w2 k3 e6 P - value="org.springframework.web.servlet.view.JstlView" />
7 U- \ `, s* N$ W' F- S - <property name="prefix" value="/page/" />
7 H H- j" X; A$ |# G3 R - <property name="suffix" value=".jsp" />0 }8 D, ?9 @1 {+ y
- </bean>
5 W/ z/ o9 I- { - </beans>
4 C/ ?$ u' }2 S0 {; f; B9 o; \$ a$ ~& J
复制代码
8 I, J; j3 r5 i' }8 G9 E1 w4 S) P; rmybatis-config.xml:* i6 M6 d4 [( b, M
- <?xml version="1.0" encoding="UTF-8"?>
8 L# i* G7 v2 `4 \ - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" # h% O: _ z/ b- l6 v
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
; \. n# n7 i$ [7 c! A C- g7 I - <configuration># M i/ Z! ~0 b! M8 h; n3 A
- <typeAliases>8 W. Q5 A, Q" n- ]
- <package name="com.wg.bean" />( D) n ^) d8 a: j
- </typeAliases>, r5 V7 y- r& G/ K
- <mappers>
9 B6 o U; j% @/ m1 a: k - <mapper resource="com/wg/bean/UserMapper.xml" />' U: w: `: r. }" S$ f! U- e
- </mappers>, m; z* v* q# ^* N% N5 i x
- </configuration>
复制代码 root-context.xml:
3 G( B4 @, W8 `% I! m) J/ M3 o0 s- <?xml version="1.0" encoding="UTF-8"?>
# ]& X; O1 K6 {/ M - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- {* b+ |' y. {: W% Q* c - "http://mybatis.org/dtd/mybatis-3-config.dtd">0 ^2 X/ Q6 B0 C' Y
- <configuration>
5 x1 h3 H/ Y' ?- ] - <typeAliases>4 l* ], }3 D, r& v. L( n8 H
- <package name="com.wg.bean" />1 i4 c; U* m) U) R4 ]
- </typeAliases>* R- H W+ l; v/ z% ]
- <mappers>' v% x) M: J& x: J. o: z J! J* N
- <mapper resource="com/wg/bean/UserMapper.xml" />
0 f3 J0 y) c! C H7 k3 g( @1 N5 F0 a( y( } - </mappers>* H$ v: W" r% }- j
- </configuration>
复制代码 7 H4 r( K& j9 Z& K0 m
user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
8 D7 k- C: p4 }8 [ - <beans xmlns="http://www.springframework.org/schema/beans"
4 y- M+ w& z9 R. O$ Q6 P( e$ J - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"% ?) u* A6 T4 U) m* k& P9 s, D
- xmlns:context="http://www.springframework.org/schema/context"5 o( R9 N& X# W7 b# N+ O
- xsi:schemaLocation="http://www.springframework.org/schema/beans
4 u c% R |! o4 a$ }* f, P - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd) ?9 L7 O% E) H& J# r7 c
- http://www.springframework.org/schema/context
' J% y8 q- G4 B - http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
4 j( y, l6 F8 i) e0 q5 E. Y -
, r5 b: {, E; _* s0 G4 Z2 Z - 8 s" g( V8 [+ K9 |5 W: ~2 x9 U- n
- <!-- 用户Dao -->8 O6 @# ]8 v z5 M9 j2 h! b
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
2 k$ u$ l9 a/ G. u" H: \7 L - <property name="mapperInterface" value="com.wg.dao.UserDao" /> ' r, p5 \( c$ W/ [: C% f
- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> " S/ b, h( P8 U' \5 _( `# ?! S* q& \
- </bean>
. L- K# S# _$ {4 I0 ^ W0 S -
* H' x2 \8 r- ]3 d% C2 e2 E% X' @
" D* t5 \/ ]% U3 r. b" o, V- </beans>
复制代码 * U& v/ v" V2 X8 e) D2 \
2 E; g, N, Q0 J7 C0 ?
: Q9 V5 W- j! T; W( V3 A
链接:springMvc整合mybatis项目源码0 V) z$ B! K+ J5 Z, b O4 H, b
密码:
0 G2 ? Y+ K5 a& U/ q( ^& z6 a8 n, O# B" Z7 [1 T$ s, i, S
, R8 k$ t0 ]* G4 \! _4 g! T9 z3 m
! _& `; _/ c* L' O: Q/ j
|
|