TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:) I& h5 q }/ A* m0 m7 [
为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
% S9 O3 C, H0 e% R0 V1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。! l2 n' c G) V1 Y
2、性能优秀,这是一个最能吸引眼球的话题。* [7 M" t8 A5 p5 v5 I3 n7 f9 r9 R C& k
3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。 o6 ^7 U6 s# f" Y N# g' x
+ e8 n' \* K5 o/ @: ?% ^5 M7 D
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。& t3 m, r/ j L% J" m8 `( P
0 ?( S/ ~1 C: M9 ^Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。3 w# y; L" F# B
: k+ y" A# C4 K: p+ Y" K6 y/ V% IStruts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。6 F. |! Z3 }( O
, u1 i& r w, S1 R/ ]' N7 h
Spring3 MVC的优点:) P+ g2 l3 |) s" h: B S2 _
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。 P8 G0 ~3 k) P/ G, ^6 R* r( ~
2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
S# a3 p, A, L/ v# ~. Y$ [+ _. f3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。; _% H& H- W0 C8 Y
: k( {5 G& N3 W/ w$ }, ?% n5 ]
Struts2的众多优点:2 J6 k/ F/ P2 p
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。
. Z8 B& r# n' l" B5 m2、其它方面略...
: q, S# T/ V# ]: N/ Z============================================================== O q2 @" F* W/ [& n3 s) [
什么是mybatis
% a0 s+ s+ l3 N4 A$ h' R5 xMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.! A! N$ h# |' Y/ l
6 I6 s& b; a2 x0 d6 z5 L* Vorm工具的基本思想; H# f, e) O/ {% l& E+ {
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:7 E# }' V; Q* p* e4 N- F- I0 R. {- O: |
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2 ^2 v! j% I( t( o) c. e$ h$ f2. 由sessionfactory 产生 session0 t& `) c$ g8 e4 L
3. 在session 中完成对数据的增删改查和事务提交等.
# y7 E1 m1 F9 d2 I1 i4. 在用完之后关闭session 。
& u* n; s7 ^! v; ]+ h+ C5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
q' [) e4 A" k& A: E7 L+ D! @
L* u4 P2 h- z# Y! P) N; _项目说明:实现了用户登陆demo。9 ~2 Y, V4 r i/ g
项目配置说明:1 m& s5 z. i2 B5 {4 b( ]4 a
web.xml:
/ I9 m3 R9 H: M" m. q% S- <?xml version="1.0" encoding="UTF-8"?>
8 j. Z1 K+ X6 T' s% {$ `4 T - <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 4 N S. g0 z" W& @3 }8 Z. C9 c1 }( E
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1 ~$ X I9 J: W a - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 0 w! E- ~" r5 V
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 3 G( ~& k+ ~4 o' `5 i( [$ I T% c
-
8 n* a' C0 j% m - <!-- 监听spring上下文容器 --> 2 ^. k# I/ y- _4 T# x; J p
- <listener>
, C, X! U7 Z5 J$ S4 v2 Z - <listener-class> 2 _& H3 q; U9 }9 N. g
- org.springframework.web.context.ContextLoaderListener
# O9 |4 `& h# w% J$ ~4 a - </listener-class> 0 D% y$ V! y0 z- X/ W% z( G+ c
- </listener>
2 @5 {% ]2 @$ w1 y - % o, w4 C9 u/ w! m
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 --> * F8 k' m2 ~% b1 L: O) a; B- X% b
- <context-param>
7 K+ z$ `$ `" o% q - <param-name>contextConfigLocation</param-name>
0 Q2 ]. @1 h6 t" H t - <param-value>classpath:*-context.xml</param-value>
( w* |, ~0 {& @( P5 |( L1 N - </context-param> " v6 L. i3 V$ K' T" u, `
-
+ R& y+ j% V* Q$ O. i6 w9 p - <!-- 配置Spring MVC DispatcherServlet --> % Z# J8 [1 W# k$ M
- <servlet>
* S. L( [) I( R$ z& l( h - <servlet-name>MVC</servlet-name> , g8 g5 u2 ~8 l, O/ t1 q1 _2 l4 z
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 6 z, `0 m; Y/ [4 P
- <!-- 初始化参数 --> 6 P5 i$ e- `6 G t' i$ U1 R' f* V8 p. I
- <init-param> , Y. E- g$ _; C
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 -->
s# S: P: Z8 f+ a - <param-name>contextConfigLocation</param-name> 0 n" p' i/ C9 w% |3 r
- <param-value>
/ R! T. f/ f6 A' w0 }% q4 e - /WEB-INF/classes/mvc-context.xml 7 ^0 q. }5 J4 ^5 i; L5 L+ |
- </param-value>
- ]% y9 i, u9 X2 l; l/ d - </init-param> - H) c, F4 a& K) d6 Y1 H5 g
- <load-on-startup>1</load-on-startup>
% C# E' \) o# O3 v* H& L9 } - </servlet>
3 v( m9 m# q+ M" v- d* @ -
7 N3 U- c) E7 }( ?. v/ e E - <!-- 配置DispatcherServlet所需要拦截的 url --> 2 ?2 ^) W3 D- e) V2 I" u
- <servlet-mapping> 0 w+ q5 ~9 Q0 c1 s3 f
- <servlet-name>MVC</servlet-name> , I/ c! y/ ?+ l( a3 h) ^' ~
- <url-pattern>*.do</url-pattern> / }( Q& Q$ W4 I0 ~6 F- j
- </servlet-mapping>
& \! m1 E$ R1 _( J; y& c( R( @) m# M -
8 t* a5 ~1 A7 j% E - <welcome-file-list> & c! K. L0 @9 N
- <welcome-file>index.jsp</welcome-file> . D, z7 Q. H+ d" c. J
- </welcome-file-list> ! q- _; J/ J3 a" I" F1 A7 C
-
' o y U9 u5 |8 X -
F$ f" T7 c# o) s! q+ z9 N - </web-app>
复制代码
% w4 I- e( x0 V# }* D7 Tmvc-context.xml:* w+ W5 P8 T5 k6 N9 E
- <?xml version="1.0" encoding="UTF-8"?>
# q _# P: _3 M1 V; }1 T - <beans xmlns="http://www.springframework.org/schema/beans"
- E2 t) a! A. X - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"7 H: a& @1 k) z a
- xmlns:context="http://www.springframework.org/schema/context") f1 j0 ?3 h- \% Z: ? t
- xsi:schemaLocation="http://www.springframework.org/schema/beans: w: m0 \( N& f9 X$ E/ x$ v! d
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd2 v( v1 E# O0 _# c
- http://www.springframework.org/schema/context
: T$ i" V0 u1 U% p1 Y - http://www.springframework.org/schema/context/spring-context-3.0.xsd"> m, [" }/ w" V4 j& e
X8 [+ Z- h1 b- <context:component-scan base-package="com.wg.*" />/ z" }7 z6 w- |- [8 e
- & c3 b2 h n7 D* N. Q
- <bean id="viewResolver"
5 E6 f6 Y2 v {/ m# G" Q! l* E/ j3 G, ` - class="org.springframework.web.servlet.view.UrlBasedViewResolver">, Y; M8 N" j$ `% v; o0 N2 H
- <property name="viewClass"' p/ o0 g b2 k) Q! T7 {1 Z& L
- value="org.springframework.web.servlet.view.JstlView" />
/ W. r, m; f2 m9 |! C: R6 {# _ - <property name="prefix" value="/page/" />
. q! P& A9 i, N+ u* A% w - <property name="suffix" value=".jsp" /># ]; p' ~& D5 D. o1 q# n
- </bean>
: L5 d+ k+ |* w9 V* ~2 O/ | - </beans>
- J) f( l9 f/ N! f
复制代码 n; R) D* b. n2 G5 A, f1 }
mybatis-config.xml:4 O' t3 G# T7 z: z. `
- <?xml version="1.0" encoding="UTF-8"?>1 t' X. ` ~7 x* t% j9 k. s
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
( O/ }5 Y7 |: @+ f, x* h- F - "http://mybatis.org/dtd/mybatis-3-config.dtd">
# p) S" Z0 Q5 }' S5 e3 A* \* t - <configuration>4 R. V& I+ }4 C) j/ O ^6 H
- <typeAliases>" S8 Y! R% r1 Z0 v' \, b1 g4 {$ s
- <package name="com.wg.bean" />
, j9 Y, {$ I6 F" }# }3 m4 M; j3 e - </typeAliases>
+ Z, N1 l& r) S1 D X - <mappers>
8 u1 U( O; Q; @% V" N7 a( J+ m - <mapper resource="com/wg/bean/UserMapper.xml" />
( v. V2 U7 H6 y- Z0 ^9 W7 _ - </mappers># {3 [* W% M8 H6 s
- </configuration>
复制代码 root-context.xml:; m% x* R& |- U; T! P. j- }' b
- <?xml version="1.0" encoding="UTF-8"?>
' N& Q! W! [# F - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
, Z5 G u, ]) \' j - "http://mybatis.org/dtd/mybatis-3-config.dtd">
5 V9 P% d( w8 i7 f/ \' B9 L - <configuration>
( r5 T Y0 N1 r- [# g6 A - <typeAliases>
" w& J b5 J1 U7 | I4 V - <package name="com.wg.bean" />
* N0 r2 a) O& a [" K - </typeAliases>
! X1 o! ?9 J, J5 U) p+ { - <mappers>, v8 p' j+ `7 r3 I7 J& z
- <mapper resource="com/wg/bean/UserMapper.xml" /> o# b0 }' o0 i w3 B4 O3 {
- </mappers>
6 c1 y* ?0 ?6 }% ?! Y) } - </configuration>
复制代码 - y/ x; X7 v9 p
user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>, O6 c4 k/ w/ p8 p9 r
- <beans xmlns="http://www.springframework.org/schema/beans"
0 Q8 C# E- s( f0 w4 m7 y - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
* H/ x! S. ^0 }; Q& |6 j+ Z2 ? - xmlns:context="http://www.springframework.org/schema/context" x5 a! b0 V: s3 }% v3 \
- xsi:schemaLocation="http://www.springframework.org/schema/beans
1 D/ g& J" z+ ?6 A0 E9 V - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd( L5 X: d4 a0 L t; p
- http://www.springframework.org/schema/context6 u2 I6 ?! ^: n% o+ v
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
8 b% K6 Q. J; u* T" O4 B3 |/ d5 ` -
# X7 \& G1 V! ^2 S; k -
: t$ ~& Q4 @( l" G5 u8 X - <!-- 用户Dao --> E1 Y; N" L2 `+ s" t) G
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> , n9 J2 U# G6 Y9 C! a0 P2 p6 s
- <property name="mapperInterface" value="com.wg.dao.UserDao" />
' I) S. }/ i' t5 _ - <property name="sqlSessionFactory" ref="sqlSessionFactory" />
. B1 f4 L4 L& ^1 O) G6 w' Y4 f- [4 | - </bean>
" d3 u; `5 p- Y* E8 H. u - . |- w* E! n# \" ^% R& Z+ b
0 |& e8 x/ \8 y! L! t, f- </beans>
复制代码
9 d" e, D- x, ?4 w% q7 o. ^
0 O! n- N$ x' ^; Z
1 [: \6 k# R. S8 V链接:springMvc整合mybatis项目源码
; ~9 Q7 |% ?" U% V 密码:1 c; _, C# g' \& T: ` |
% M R, q0 M; i, |1 v3 A6 d- c5 v1 k, |- j+ w" T+ |" ~! F) P/ P
+ Y) | i9 ?) L) U |
|