TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:; {9 e9 n! V% C9 A4 z9 D% g }
为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
6 T- G3 o: Z) H/ x' o1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。
0 y! t/ j1 H# p/ `4 L6 h2、性能优秀,这是一个最能吸引眼球的话题。5 E8 {& l& h; w* I# s+ F
3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。. X9 Z, A3 x( ] B/ ?3 k8 Y8 p
8 d: k4 R3 M6 X" A4 R6 K如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
: X' `: c7 X) p! b; b0 d% ~: X# g5 F" ?/ q, T
Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。/ X A3 ~% G: ~; w* ~) Z) |- @
$ s) b, Y: }- w0 b% L9 [( M7 i* ?6 r
Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。7 j5 U) [( H; V" ]6 q+ w
/ d0 u) o# T. I& K1 K+ BSpring3 MVC的优点:
s( k9 c' X: d+ \" u/ A7 G, @1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
: s1 _% ^5 g! e3 }) J7 d; B) `& f2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)1 _6 ]( Y. h L7 b+ f$ J9 a/ ^
3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。- g' H8 H& Y/ B# d; X. M
9 t3 M& T+ L6 L' s1 iStruts2的众多优点:3 }! W! N: b, P: S3 \+ I
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。+ ^. m* M$ O; l7 Y, i3 L' @
2、其它方面略... 3 H6 R6 ^1 @3 q9 G% e/ E2 x
==============================================================
. A- x3 ?5 H5 Q% c' E0 J什么是mybatis( L) ?2 X3 M# B3 ^, ^ P
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
' A5 M& d+ e( Y2 S) t$ V. ?
7 Q9 ^2 M) @6 ~9 ?orm工具的基本思想
! f) j+ B9 L) C6 r( t/ V无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
; C* y! m9 g0 i3 O6 z* H1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.. U. t; q5 U( p; g
2. 由sessionfactory 产生 session
( ~: u4 V! F" s5 w* K3. 在session 中完成对数据的增删改查和事务提交等.1 ^ s/ |5 _* I0 G" ?& W, V
4. 在用完之后关闭session 。9 J4 m- @8 a1 e0 `" e( f
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
+ F: a! z, a# m7 ^& g3 D# a" L; y, S, M. G. x
项目说明:实现了用户登陆demo。
$ T& C6 ` h9 q3 ?% s3 X1 P项目配置说明:1 M) [; ~0 G* W
web.xml:, j+ y5 v4 j7 A* H9 E* O# A
- <?xml version="1.0" encoding="UTF-8"?> 7 ?$ _% @3 P! A! Z0 l7 {2 I
- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
* j* D9 ]5 O: ?8 B* W - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 b6 W' {2 w: E! H1 Q/ F - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee " Y4 Q4 u& v; R
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 6 W5 {4 e+ K9 w% z5 \5 K
- - }& `# u: Q, I9 L7 T2 d8 R( E4 [1 C U
- <!-- 监听spring上下文容器 -->
5 f) j$ T& |% n- X - <listener> + D8 k0 u* l# \" [+ K: {7 C) f
- <listener-class> ; Y K5 w8 ~/ ~- H' h9 K% C
- org.springframework.web.context.ContextLoaderListener
+ o- N0 ~. j, F! ^ - </listener-class> 3 _# E5 a+ u: v
- </listener>
7 V4 R: @5 e3 [+ @% Y0 Q" J -
9 N w# ]' Z$ j' d. Y& f - <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
" Q8 I) e! N1 f! K# o) o) ]" H- b - <context-param>
; d, o3 \% b" d4 e% K - <param-name>contextConfigLocation</param-name>
; d5 R) j, N9 _1 P0 V# z, o# z - <param-value>classpath:*-context.xml</param-value>
4 W6 H7 K- O# p6 ]# \4 U - </context-param>
4 I2 D1 E6 U% w# s1 F7 A! s3 x$ I - ) r: w. ?, u9 k1 i# a' `
- <!-- 配置Spring MVC DispatcherServlet -->
% A2 u% R9 l% n" k7 ]" i - <servlet>
: _9 ^2 K1 E8 a' ? - <servlet-name>MVC</servlet-name>
9 }& W' {/ [1 {6 }$ o - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> ' c' v8 g3 l- p/ ]$ a
- <!-- 初始化参数 --> * G6 j2 d; T. Q1 w" S; H
- <init-param>
/ ~; S6 K" b, d; ~, t- e. f - <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> 4 M; m( {; I# o% M. A9 s' R5 y
- <param-name>contextConfigLocation</param-name> i' |9 }1 `/ h6 f, D' s' a
- <param-value> * M1 r8 j5 W" f) E( Z) x( B
- /WEB-INF/classes/mvc-context.xml ' l B# L3 v! }( g
- </param-value>
& m4 M0 M& ]; O0 ~% V - </init-param>
# \* W: l! }* j- p$ g' n* P- P - <load-on-startup>1</load-on-startup>
! M& t9 S1 |) d1 p1 |( k9 h - </servlet>
4 P+ U+ k5 h2 d; Z; z - % X9 e1 U4 U& n% _8 u, I
- <!-- 配置DispatcherServlet所需要拦截的 url --> . ?$ F, I' {. L1 x) n
- <servlet-mapping> # [& N% ^' t0 s C
- <servlet-name>MVC</servlet-name>
3 j5 ?; P( l, F( G - <url-pattern>*.do</url-pattern>
% Z) H' p$ K$ V) k$ V2 S# M - </servlet-mapping>
6 m ~5 E# N: O6 M1 f - 9 ?+ }! g2 ?# @* U& D% Q7 P
- <welcome-file-list> , ]! i' ~# {, J" ~8 K4 n
- <welcome-file>index.jsp</welcome-file> * M7 w( x0 O4 }! H1 f; S
- </welcome-file-list>
( p0 q3 I0 p3 ~# F# ^4 r - * W9 Y) U7 ~1 X9 u8 I% u/ E
- 9 W ]: a: @6 |* D& I" P8 u6 p
- </web-app>
复制代码 6 G9 [( P `# p4 A
mvc-context.xml:! i2 c2 H. j8 l" X4 s
- <?xml version="1.0" encoding="UTF-8"?>
. F5 \' N1 l7 M8 M* g* D* \7 Y% o1 l! ` - <beans xmlns="http://www.springframework.org/schema/beans"4 H8 ^6 Y4 p1 }5 F4 x8 [
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"6 r( N4 M" J8 e+ u
- xmlns:context="http://www.springframework.org/schema/context"
' b" J, U6 F8 ~/ i* w X - xsi:schemaLocation="http://www.springframework.org/schema/beans# k6 F% G( _/ A: v4 N
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
9 j n. _' [1 K( O" h4 n - http://www.springframework.org/schema/context
$ @5 G+ t. T7 o; Z( } - http://www.springframework.org/schema/context/spring-context-3.0.xsd">
( h4 x. w- t+ e, K# z8 p4 F
$ y# E- G- P3 | x' @9 O( \- <context:component-scan base-package="com.wg.*" />% J# f8 v" k( A$ ?# l. N E
8 G3 y0 Y( P4 g) ?; A, G3 v- <bean id="viewResolver"2 q3 I6 n9 b; M: I
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">8 D5 G9 V* V& n/ k. p `* r
- <property name="viewClass"
% D r! |! y3 l' u - value="org.springframework.web.servlet.view.JstlView" />
, m+ n- J" ?: L/ m - <property name="prefix" value="/page/" />
% Y$ I0 q6 @+ g; `& o - <property name="suffix" value=".jsp" />7 B$ o& e8 I2 L- }" A
- </bean>$ T8 W/ B: w' _8 |9 i
- </beans>
$ o! ~5 N4 p0 y1 j
复制代码
) J% I7 a( e5 S6 l0 y- W% v, [mybatis-config.xml:/ N9 S6 z/ z3 i A. A7 H
- <?xml version="1.0" encoding="UTF-8"?>
~( f) q& [" y. K) X - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ) @+ o0 p; Y- o7 ?- n7 A8 c+ M: j
- "http://mybatis.org/dtd/mybatis-3-config.dtd">% S8 c; N& u) K q! v/ ?! r
- <configuration>& I! q' `& P( C9 s5 ?
- <typeAliases>% v7 ^) B, ^$ |5 K/ K
- <package name="com.wg.bean" />4 z9 a4 U& W- ?1 Q7 _
- </typeAliases>6 f% p; ~# N( t' E$ f- l
- <mappers>
. K6 l/ @( R0 o" e0 w - <mapper resource="com/wg/bean/UserMapper.xml" />5 e }* X7 e, B( N
- </mappers>0 J" Q1 u% D. Z% m- y) E @+ G
- </configuration>
复制代码 root-context.xml:2 e. i, v# m2 K! Z4 k
- <?xml version="1.0" encoding="UTF-8"?>. B! c/ i/ _- v& [1 B! j" {
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" , x# U3 x) U# J3 n& y
- "http://mybatis.org/dtd/mybatis-3-config.dtd">! Z1 L2 t5 ]8 W
- <configuration>
( V4 E4 k6 V8 C/ T' Z. T1 J6 J! L2 o - <typeAliases>+ C5 j3 ?5 ?: ?+ Q3 i7 |8 _
- <package name="com.wg.bean" />4 c, l9 @8 a7 q
- </typeAliases>
' J2 A8 T- H2 Y# q - <mappers>$ G& j' q1 u1 ?& {6 I6 @- m
- <mapper resource="com/wg/bean/UserMapper.xml" />
Y- a6 i4 o, o - </mappers>; y; o3 o* i4 o
- </configuration>
复制代码 % h' A% U7 t: j2 r
user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
) T. O" L6 _# Y! t6 O) y4 @ - <beans xmlns="http://www.springframework.org/schema/beans"
( g1 E# H& p3 Q6 s' o' o5 y( S% [ - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"+ J C5 S$ c& J$ Y3 u* A) |7 m
- xmlns:context="http://www.springframework.org/schema/context"7 L: r0 h0 O- ^- N+ M
- xsi:schemaLocation="http://www.springframework.org/schema/beans( j2 E. _; _" {/ \6 H
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
( U" |: f, I* P. f - http://www.springframework.org/schema/context" K' x; x# [0 m1 H
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
% N% I' h8 [& \2 t+ ^* {' S& x -
8 K0 h8 |* ?' S5 e, U5 l [7 m. G - / a. u) m8 ` r" E: C: u- t% S
- <!-- 用户Dao -->
( r7 A. T/ v7 c4 b5 _ - <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
, }2 F( Y, _2 |+ S0 Q2 v. S+ V% u - <property name="mapperInterface" value="com.wg.dao.UserDao" />
, f2 O6 b1 S; }2 }# o+ L - <property name="sqlSessionFactory" ref="sqlSessionFactory" /> . D+ b1 h" X6 q" L& E% f
- </bean>' Q6 b, T) O2 x0 |' W
-
# V$ B9 H7 ^$ w7 W
; `6 z% v( F. ]3 M% k- </beans>
复制代码
# o* F6 P" S3 n
" ~, `1 V% Y, x7 N4 F4 m
1 M, a7 u+ Z x$ J% N/ j) r链接:springMvc整合mybatis项目源码. z% i K: `! p$ d( @
密码:
5 q5 M( E+ J- ^& N, j& y' _/ C7 C8 p- K2 y
7 w0 t% Q/ V7 m: ]9 F4 E- s Q
, M0 O' o! P u8 G* ^ |
|