TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
+ W& K" m# c) L, v为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
' E0 L7 @' d/ N2 I1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。
3 i8 D6 b. P2 T: k3 y2 E% K, r$ f2、性能优秀,这是一个最能吸引眼球的话题。
2 [* Y/ U9 L' v6 \4 a3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。8 x% O) |7 H( L+ w
$ H* ?4 n$ T s6 c6 H% U
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
1 K- ]" c3 _% _* V
* g: W2 f% h4 c+ S6 T# qSpring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。' {1 ]+ A1 N Y# {4 x. G
6 M% h" L0 ^5 Q! _Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。. C' B& {/ T8 y; l
" |+ R2 \8 ~3 [! p
Spring3 MVC的优点:
0 M9 |/ ]( h) u k$ ?9 y: u5 b2 y1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
1 W) F& K3 H9 p+ @2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
* G: X9 M5 g2 G8 a6 D% |2 B3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。
. C. k; j2 w$ f) l m! a1 o0 Z9 C, f, t2 K4 e( Q5 q
Struts2的众多优点:4 M% @- R. V6 h- {" B& T3 L
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。
# a! ?# d0 H+ |5 D# u1 _2、其它方面略...
, k: z; m" G! ]==============================================================! ?1 N! T- I3 e* {
什么是mybatis
2 H& H# O7 r- M6 {0 u# a) n+ |+ \" `MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
* g7 f0 ~. p5 B6 g* F' {1 W4 T* b$ M) R2 C4 |2 U/ `% s
orm工具的基本思想7 |( M0 e" ^! h. a
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:) v- I" N# H, q. M: h6 X! x
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.3 b' D2 k1 C- y$ y- q
2. 由sessionfactory 产生 session
5 R7 H8 Z6 p; D K3. 在session 中完成对数据的增删改查和事务提交等.
e" m9 _8 G' z" D! z0 I* F, U4. 在用完之后关闭session 。1 l0 b5 ^7 w3 F) d# a
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
* ?* N9 g2 o7 |8 ?
7 V" J. W! z8 w% a# T, F3 }项目说明:实现了用户登陆demo。
# x! S, e, j# J% h U* l项目配置说明:
& ?% ?- q3 a( q9 Q' g7 d& F7 xweb.xml:5 r N3 H' ~6 D$ |/ X
- <?xml version="1.0" encoding="UTF-8"?> 6 m( O2 y7 R7 i4 `7 D3 Y' Z
- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" & {5 a' d7 @" G9 u: b
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ) T3 b; y; | s+ n$ A' b) |
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
7 N8 J: K# w( g5 W5 ?/ j( z5 K - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> . p" N! l; e6 `5 L& z
-
- ?2 t3 E, v6 ~/ Y' G& r! l - <!-- 监听spring上下文容器 -->
# A" x, d- N8 n e - <listener>
8 `* k; ?/ R- `3 R& Z( j - <listener-class>
0 K. \/ e. o3 E" d4 Z- E - org.springframework.web.context.ContextLoaderListener 8 u2 J& b" @3 }- `# s$ ~
- </listener-class>
/ s! j- l- R# w! {; Q - </listener>
( n+ \; |; X" A. i1 a0 F. G1 V - $ \: ?7 G) o* J5 r4 \6 y7 i% C( H7 t
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 --> # \8 i3 e' t! a2 E- G/ B+ W
- <context-param>
, [ l% F9 K% Y/ R/ A2 t - <param-name>contextConfigLocation</param-name>
; e$ `: y$ i3 |: q8 D - <param-value>classpath:*-context.xml</param-value>
7 L/ q$ D, x/ X& ?; ~8 W) v' m5 X - </context-param>
) \2 v* f8 r5 P% {; `/ v$ D$ j -
' y4 j2 R6 G5 c& ^8 J; J& {4 B - <!-- 配置Spring MVC DispatcherServlet --> 1 U. s F+ M" H& Z
- <servlet>
0 A! E6 D) i i& U0 M+ _6 V - <servlet-name>MVC</servlet-name> $ x; o" d; C0 ?2 Y }6 E, {
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
3 F; X/ d3 l( u: \( ~ - <!-- 初始化参数 -->
- L Y4 U( Q* o8 s3 m - <init-param>
6 M" {# V0 Y3 e$ d2 ^ - <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> . r5 s/ w, n( C3 {$ r
- <param-name>contextConfigLocation</param-name>
7 L: {6 `. w3 c6 B; L - <param-value>
( Y9 ~+ M, R W; Z& u9 `* d9 ]' O - /WEB-INF/classes/mvc-context.xml ( l: E; f9 Z1 L9 R5 F! U
- </param-value>
% m2 |% O* o! Z) s - </init-param> ! C3 @5 n* N. V, G0 R
- <load-on-startup>1</load-on-startup>
6 ~' f# _# a( b" r" K - </servlet> 6 e. [1 _9 G1 l" a3 G
-
2 n. ~$ Y& ?' ?0 O - <!-- 配置DispatcherServlet所需要拦截的 url -->
0 `2 ]) {$ Y+ W( T2 q - <servlet-mapping>
* V9 r" `( ^( f: s; W H/ ` - <servlet-name>MVC</servlet-name>
: F3 ]! c3 A ?4 U - <url-pattern>*.do</url-pattern> ( e4 i8 f+ Y1 Z! Z
- </servlet-mapping>
3 F5 D* l4 o, A+ c% _1 Y - 2 R% t# b+ f6 O1 X
- <welcome-file-list> ( y4 `# L) Q F! J4 ?3 R' S" \
- <welcome-file>index.jsp</welcome-file> 4 O$ b& O4 z3 G5 S! X# w/ H4 |# K
- </welcome-file-list> 7 R5 Q) c" y9 r x8 `, ^8 \
- . A& m' W' |; _ Y6 U
- ; x; d' {$ C# ?+ d$ D
- </web-app>
复制代码 : G" B5 u( Q) b0 w) {% h; X8 F
mvc-context.xml:" z6 V* y5 ^6 e! e
- <?xml version="1.0" encoding="UTF-8"?>
) _5 |, m2 B& o* B" T - <beans xmlns="http://www.springframework.org/schema/beans"
) ? ?8 _2 o8 j - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
7 g/ _' E, `4 g* x' h - xmlns:context="http://www.springframework.org/schema/context"- B% F$ F6 f ~
- xsi:schemaLocation="http://www.springframework.org/schema/beans
) f/ G5 h* O& Z! r- z5 t - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
8 d5 O$ Y2 R, s9 {( H - http://www.springframework.org/schema/context
6 y7 p& n. u m v- h( H( s+ g+ W0 I$ F - http://www.springframework.org/schema/context/spring-context-3.0.xsd">: C# s; Y% Y* M
) ~- ]! s$ O& {' q- <context:component-scan base-package="com.wg.*" />2 _! E- x( C2 D2 }8 @% `
f% H, H/ L% V+ f% ~' l- <bean id="viewResolver"" z' v1 F5 {+ s( H% f
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">
) w9 W \& i$ t9 O2 d' o - <property name="viewClass"6 T; o j# M! e2 ?& I. Y9 z- X
- value="org.springframework.web.servlet.view.JstlView" />- N t# V& X8 P/ P7 h' `: L
- <property name="prefix" value="/page/" />
% \$ u' y7 ]. A3 }1 n: V7 R - <property name="suffix" value=".jsp" />
" J, K: }" U( Y1 t* n1 k K - </bean>
1 Y* N6 A5 E! @+ x, o; O - </beans>
( y$ {: g9 [" i4 ]: |5 Z
复制代码 3 T% a4 d3 w& P) b- Y2 J5 | t
mybatis-config.xml:
# c9 B) e# i$ \" ]/ x6 ^/ ?- <?xml version="1.0" encoding="UTF-8"?>
/ W p0 [$ o: W/ x# ~+ H9 i" C - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
# a2 G% W9 d" j7 x - "http://mybatis.org/dtd/mybatis-3-config.dtd">! H* c3 s1 G' g
- <configuration>
: f3 u9 ]* G1 Y) { b# m - <typeAliases>
9 m- \1 e: I* f/ Q2 ~ - <package name="com.wg.bean" />
2 ^- K3 @3 z! A% O; D O5 N6 @- Z6 B - </typeAliases>7 ~! ] G0 ~" J* a4 N
- <mappers>" h. N( r1 J. F# Y7 S9 n3 A! [
- <mapper resource="com/wg/bean/UserMapper.xml" />% s/ I$ _/ [/ h& [
- </mappers>
) d9 m) [9 F* Q/ P5 | - </configuration>
复制代码 root-context.xml:
* R3 i8 E, E2 J7 v/ N& C- <?xml version="1.0" encoding="UTF-8"?>/ o4 \9 T) s3 q" P
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
% G; a& {8 b) f - "http://mybatis.org/dtd/mybatis-3-config.dtd">
' V9 W# y* s* Y- e8 j - <configuration>
4 r: {5 b1 x" k" t: W" x, | - <typeAliases>. _. z4 n# B( |. u; j4 w
- <package name="com.wg.bean" />
4 w/ ~( ]& }. L - </typeAliases>, C/ E+ F( ?, n* ]4 D8 D/ X
- <mappers>9 `; M d! a: V* V# Q1 p
- <mapper resource="com/wg/bean/UserMapper.xml" />
* [& s0 t; q" Y2 [3 n - </mappers>" q, |; j; N' U: A: u6 J9 O1 c
- </configuration>
复制代码
! Q8 y( c. Q( w( Muser-context.xml:- <?xml version="1.0" encoding="UTF-8"?>5 a' m% \7 b2 W; L$ H. F( U
- <beans xmlns="http://www.springframework.org/schema/beans"
: L7 F, b4 l$ w! E - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"+ m' e( t6 S4 H. h
- xmlns:context="http://www.springframework.org/schema/context"& Z* x* x8 [4 x5 V
- xsi:schemaLocation="http://www.springframework.org/schema/beans
" ]) W. `, K9 i# q% ~. | - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
% y# ~2 b) c; w/ g - http://www.springframework.org/schema/context3 t9 D* y6 L; H8 X+ \( S
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
+ u3 S; V2 `* y0 B5 w' R -
2 y5 D2 x1 n$ r, P; _6 ] -
3 ~$ \4 l1 l. d; c - <!-- 用户Dao -->2 }" W' E- [7 B% _& Y5 Q% n, S; f
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
1 D! J- s% w6 k - <property name="mapperInterface" value="com.wg.dao.UserDao" />
; C$ U3 N, G ^1 Y+ Q: O1 O. Q6 `8 } - <property name="sqlSessionFactory" ref="sqlSessionFactory" />
' r( g( B+ z- X: p2 a - </bean>
4 U) [! G7 K" Q# G. y" v -
+ T; A6 G& X. y. |2 w, x: U) S6 }
! I$ D* z5 G& ]; ?- </beans>
复制代码 / j0 }2 T/ q+ v5 v( m
0 N0 \3 o. T' q; k7 M c4 w& h, _' ^; t5 M
链接:springMvc整合mybatis项目源码: X0 d: n" k& ~" x. J5 M& o
密码:
j5 w, V- D) [' ~" G s4 A' U. b
! D s) R& ?. [+ T) u$ c7 y
2 `- E0 h; a" G0 ]. j0 k
|
|