TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
3 W X5 H6 N$ b为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
, p; I0 X) P/ I, r7 e n ^( E1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。: x7 Y" R6 E S& d/ j l6 q A' i
2、性能优秀,这是一个最能吸引眼球的话题。
$ G8 u! ?: s1 ?; g4 E3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。0 y# {6 { X8 d. ~. T, I# H
, z) S! a D! g& P如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。2 s9 _9 S3 t9 `3 q9 i
% g. t8 p, L% }7 T2 p+ v
Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。8 e& C) r7 V( O, I2 {/ c8 g+ O# y
1 @6 p1 J$ D eStruts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
% r+ ~* E8 B0 ?
5 |9 Z, l7 w8 I% X& E6 iSpring3 MVC的优点:, r0 ]; X8 W' w2 K" X1 g
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
( s& L: {6 J4 A2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
' G3 }* d' O( u3 \! f! b7 W3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。
9 P. b) D) a+ D: ]6 Z6 Q$ Y& f% ^% A* B
Struts2的众多优点:+ Q$ P) q2 B8 S. O
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。
8 t, {3 f9 O8 p+ L* j9 O: a+ d2、其它方面略...
, p) w4 R* J5 p==============================================================
7 F/ y" l7 d3 _' n6 ~什么是mybatis7 p9 }# S- l) C) J1 O
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.# [4 M; Q$ ~# n( G) E& N0 L
* ^+ u7 M0 T, O6 B- [+ |7 s+ |
orm工具的基本思想
8 J& p& l& {; [1 d4 |" `- P$ a无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:' C3 _; H. @+ ^* k+ m5 l3 d
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
9 T; E8 G- e2 Z4 J* a$ D$ i2. 由sessionfactory 产生 session
8 c* O5 F( q' \& I. u+ ~4 {* X! S3. 在session 中完成对数据的增删改查和事务提交等.
. s7 G! B3 e' P+ u$ c z. y4. 在用完之后关闭session 。
5 }9 L$ o" D9 g, R5 M2 D5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。; h9 b$ t5 I5 h
$ _2 H/ c( E( l7 y) ~/ x
项目说明:实现了用户登陆demo。
2 z0 p2 a) b. j; z/ Z( Z项目配置说明:, z; ]# [* C* G9 q, Z5 L# r
web.xml:! g, C( c) }: v, R
- <?xml version="1.0" encoding="UTF-8"?>
5 ~2 Y* m! b5 g/ K# }8 Q - <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 4 b3 S0 T- o6 T# N2 d2 @
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ; q' G& K0 f: ~& a* T5 }; K6 L5 x0 W
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
% ]9 u5 q9 H6 _, {" @ - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> ) E4 G& o9 ~3 T5 m
-
2 `5 r0 n/ S! [4 G - <!-- 监听spring上下文容器 -->
* v Q& X# L# x) U+ Q - <listener>
* f" e7 G2 Q; _% r - <listener-class> - s$ D1 H5 N9 P; s( S1 d
- org.springframework.web.context.ContextLoaderListener
9 }& |1 c" S/ y) E0 ] - </listener-class>
; e& T4 W$ g8 z! N' ~" y, a* A - </listener> , u9 _- S* v3 o7 ^
- % e- `7 d% e0 p
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 --> : d1 }) w/ [0 s) T
- <context-param>
! R) S# a5 H) j0 u - <param-name>contextConfigLocation</param-name> ! S/ {/ P; C7 j c1 A
- <param-value>classpath:*-context.xml</param-value>
- Z, U2 H& _$ w - </context-param>
4 m. V7 |/ x* y7 Q - + ~7 m7 v3 q2 f y" I/ p
- <!-- 配置Spring MVC DispatcherServlet -->
: M' M& E1 `" c - <servlet>
; o7 t7 Z1 [% b - <servlet-name>MVC</servlet-name>
0 v1 n" B) Z: C - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> - @. S0 m, l7 I$ A& u
- <!-- 初始化参数 --> 4 ^, w! a. t! c' r
- <init-param>
# |' J, d* v& e; o - <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> * Q& ^" c+ `- R k- T8 e- \
- <param-name>contextConfigLocation</param-name> 0 f2 k' L- ]# z2 W0 y# w+ L
- <param-value> % G3 Z8 F2 D# w( P
- /WEB-INF/classes/mvc-context.xml 1 I, a# u4 }6 c5 L5 c9 F5 |
- </param-value>
4 Y- ?) R+ L9 }# f, G( r - </init-param>
& P' Z! Z+ h* E - <load-on-startup>1</load-on-startup> 0 l; r! C3 v7 F0 @- D) R
- </servlet> 2 U' W. f* m _/ o4 X; U. s
-
7 X4 G/ K; ~. g! l" H+ i; K$ r9 ]( B - <!-- 配置DispatcherServlet所需要拦截的 url -->
0 }& F) w& Y; } U- H/ [/ @ - <servlet-mapping> & E6 d; B) W4 E# l4 \% U4 L. g
- <servlet-name>MVC</servlet-name>
9 Y0 w# e, U) [/ G" n4 l3 A - <url-pattern>*.do</url-pattern>
9 H7 ~9 N$ [) d# i7 r0 v8 d - </servlet-mapping> % V0 r* P. _8 g# Q0 [/ J0 i+ @
-
4 q% Z ~0 K$ t# V" Z1 W2 _ - <welcome-file-list>
* ?, ]( u2 x, z- q8 ?, B3 L( T) D- M - <welcome-file>index.jsp</welcome-file> * Q# k8 ^- p; G: l) y
- </welcome-file-list> - D1 M. A5 p6 j/ V% P7 l) G
- 3 q0 k2 N" {- g4 T8 \3 F1 P
- ! w; O* }) o% v
- </web-app>
复制代码 - B- {: H0 m! Z0 p) B4 D) f+ R$ E& I
mvc-context.xml:
( H P# I( x3 q6 M- <?xml version="1.0" encoding="UTF-8"?>- q! w( v/ ?- y3 m* v" E
- <beans xmlns="http://www.springframework.org/schema/beans"
' T# U9 {1 h0 B' \! I: m& z - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"$ `2 K7 @. A9 y6 p& J. v% J8 |; F
- xmlns:context="http://www.springframework.org/schema/context"8 ^% G' j7 q5 `2 h/ G, Z/ g1 O
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- C7 o3 i" r W& I - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd7 u3 [" b' s4 F9 K, X9 s. \
- http://www.springframework.org/schema/context# j# u2 d( F( {1 @4 f/ V; P% C
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
, C/ ~- }# ?3 M' O! G5 U0 A
* {- ^) z3 s- E$ m5 N1 ?- T- <context:component-scan base-package="com.wg.*" />
0 K, {' u5 u4 v; a# P, j8 k0 E1 ]
- t z: ?2 q, M) f) J- <bean id="viewResolver"
4 g0 l: _" f' l - class="org.springframework.web.servlet.view.UrlBasedViewResolver">3 B( {, I6 k! H, j% {2 E
- <property name="viewClass"
; i" Y) X. V& q. h+ w* q2 o - value="org.springframework.web.servlet.view.JstlView" />+ L. m2 ?7 m/ ?5 _" Q0 ~
- <property name="prefix" value="/page/" />; X& |) l- f* I1 L
- <property name="suffix" value=".jsp" />( w; \0 ]8 q) X, s7 S( c
- </bean>
" j; z# Z" y6 }/ Q - </beans>& R( ?9 f1 [8 E* t' y
复制代码
) z! ]( L4 o7 ~; a0 ]( _8 ?) c/ k" Rmybatis-config.xml:
; t) w* a) O+ V2 g0 q- <?xml version="1.0" encoding="UTF-8"?>
5 P* ]) h2 R$ ?# a5 Q5 b# G - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" % X- F# z8 v$ B9 r1 s8 Q$ Y) Q" T
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- }% W) ` q1 z6 ?) { - <configuration>3 m+ ~9 U8 E' J
- <typeAliases>
; {2 @' b: F. I. R3 k) `! a# \ - <package name="com.wg.bean" />$ a0 ^# Z( X5 w4 K+ w! z! a
- </typeAliases>
, _. o5 C L+ o/ v6 U2 Y" z - <mappers>9 ^' W! b j/ B/ l, T" p
- <mapper resource="com/wg/bean/UserMapper.xml" />; A* x: |, [' {% P$ Q, f
- </mappers>
: N1 e7 e l- a O: n9 J - </configuration>
复制代码 root-context.xml:( R, [5 U' p w4 \+ Z3 J
- <?xml version="1.0" encoding="UTF-8"?>, r6 x3 F' |! Z: n4 V9 u4 m- S1 |
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
6 T4 H4 S9 Z. @& N - "http://mybatis.org/dtd/mybatis-3-config.dtd">
8 [1 W/ Z* _! u- T. e& X - <configuration>
6 Y' g4 ]1 P0 | M* P) U" v - <typeAliases>
2 W8 v' r+ {# s9 x - <package name="com.wg.bean" />
* I5 ^5 _* l* B& D9 F - </typeAliases>
2 S+ A7 P9 a* F% F/ g - <mappers>! t1 x# S1 A# Q5 d3 b
- <mapper resource="com/wg/bean/UserMapper.xml" />
4 G4 A5 u4 w7 H+ g- ~0 } - </mappers>6 N5 ?" Y2 X4 m- B3 P( a" n# g
- </configuration>
复制代码
N( [, A* T/ H6 cuser-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
; }/ A; V7 V3 A; ~ - <beans xmlns="http://www.springframework.org/schema/beans"
# G# Y& ]' a* @4 | x u - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. r3 ]# E7 }1 W; W7 h: K8 n - xmlns:context="http://www.springframework.org/schema/context"* Z: ]$ z; L- B0 G/ q
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- ]. T$ J0 o4 P }4 i; k - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
9 H9 g9 Z& B/ o" ^, e6 e - http://www.springframework.org/schema/context
* c; l( V1 M6 h/ E! y5 u - http://www.springframework.org/schema/context/spring-context-3.2.xsd" >2 r- c$ T- P( ^* w3 K6 J) \
-
& m% G o0 S B/ Z -
3 e$ j2 y# b; a& t0 g& C8 e5 m& I - <!-- 用户Dao -->) \2 v8 ?4 E% ]* h$ ?- ]
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
( W, Y; e3 ^/ A/ E% X; }! F - <property name="mapperInterface" value="com.wg.dao.UserDao" /> ; L+ j" T. K P. l
- <property name="sqlSessionFactory" ref="sqlSessionFactory" />
0 V$ P+ [$ u; u( @8 [0 g - </bean>& }) _- s3 J, O8 q: C+ w
-
+ |: r( i: |. y
# k" ]& ~' @5 x0 z- </beans>
复制代码 % Z2 K& \7 ?4 L) G) @" n' N/ V
5 Y6 i0 E, B& Q, \( }" a% K; e: ~8 Y( v/ i! r1 W
链接:springMvc整合mybatis项目源码9 i# }3 a! |5 F* M$ W) d/ z
密码:
& p8 H2 X& O F. Y% B, {$ C
/ h" j- ~! p! p, K' I( A- f4 U. H4 e0 t
! _. S$ b. R) @8 D
|
|