TA的每日心情![](source/plugin/dsu_paulsign/img/emot/shuai.gif) | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
& M: z! `( K3 m3 V, {8 r+ s1 {为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:/ ^. {* T! G8 t& {( K% G3 K" S2 s
1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。3 c* o% p) I, `4 Z2 S0 o
2、性能优秀,这是一个最能吸引眼球的话题。5 w6 w, r1 `9 {, w$ }4 B
3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。4 b+ k" j8 j0 [( S
# f4 l* j1 V1 @8 J: u$ ~
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
5 [, Q1 o2 r0 w+ _
% o0 I; }/ E6 FSpring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。
! @3 Z1 x: Z# i$ \; q# O. `8 C* i" |# N Z+ z
Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
5 k7 O. Y# V( K! I& R# y0 P0 s ~/ d, C) c. x
Spring3 MVC的优点:
( d, K# h$ g4 E0 J& j( I5 o1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。, U- E" n6 x6 H) ]! N( U5 G
2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)8 {% {2 q/ u- z% Y* y
3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。; v- a7 H5 `+ `( y2 E! T$ T
" p0 a: q) E' ?0 ~3 }+ g6 V# y
Struts2的众多优点:
/ D0 D2 O: H, p0 s5 D1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。; }. p+ T- e1 T4 Y2 G
2、其它方面略... : f' L E! H2 a3 I3 i0 F
============================================================== t1 k* Q4 R3 \
什么是mybatis( S, g; \$ h6 J4 M% e. L: `2 Q! h
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.7 }0 Q1 x% n$ Z/ Z5 [0 k
Z# u2 i$ j5 N/ Morm工具的基本思想! G+ \) i3 s% h7 t4 g* Q# t' ~
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
! l: E4 K2 p4 q- a1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
- p% |3 N( W/ h0 K. X2. 由sessionfactory 产生 session
4 K; f9 c) n' p, P- r- M& q3. 在session 中完成对数据的增删改查和事务提交等.
* w# I5 c8 w' y0 e+ z# i! ~4 I4. 在用完之后关闭session 。5 Y3 ^- W. k/ k
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
* z! X. ~/ a1 D, I- `$ g5 Y% `6 j1 h# g& `; T! Q
项目说明:实现了用户登陆demo。
: ^0 D3 [* k4 e7 F5 v1 @项目配置说明:, Q+ Q& w1 ?5 \' |( d
web.xml:( t) G. E+ r1 \; A6 n. D! R) k
- <?xml version="1.0" encoding="UTF-8"?>
) Z' l9 K$ [1 k" i) i0 ?6 x - <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
Z' M. p0 R5 Y; p* i% @ - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 7 f' b1 g P: x( f( P, D
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee , |+ O7 z0 Q* p( l3 j
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
" S# J0 U" }( |' ^, {0 } -
# j& n+ t9 B. ]0 ]$ B8 Y - <!-- 监听spring上下文容器 -->
, C; t2 x- Y/ A: { - <listener>
6 @8 @& t" b: Z) W. k( [ - <listener-class> # ` j' W7 n/ t" U
- org.springframework.web.context.ContextLoaderListener " E. B* v& L0 [: _& Q# K
- </listener-class> ; o) ?( S) q1 x ?: q/ q! E
- </listener>
4 f7 c% M( d5 q; g. z# U6 N -
2 f; \8 D- ?8 i$ n - <!-- 加载spring的xml配置文件到 spring的上下文容器中 --> * P1 ?$ o: l: V$ t3 D( G
- <context-param> 0 W5 Q% r$ R! o( x1 ]2 G
- <param-name>contextConfigLocation</param-name> 8 ]1 D8 v7 ]! e' U1 L5 G% p
- <param-value>classpath:*-context.xml</param-value>
* J- p- @9 q5 X5 _! G8 D - </context-param>
1 I5 ~4 k) a5 a$ Y -
+ G9 P( Y' Y4 x) M# z$ ^# j/ F5 Y - <!-- 配置Spring MVC DispatcherServlet --> 2 Y, x4 V# }, T2 h* o8 {
- <servlet>
z6 X0 c2 F9 L) Y: ^7 d - <servlet-name>MVC</servlet-name>
0 M( d' ]3 \0 e. f) F D: I/ K - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> : T+ D' D) e5 m
- <!-- 初始化参数 -->
/ p8 M5 ?: t4 z* Q8 q- ~1 z* @ - <init-param> $ z$ ~+ G( m' F% |& H; P9 h
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 -->
d" S- F \' T6 K7 _ - <param-name>contextConfigLocation</param-name>
) D2 e+ B+ Y, l - <param-value>
: j) p/ H& M$ W - /WEB-INF/classes/mvc-context.xml & @, e/ O2 t' [9 i# @
- </param-value>
" F4 g& @& a: ^0 J0 Y: a6 Z( _ - </init-param> ( w* m" t- v( w/ U# F
- <load-on-startup>1</load-on-startup> ! ?( s. `! I; m. O7 ^$ X8 w# m0 U6 n
- </servlet>
2 O E# X+ f X1 g2 t' M -
- F; e4 M* |4 I* q* |* x7 ]2 S - <!-- 配置DispatcherServlet所需要拦截的 url -->
; b4 X6 ^/ k1 s* D) _ - <servlet-mapping> ( o1 m5 ]1 Y5 |8 J4 h- K% D# I
- <servlet-name>MVC</servlet-name>
% [0 A/ c1 J' L6 A - <url-pattern>*.do</url-pattern> 7 m0 r( b6 Z4 S9 z' U; Q
- </servlet-mapping>
) W4 A1 V6 O) K9 s( [ - C8 n6 {* {- H& _. e/ h3 u7 m
- <welcome-file-list> 4 G" o* V( m4 G! A# b/ x8 ?
- <welcome-file>index.jsp</welcome-file> ' e/ P( g1 p5 k! l6 J6 |8 i( ^1 `
- </welcome-file-list>
* _( o+ f: H2 ~1 w2 J! M% z1 m - 4 [3 \, y6 U7 W9 A. Q6 z4 e% m
-
* n8 M- d% \" N8 E0 i4 h9 E - </web-app>
复制代码 . p# N, J7 t" U5 v9 Z/ n8 U; Q
mvc-context.xml:
2 x0 [6 i$ s+ D6 J/ ?- H6 \0 c* X- ^) i- <?xml version="1.0" encoding="UTF-8"?>
: g; z; T0 V) Q; A z - <beans xmlns="http://www.springframework.org/schema/beans"0 B5 f! }6 r) ~. w# S" @- ]
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
' ?; V0 f, V+ r6 r2 L - xmlns:context="http://www.springframework.org/schema/context"2 s/ X: j$ N+ I' k5 J; Z* h
- xsi:schemaLocation="http://www.springframework.org/schema/beans
; g/ J" h8 r2 y - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ j$ o# X" P) N7 ^! x- _% ] - http://www.springframework.org/schema/context
1 I) z# l5 Y$ `' d/ Z - http://www.springframework.org/schema/context/spring-context-3.0.xsd">
- J, f4 R. P H" J% r$ K/ Z) D; l - 9 W2 c: I" P/ `/ c2 X; z2 [
- <context:component-scan base-package="com.wg.*" />
- {2 e1 s9 y1 k/ Q5 B; s3 s
, P: T% B$ l2 g# f, A" [ A6 i5 _' x" `- <bean id="viewResolver"
1 A& M. @) @9 }+ e6 Y - class="org.springframework.web.servlet.view.UrlBasedViewResolver">: S. G1 k' E- O$ m
- <property name="viewClass"
~# P/ r" c: ^- m2 u! f' z' f - value="org.springframework.web.servlet.view.JstlView" />
. X5 [# g9 H! Z8 b - <property name="prefix" value="/page/" />
2 o/ S* H5 |6 }5 e3 Y - <property name="suffix" value=".jsp" />& j. I/ [5 G0 a; ~7 ^! E, a
- </bean>, @0 b4 X5 H0 J* ?; k- p! W
- </beans>6 C8 o# t6 `4 m: h, F( w
复制代码 9 x' c% T2 k) P( S3 h
mybatis-config.xml:6 y) K( c- L$ M) e+ Y, P
- <?xml version="1.0" encoding="UTF-8"?>8 b* x# m/ v( J
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
0 z: }; d2 V2 S: S - "http://mybatis.org/dtd/mybatis-3-config.dtd">+ [' V4 I* {, E
- <configuration>
$ H4 C! m$ b& o3 Z - <typeAliases>
" a6 R( r2 }- V - <package name="com.wg.bean" />" D# b& ^2 }+ W8 z* f7 g
- </typeAliases>
2 U C0 L3 Y6 v9 X+ H2 P - <mappers>0 K( ?! p6 f3 V3 l1 ]) _
- <mapper resource="com/wg/bean/UserMapper.xml" />% [ d; L2 G! g8 d$ z$ @) V' y
- </mappers>' T9 E/ S" G6 m
- </configuration>
复制代码 root-context.xml:
+ K. Q- f* B" m* g8 {- H H- <?xml version="1.0" encoding="UTF-8"?>
0 N% _, U7 B7 A" [ - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4 T2 l+ w+ h3 r8 r& u% J/ o - "http://mybatis.org/dtd/mybatis-3-config.dtd">, u- V- J- m* q$ g, p; T; s
- <configuration>9 |; t) i2 c5 k" s
- <typeAliases>$ B# [$ \6 N% x/ m8 P6 c2 `
- <package name="com.wg.bean" />( j$ X& _! s3 ?" x3 }" r: y! n: M
- </typeAliases>
$ K6 q1 N( y4 } - <mappers>
* ^3 Y7 U2 P8 B7 w9 K3 u - <mapper resource="com/wg/bean/UserMapper.xml" />
5 ^, b+ M0 W) H - </mappers>
3 d+ v7 j6 H* {& O3 t - </configuration>
复制代码
- l& l- y: o3 E0 c. A! s) Buser-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
9 \$ U: j$ ^5 ]6 k3 f% h, o% k+ L, p( m - <beans xmlns="http://www.springframework.org/schema/beans"' \1 j# v/ w) E
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. `6 l7 b6 U w: y' B; G* s& F - xmlns:context="http://www.springframework.org/schema/context"
! |' q' C8 q1 i* u6 H4 r" ] - xsi:schemaLocation="http://www.springframework.org/schema/beans
( {# r" u( q9 n1 a2 f - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd9 [: u y8 A3 P* x
- http://www.springframework.org/schema/context
3 N8 t8 p3 T3 l @ - http://www.springframework.org/schema/context/spring-context-3.2.xsd" >( B, {6 A3 ]& G! g
- * o* ?& [/ n2 D0 k0 i# U5 C X
-
8 w8 g) A& N# U6 n9 i - <!-- 用户Dao -->" N1 G5 |5 R. S) x2 e/ ]; B6 m: Y
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> * v- U/ i; w8 V5 s* p) A
- <property name="mapperInterface" value="com.wg.dao.UserDao" />
, E5 \9 h' y8 [% C0 F - <property name="sqlSessionFactory" ref="sqlSessionFactory" />
% @& B9 u( t) A - </bean>6 R9 h d2 b8 R E
-
1 l% ^+ P7 Q5 ?1 s - & X& B2 V% W$ p
- </beans>
复制代码 8 C1 D w8 Q" L# ?! z1 K; b
( x4 u2 X L2 Y$ W- h$ L
6 a4 \8 R: B& t( Z1 A4 j* R7 g9 m
链接:springMvc整合mybatis项目源码
) O t3 B; i' u( _1 ^: L/ | 密码:! b0 o* Q0 M- G6 x% n4 W; V
, H8 f( L7 J3 O; G9 V: M3 u- ~- _/ v: j! I+ O5 a" i2 X; d+ x
$ k% ~6 D, C0 C. J* q |
|