TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:* K. }& N+ y1 r0 P9 i! i
为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:+ G% y3 O) p$ Z/ Z; @* U0 K* F( ^
1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。# @/ n8 h$ Z9 J" j& n# `0 O
2、性能优秀,这是一个最能吸引眼球的话题。* y6 Q. e; z& H2 @$ g& U# N
3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。) n g& Y* L) R6 s
% q9 @0 d+ Z3 ]如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
+ W' g+ Z g% k
' n0 C& G+ X9 c* t: h; z" [. r( fSpring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。
/ d, V k( s; V% C7 f& P
: y* u1 a/ o7 \# f% M: p9 YStruts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
4 F& T b8 s$ {" G" X/ d$ G' D
Q' o% l4 f2 C% j; gSpring3 MVC的优点:% ]. @# Y7 y& w" }6 K7 G ?
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
+ J9 z3 h/ u. m9 w) I2 G2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
# I/ l3 ?) w# y* @ D) k3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。9 r, a; y N/ z$ K0 P3 E7 J. R. R
* t) Q) H' U$ b; C8 p
Struts2的众多优点:0 O+ M& y; `3 O O
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。4 P- E( t! y9 v+ L8 v' a* c
2、其它方面略... $ x" D4 ]+ j/ L: z: E: N$ o
==============================================================5 G3 V& f' i6 D6 B g
什么是mybatis$ O7 y6 v. G1 G! \: ^( j8 V
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
4 ~7 C B- p/ B5 j! ?2 `
( ?# n! z; R) r; aorm工具的基本思想! Z) U7 U3 {: m
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
9 H6 E! @2 _0 ^4 t1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
. J; ?4 a' d# O2. 由sessionfactory 产生 session
; W/ N7 t: r+ G l1 u$ R* G3. 在session 中完成对数据的增删改查和事务提交等.1 j4 k$ W( ^4 [/ P
4. 在用完之后关闭session 。& X% B4 L4 F' i) } C. \& W! c
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
# I# O/ t$ g( y! j
y- G* c2 f3 B9 M项目说明:实现了用户登陆demo。
7 a$ p: u# O3 W( D# R. ]项目配置说明:
; v4 Q# {+ ]% J, Y, p+ e9 }web.xml:
* a: U5 G* Q* `/ H! ^$ B- <?xml version="1.0" encoding="UTF-8"?> & R, Y2 R7 r7 S
- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" # T" t$ d8 E7 ^$ W0 h' d2 y; \
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 7 [; \2 M9 E% ^2 [
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ; V c. V4 ]/ [! p
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> / M. w, U' b$ N0 l3 J
-
% X/ P! {6 N9 a" S5 }' D - <!-- 监听spring上下文容器 -->
; t3 v5 |; t" u, \+ R - <listener> + [6 Q6 x+ y; F. g! e
- <listener-class>
' ?2 H0 i6 S3 ~3 Y7 ` C+ b" k - org.springframework.web.context.ContextLoaderListener " H$ J1 Y3 o4 ?: [( h5 N9 s
- </listener-class>
" A, h' `- u" ?0 _ - </listener>
% U+ M# K2 D; f) W I, s A' t - 2 t0 R9 T6 B$ q3 V/ U" u% P" p# U# F
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
) W7 f& y) x7 Q! w - <context-param> ; \% }4 X; T8 B/ A
- <param-name>contextConfigLocation</param-name> - P: r. l% R& n% a* C
- <param-value>classpath:*-context.xml</param-value> % j \. Q+ Z; M- D" S- \5 r) L
- </context-param>
) O7 U% ?1 \: Z -
s/ G N1 c6 J, i7 Y A$ k - <!-- 配置Spring MVC DispatcherServlet --> ; e. u8 i' a) P
- <servlet> * C. J/ M( Y( b
- <servlet-name>MVC</servlet-name> / Z4 D2 b3 K4 A; O. Y/ K8 S; K
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
7 n& V+ n+ }. Q6 \/ x - <!-- 初始化参数 -->
" n3 K9 `* P% l4 n/ p - <init-param> # Y: B! q3 U5 j0 w
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> 4 L0 s/ K: o6 K' @1 Q6 L& D. I
- <param-name>contextConfigLocation</param-name> 4 {7 Y8 f$ z% L. U% Q. Z
- <param-value>
9 Q6 p2 ~) U4 M - /WEB-INF/classes/mvc-context.xml
) z C8 u- `. g( U+ A/ \7 u - </param-value> * c7 e! ~# w- H9 ~) f; `3 o* X
- </init-param>
! u* H8 E3 E9 I0 W1 A+ { U - <load-on-startup>1</load-on-startup> 4 }8 g1 l: z0 E. y/ ]
- </servlet> 0 A2 [' F& c- g1 @4 l
- / U' n2 I v' U% S
- <!-- 配置DispatcherServlet所需要拦截的 url -->
" Q& A7 p, _7 F+ U - <servlet-mapping>
9 B" r* }" H/ y) t+ j" G( `5 J - <servlet-name>MVC</servlet-name> 4 A4 T+ a) P" g! m
- <url-pattern>*.do</url-pattern> - T5 f# d8 n) m
- </servlet-mapping>
@; ?' v, e+ Z0 o9 V$ U! i - 9 O' G* I8 U+ C5 U- r3 Y
- <welcome-file-list> 1 s7 S* E3 R5 I; a
- <welcome-file>index.jsp</welcome-file>
9 O, i" S9 H+ b. k O4 f9 U M - </welcome-file-list>
5 O( }+ }0 \2 z B) O - 3 B% L; x4 {; O6 I0 n3 m' N% f& I
-
3 B* ]' z5 z; u0 F - </web-app>
复制代码
6 ]' \5 D. P& f# s5 `mvc-context.xml:
1 R: f0 P0 M: E- <?xml version="1.0" encoding="UTF-8"?>1 v, t- s# W+ p- w
- <beans xmlns="http://www.springframework.org/schema/beans"
7 l2 y- Q# `/ t+ r# R - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"' T* t+ D7 C. t3 ]0 G% k
- xmlns:context="http://www.springframework.org/schema/context". ]. H! _8 A! C/ p+ O
- xsi:schemaLocation="http://www.springframework.org/schema/beans
6 \# m) u8 E" C$ D4 C- x& A - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
3 D7 W) B2 B [ h/ I# x - http://www.springframework.org/schema/context+ T2 c4 E& q4 ?1 y1 y" y1 M3 ?
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
1 Y. u' l4 R Z% r) k' T - ( M) t. ~" _/ u+ E; k8 t1 V
- <context:component-scan base-package="com.wg.*" />, @9 @! b" T, c3 t" {3 \$ \( T! s
- 6 f8 G: R0 w8 x- a+ G+ R
- <bean id="viewResolver"
/ Z5 g1 J1 ~) G0 r' Z - class="org.springframework.web.servlet.view.UrlBasedViewResolver">) q$ F2 j0 p3 a7 [9 N
- <property name="viewClass"/ @+ u, R- ?% a/ Y3 m
- value="org.springframework.web.servlet.view.JstlView" />
& `; ?$ Q2 Q( o! ^. h - <property name="prefix" value="/page/" />- v D9 b9 Z+ @4 \: A
- <property name="suffix" value=".jsp" />
/ M+ e! k# f/ z" t" M. M - </bean>: M3 Y+ L4 k S, [/ `" c: Q
- </beans>8 t+ v& D1 p/ M$ n. M" r
复制代码
+ m$ i5 [4 y2 H& }6 L1 w x; [" @5 F/ ymybatis-config.xml:
0 N* s* D0 ~' e4 F3 J- J- <?xml version="1.0" encoding="UTF-8"?>
3 o% z# _ B9 ], ` - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" : d# E* \5 {; T# t6 H
- "http://mybatis.org/dtd/mybatis-3-config.dtd">: J( @' s7 a6 O
- <configuration>0 z+ b3 S& d. Z4 }( _: ~
- <typeAliases>
0 T0 T. X3 o" ~: B a+ a4 q% X6 Q - <package name="com.wg.bean" />
1 p4 C- J# F% T% S! n0 D - </typeAliases>
% i. Y/ c4 L9 c8 s* n0 D( H' V2 } - <mappers>3 m( a9 D" w' d2 S. D
- <mapper resource="com/wg/bean/UserMapper.xml" />
$ t3 c6 i% K+ t$ ?3 e" V - </mappers>& S0 @3 E& Y; |* K* _
- </configuration>
复制代码 root-context.xml:
4 r; _2 {3 n5 v. l/ M4 N5 c- <?xml version="1.0" encoding="UTF-8"?>0 L( ~& t" y' C; j! S$ D
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" * a4 e" \2 i2 I' @
- "http://mybatis.org/dtd/mybatis-3-config.dtd">1 x+ V, i, I' U4 W
- <configuration>
4 N0 A. \/ \' W! ? - <typeAliases>
4 V0 R. I3 a3 w0 Q, b; X - <package name="com.wg.bean" />6 w% a, f' ~: x" a2 u# r+ L$ \
- </typeAliases>+ J6 c8 A( [0 e, J' k( P
- <mappers>
* q& U" F) L0 g8 C, S# M3 A6 _, w7 A - <mapper resource="com/wg/bean/UserMapper.xml" />
2 @* ?' Y/ K, h% p/ B3 R! |* [* u - </mappers>
; E- T. N! w8 s* J, H - </configuration>
复制代码 - n9 x; n* r: N% s0 V- Y
user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
; ^. F) f8 h) M- F* y - <beans xmlns="http://www.springframework.org/schema/beans"
, L# n9 L0 R) `/ A( Z0 G$ m7 f - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"8 d+ g! J! c7 h2 ?! E$ p/ `
- xmlns:context="http://www.springframework.org/schema/context"
$ O+ p r; H, { |* b1 _& ` - xsi:schemaLocation="http://www.springframework.org/schema/beans! k8 I) P( D7 [5 W/ ~) D- z
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd9 Q. z3 S1 T5 Q$ `' p
- http://www.springframework.org/schema/context
4 u! ^* i, A0 H7 r - http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
) E* m5 C0 B3 M# ]( S- N - ! W% \& H; x0 t. Z0 t! ?
- ! h, g# \9 @, Q( G& x0 |
- <!-- 用户Dao -->
3 x" C+ R# d) S - <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
7 |. G' z5 y, m3 X1 j: ^; W- T - <property name="mapperInterface" value="com.wg.dao.UserDao" /> 2 }0 x2 E' C+ k7 f: S9 J
- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> % x7 d! K% ~( h3 _2 k6 E' g W7 E( ^
- </bean>( x; \( c$ d; n% A: z5 z6 @
- ' s. l1 w2 M1 |) h
- 2 d/ y c2 l1 N5 k- E# ^+ _! O1 k
- </beans>
复制代码 ! y* x# s! B7 |! Z
. _% I* j. i3 X, s) Z; U! t, g( _. h& y' h+ ~ B
链接:springMvc整合mybatis项目源码6 o4 w% Y; h7 r) K7 }) a2 K/ |
密码:' B t0 a; d( Y' d
2 k0 l9 J; U K! r1 S- Q4 t5 ]# E
* o3 }- B, I+ ~5 E% \
$ L1 ?8 J6 M6 Z& T0 o |
|