TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
4 u, S. M7 m. G7 E, q5 f; b( l为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
t5 s v/ I% T* i1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。9 X d9 @5 I7 l; b
2、性能优秀,这是一个最能吸引眼球的话题。
/ a& x$ o3 `- M$ R% M; T3 C3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。
5 `% _% H9 L A' j" U
, [; i6 \2 [" V- `7 y如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
: T+ C1 q' H: H3 s! M: C1 D n) \3 a- @' d4 Y
Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。
& `9 F& V/ _- g4 q" X; R
: w7 s0 i6 ^" r5 {# N- eStruts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
0 `+ O. D: M! {* Q F$ W5 N# ^
- L. W1 p' p" y5 K$ m" ~8 R/ ESpring3 MVC的优点:
/ [3 b- p- m h2 _" Z; `1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
1 Y* P) K. u" l& G3 N2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
! t3 m r3 d0 @4 v/ z3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。
2 E1 b% E/ T" a, B, I" a8 e3 E6 g: v1 s
Struts2的众多优点:
, f7 I# B4 |, l4 n! |/ v, Y1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。4 G( s2 Z9 t, f- z- Z) O" O
2、其它方面略...
! Q9 Y/ e) k: h7 }2 v==============================================================6 B6 {, B2 c* s9 P, _: \% F% X" k
什么是mybatis7 z, g# d5 c4 X+ R' p! M
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
; H; S' l; `# u0 o4 Z& u9 I3 U' E% x1 Y: C
orm工具的基本思想- L$ S/ k0 ~% O; q
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:& F1 _# }/ z2 s" e2 b3 S
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.5 r/ x7 D) p. s7 P5 [ P! O" U
2. 由sessionfactory 产生 session
0 Z- c3 v1 a. D2 B2 S' u' d3. 在session 中完成对数据的增删改查和事务提交等.- ?/ a" M8 v. [. O1 i/ j q
4. 在用完之后关闭session 。1 d- L% T$ U9 D6 Q
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
. I& F" U+ s$ V& J7 e* B8 k
7 t) \1 ~: Z2 m5 G7 h: h+ j项目说明:实现了用户登陆demo。/ w" E; x% p+ S6 g# K
项目配置说明:/ F& G" X% B% [( ?" I: {* i* f) _
web.xml:( u; Z3 j* {+ x' B5 t' P) k
- <?xml version="1.0" encoding="UTF-8"?> 5 R6 _$ `9 r6 R" A: Z0 R
- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" $ p' b5 v, c" X" a3 ]2 E5 H' m
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" & O% Q; o, y/ M) W2 {- y9 F3 m D6 b/ Y
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5 L8 E h- f& h: o) v4 P9 U8 r - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 8 M% W, a' b7 ?
-
& _' i8 T, e/ Q, N# |- j* C - <!-- 监听spring上下文容器 --> * P" I# V( }3 u5 T y, e3 B% f
- <listener> 4 z2 @) n( [; t3 d/ W
- <listener-class> - w. ^/ k* i2 T" v: f2 t
- org.springframework.web.context.ContextLoaderListener
% D- K! H w! f3 O+ o) F/ a& E - </listener-class>
* z7 I* I6 i, Q+ T2 ?' J - </listener>
% R# V! K, O8 y" J0 K -
3 `! C7 _6 N- v) a - <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
+ s0 s6 ^+ H4 X3 T% v2 L, p# R - <context-param>
& U# Q- u$ z: ]4 B4 o3 t - <param-name>contextConfigLocation</param-name>
& q/ A9 y) q$ w7 h: }/ A) l2 Y - <param-value>classpath:*-context.xml</param-value> 0 C) L7 x7 O: { `4 a5 P& Y
- </context-param> i# }: s* B e! T& x' D0 e" I
-
* D0 a; ?3 K# [, ?0 |& a2 k - <!-- 配置Spring MVC DispatcherServlet -->
* O$ x! h* l0 ^1 J3 Z) \ - <servlet>
3 r5 L; a, y' q) m2 A" J - <servlet-name>MVC</servlet-name> 7 ^+ J+ o+ K0 f8 P5 b; u( X' l9 A' s' J
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> $ c5 r' r3 ]$ V" ^+ Y
- <!-- 初始化参数 --> 5 _2 p( z! w! a; t' i$ Y' f
- <init-param> ) }/ R# `4 _1 z0 e( H3 c
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 -->
. S- w( @' M) z& L/ k - <param-name>contextConfigLocation</param-name> 0 h8 l. N: u# }3 Y' X. ?
- <param-value>
' v: L9 [% } t' O% F/ g2 e - /WEB-INF/classes/mvc-context.xml 5 A! ]4 ^$ Z' i$ s+ {
- </param-value>
- P2 D* d" H. K, v - </init-param> ' S6 y5 g( |6 C! G( A- T/ G
- <load-on-startup>1</load-on-startup> ( w ^6 H. X) D6 B9 ^2 N
- </servlet> J+ C( y3 r6 u) N6 p, W. R
- 3 C2 S8 _$ [, ^) ^: P2 o
- <!-- 配置DispatcherServlet所需要拦截的 url -->
0 y+ X1 h" @! H - <servlet-mapping> 9 j9 M+ n8 N, A9 d& v4 p1 E
- <servlet-name>MVC</servlet-name> 4 K, t0 N/ a- ?. A% o
- <url-pattern>*.do</url-pattern>
: [9 C% _9 e3 O! T- i2 C# Q1 A - </servlet-mapping> 1 `; C8 \: d* ]- _
- - ]( h! C# o) P( _0 k
- <welcome-file-list>
% @ k- w8 v4 W2 r" y - <welcome-file>index.jsp</welcome-file>
7 E/ }$ } L; ^ - </welcome-file-list>
9 R- Q( u3 R6 @1 i' \! a -
! V: N: P; f; n1 s - _# P5 a1 _6 v# k# X) z1 }
- </web-app>
复制代码
1 b o! }$ H& Xmvc-context.xml:
# g& v; j; b/ A5 e- <?xml version="1.0" encoding="UTF-8"?>2 y" a& C0 K( z1 J4 ^
- <beans xmlns="http://www.springframework.org/schema/beans"( u% o' q: m" H
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"% b' r7 }; }1 R# G& Z" u, u2 y
- xmlns:context="http://www.springframework.org/schema/context"
( {5 M( o- R6 ]" P - xsi:schemaLocation="http://www.springframework.org/schema/beans1 f! ] m* a& J0 g
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd* n# ?3 R4 N; `: W( K0 ~
- http://www.springframework.org/schema/context l% r) q$ T" @+ p
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
5 Q/ u S& Z2 F9 d - 8 V, K7 N H" r0 s1 e* x
- <context:component-scan base-package="com.wg.*" />- N0 N+ r7 Z: }3 m# i* z4 v
, v& p1 h+ P4 m- }. z% Q- [- <bean id="viewResolver"2 ]: ~' v3 ^! o& K# \4 `6 a
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">
2 j# h; V3 N7 Z8 u- ^* \ - <property name="viewClass"& P- u9 P7 C" N4 b
- value="org.springframework.web.servlet.view.JstlView" />
4 _. [1 k9 m5 H! o) y( n4 ^ - <property name="prefix" value="/page/" />
( v! P2 Q K0 N- M7 O, U. y - <property name="suffix" value=".jsp" />
3 H/ I4 O( f2 D- N3 I+ e4 ]5 A - </bean>
+ ^! X- e: D4 h; h* {8 N$ j) g' z - </beans>
8 H# c' H, D& T+ ]
复制代码 9 S# U. I" u- ]- T5 \! E7 U
mybatis-config.xml:
1 p( A. F9 v- M' W6 l- L- <?xml version="1.0" encoding="UTF-8"?>% ^& ]/ M) t+ n3 m9 `9 i& C
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
9 ?7 U0 W2 u/ r. }" z3 A% ~, H' I' T - "http://mybatis.org/dtd/mybatis-3-config.dtd">
* L$ {7 y: o \! G5 Z - <configuration>
1 F ?; @- p' U# r. e( m. `4 ` - <typeAliases>
Y% W, |& E" y: D - <package name="com.wg.bean" />
1 `" v4 a2 \! C# U; G - </typeAliases>& P* I2 X5 Q" Z3 t& x
- <mappers>
8 r% e9 o$ `- c8 _ - <mapper resource="com/wg/bean/UserMapper.xml" />! |7 c! x. I$ O* e& _
- </mappers>/ x$ F+ `, J9 e5 \+ L
- </configuration>
复制代码 root-context.xml:& K, k1 b8 f7 f. d1 T
- <?xml version="1.0" encoding="UTF-8"?>3 m" ?# ?6 Z8 l* P, _
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
1 \" O2 z8 A% B4 e2 X3 x: ~* K. w2 _' E - "http://mybatis.org/dtd/mybatis-3-config.dtd">( O9 `1 w( B+ h7 ?6 k: ^
- <configuration>+ Z: t$ E! M( T" N$ i: \% o
- <typeAliases> q _" n2 v' g) o# y
- <package name="com.wg.bean" />& \! Y U: Q7 z
- </typeAliases>
' s- p5 F" _8 E/ ^& j6 N. i - <mappers>! |7 ^! l: T+ N- e# t, F/ B
- <mapper resource="com/wg/bean/UserMapper.xml" />
7 z" B, K9 M* ]* J* A - </mappers>/ P( q. ]! ~6 q! o+ M
- </configuration>
复制代码 - t6 B. f3 t) o, ~. ]
user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>. Z7 v# \) q( K( e
- <beans xmlns="http://www.springframework.org/schema/beans"
! }' Y5 V2 \1 L% L; _) L; R2 N - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; }0 Z/ i% v- T. e5 \) N$ ^
- xmlns:context="http://www.springframework.org/schema/context"# K; ? D" g0 C! R" e; T
- xsi:schemaLocation="http://www.springframework.org/schema/beans( R/ s, S+ Z& v: \5 R
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd. \, K6 s7 q0 ]8 n: y$ h7 @
- http://www.springframework.org/schema/context% E5 _6 c/ z7 V/ M: X* q0 ?
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >! I( ~: }$ B$ G: Y0 c! B
- ! N( @0 }* W& {1 O* T$ w
- $ T7 { X0 t4 G/ F
- <!-- 用户Dao -->( A: R- f( C" {9 J& S) Q- G8 Y
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 4 k* I0 v3 f" s: g0 r5 S) Q; @
- <property name="mapperInterface" value="com.wg.dao.UserDao" />
|7 S: Z2 R f- T3 t0 j - <property name="sqlSessionFactory" ref="sqlSessionFactory" /> 9 R- u/ W& h2 h$ D6 q' H5 q
- </bean>
, G# y7 n% X1 P L I: ~: d7 b6 { - + f! x* I# c) E4 E% _, A# U1 m
- 9 q, m" X4 ?% j1 t7 E
- </beans>
复制代码 L! ^. G2 h$ g& k9 p
$ C- w2 }7 F' `3 Y7 z4 i" ~. m: l6 h
6 c& ^. s @' T0 p7 M6 n# p
链接:springMvc整合mybatis项目源码
4 u4 E% r( W9 W, v2 p7 j4 o0 |. G9 p 密码:
" ], B* _2 J/ S
' {+ I4 V+ o- ^* ?: e
: D* V: i& e, j$ o- O# o
, W2 j' t3 p5 Z8 B* X5 V' } |
|