TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
5 ^+ O' r0 K9 I! k7 x+ H: n! g为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
+ C7 y# K" Q. v t1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。
! B$ H/ x+ r4 W" d+ r8 ]2、性能优秀,这是一个最能吸引眼球的话题。
6 [# l0 x- s( a p3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。( [/ c( \! \; z; ?5 H6 n% u0 D1 ^
" X: s. y% X, |( O( n9 e; e
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。4 _6 d+ f+ |# W1 C9 ]$ Y7 \
: o6 `% u) Z/ x3 h$ i" R5 }Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。) H. B* \8 i+ w/ E2 V
! o) R) A: L' y
Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
; g+ u5 S; }) ]" B3 H+ L( v* j( _2 q0 b; C+ F
Spring3 MVC的优点:
9 a, d; v( }# m# h$ ^2 m. M: S1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。6 L3 ^+ ^6 L: A; Q
2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
5 }% }! H2 V8 j* B3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。8 p+ B3 N5 r, n! P
2 x% R) ~, L( A: q& n, M" l: pStruts2的众多优点:
1 W0 a* ]7 n- i4 ^. @ D8 i1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。" ?2 x8 z+ H7 |+ ]: | A
2、其它方面略...
9 ~ m! d2 R* p% q! G2 p/ M==============================================================
) K1 W$ r7 U8 x! _什么是mybatis
; D5 Q2 [2 ?0 V* N% I6 H) rMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
- _5 j0 ^ U% N% x5 r
9 `0 ?+ b+ T; X3 E0 form工具的基本思想' N4 l% l" L3 t) n6 @$ n. J; c- F4 ?
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: _6 t& r/ d) N* ]- J! A0 ~
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.% v0 ]$ i0 r/ v1 m: T7 D
2. 由sessionfactory 产生 session
7 r' z+ O, f# s, {& X7 V3. 在session 中完成对数据的增删改查和事务提交等.
6 n8 Y8 _9 D2 K2 k { @/ E. {4. 在用完之后关闭session 。
( o6 R! X) O$ V1 P. D3 J5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
5 N/ m6 y2 @7 J- ~1 t( W* p( H; D0 v1 c- I/ `1 h) k
项目说明:实现了用户登陆demo。
; Z+ [, v9 U( I: ?项目配置说明:
5 F: q# O0 _% A2 e. D) oweb.xml:5 F( w e" y6 V0 \
- <?xml version="1.0" encoding="UTF-8"?>
2 w0 C3 C5 j. e d - <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 5 t- O$ x* E( x& o: p8 M) ~
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 j" H U6 _: ^% j+ z
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
& c7 _& j X5 a1 U. h. U - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
1 j1 F8 j+ r! I; u* u - 5 m; t4 S1 ?" ^$ J( l
- <!-- 监听spring上下文容器 -->
( ~) Z( ^) t4 r! }" i- ] - <listener>
' \# }2 `+ F; ?4 {, S - <listener-class>
' j& T$ ^7 Q/ z7 E5 R - org.springframework.web.context.ContextLoaderListener ) \, B! C, i& S8 q
- </listener-class> ) A/ \ a/ n' n1 ~1 U# }7 z
- </listener>
* A' f- G" ^" a+ t2 } -
! V% D( X% J( f% R! G% G - <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
! ]5 }! k2 h% ?. w& a - <context-param>
& k u* S; c1 G6 t - <param-name>contextConfigLocation</param-name> / D$ Y9 T+ j L0 `- k5 A+ |- z
- <param-value>classpath:*-context.xml</param-value> 7 o' y3 V/ ~" }- }( u
- </context-param>
' N+ w0 a' `: ]0 H9 ~ - ' x6 U: p, ~: P4 t; h: a N L
- <!-- 配置Spring MVC DispatcherServlet --> - Y }. }8 @# k q+ U4 {* \2 Q4 H& ~
- <servlet> 2 J4 b6 X. @9 n3 G* `& q8 b) x2 a
- <servlet-name>MVC</servlet-name> " f' Y/ ?& y0 @/ B& @7 a- Y
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
# H k9 b3 N/ m5 k% F, H, V - <!-- 初始化参数 -->
# W, n3 |* f( V) i - <init-param> 6 x/ K; O$ x% `7 {% A
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> ; y6 e3 f2 K& V3 j- Q
- <param-name>contextConfigLocation</param-name>
, m+ Y' s) A% ?$ i/ u n0 K4 L - <param-value> * W% v, \! K! r) F
- /WEB-INF/classes/mvc-context.xml
( O9 H- M l# S7 y( e( O8 L; q - </param-value> + m; Z( G) L/ y# V; `
- </init-param>
4 p* B9 U9 e: L9 F- {: k( m3 V - <load-on-startup>1</load-on-startup> 8 k1 u$ W1 M2 I
- </servlet> 6 M$ D7 @6 M7 ~& J1 }, q" q
-
& ?+ R/ `$ d2 s4 q - <!-- 配置DispatcherServlet所需要拦截的 url --> + B G; l9 ] h9 Z2 j3 X7 C
- <servlet-mapping>
, o1 F0 o' m! g# H) ], I! [ - <servlet-name>MVC</servlet-name>
`# G: C% G% o5 y+ K' ^ - <url-pattern>*.do</url-pattern> ; [& S/ P% Z+ N. B
- </servlet-mapping>
2 O: y5 o7 j9 D2 T9 a - 5 B- o1 c% k( k' S/ N
- <welcome-file-list>
( _" T! M& m, d# L$ Q - <welcome-file>index.jsp</welcome-file> ; C k) U& w* x0 }6 E: g' \- n2 x
- </welcome-file-list>
$ f- C- D) d( U& M0 E& n' P -
$ f) }, s5 H8 J7 n5 g - # u& J! z: \& c* N1 q/ C
- </web-app>
复制代码 9 O3 U3 ^8 G- S# k+ M$ O4 `
mvc-context.xml:) \4 r' c0 F" a. C( g, F
- <?xml version="1.0" encoding="UTF-8"?>
; F @ _% F5 y) \4 e - <beans xmlns="http://www.springframework.org/schema/beans") I6 v( C' U' [ B# j0 P# Y
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"- K8 V0 Y+ t0 y2 C0 _4 Q5 ]: Y* \
- xmlns:context="http://www.springframework.org/schema/context"3 {9 S2 b! C: r+ x% _9 i
- xsi:schemaLocation="http://www.springframework.org/schema/beans) T. H' J) N) h
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
8 l# D- E, k8 L U/ ^) r* J! k" _) ^ - http://www.springframework.org/schema/context+ q( A6 V8 {/ j& }' }; m* @9 {+ _
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
: w* B9 D6 `- x7 m5 n
4 l# ^6 {( ?: f% y( k- <context:component-scan base-package="com.wg.*" />- v Z- p3 }) G% D% }9 U
- + k3 M5 O9 @- }6 h) `& [
- <bean id="viewResolver"
) |% F1 Q# D" S0 T- z7 m% S - class="org.springframework.web.servlet.view.UrlBasedViewResolver">
7 J0 P T; W4 ]: r5 f, h0 Y+ l: u - <property name="viewClass"
9 Q' {# f6 v5 U2 k$ t$ H3 Z, t - value="org.springframework.web.servlet.view.JstlView" />
4 y g$ |% ]# g+ N6 `& l. n* u - <property name="prefix" value="/page/" />2 ?# e2 Y o( D3 t! q8 T9 b y
- <property name="suffix" value=".jsp" />
/ ], z" f4 k2 t9 B% Y+ M - </bean>
/ n/ y4 v9 |+ [ - </beans>6 j, @1 |2 J) z% X$ m
复制代码
K. j% R! |+ Amybatis-config.xml:
6 X& h* X! n* A; O- B3 v- <?xml version="1.0" encoding="UTF-8"?>
* t. y- Z6 \5 C" l0 a - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" * x; p. L" I. K9 J( `& M% a
- "http://mybatis.org/dtd/mybatis-3-config.dtd">; a/ c/ g. r' L2 N
- <configuration>
7 ]' B) l) e* R - <typeAliases>1 Z3 x- H2 d2 F2 V: ^6 v
- <package name="com.wg.bean" />+ H9 s: ]$ N/ o' ?/ ^
- </typeAliases>& W" | r: l( J
- <mappers>" X' d+ p7 l6 H% w B4 U5 z
- <mapper resource="com/wg/bean/UserMapper.xml" />! @1 A- B4 q6 U& r2 T
- </mappers>6 |3 F* f, U! [4 e
- </configuration>
复制代码 root-context.xml:
5 u8 R( A4 l/ }( _9 \- <?xml version="1.0" encoding="UTF-8"?>
8 ^' K' Z5 L- @% }6 w9 ?! M# y* x - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
* K; d2 Z5 q$ S+ U+ y4 {. ? - "http://mybatis.org/dtd/mybatis-3-config.dtd">
o# z1 g" z8 U% B - <configuration>) u3 d* @$ |# R2 p' e
- <typeAliases>/ d3 b' g1 \" `5 I* q. U8 {
- <package name="com.wg.bean" />
0 i! V- W6 m. i d. h - </typeAliases>
- r% s G6 h' _7 g - <mappers>
! U2 s4 N7 {0 k6 M - <mapper resource="com/wg/bean/UserMapper.xml" />
* H' _0 ?+ ~% o8 \0 j% I - </mappers>; w x* ?, Q \$ n
- </configuration>
复制代码
( v k* c6 n/ P3 i( s0 a3 ]user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
. M1 ^" `, b2 f. I. M( g: v6 y - <beans xmlns="http://www.springframework.org/schema/beans"
' X/ \& q8 [1 d( m2 Z# H8 r* M - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9 d0 c9 ~2 J& A+ A( z J) W3 Y - xmlns:context="http://www.springframework.org/schema/context"
9 |. k4 H9 c* t) v" t f& | - xsi:schemaLocation="http://www.springframework.org/schema/beans
' S3 `8 v) S: E8 K$ t3 S - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd" N6 {1 e4 k [# I, u: a* ^# D
- http://www.springframework.org/schema/context k1 ~1 h4 R5 r8 a/ l. g4 c
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >/ E6 {% J( k9 o& K' J; U! M7 M
-
1 {: A% B+ m8 t. V - # H L$ G. m& i6 K) w" S8 x
- <!-- 用户Dao -->9 [9 @7 Y" ~1 Z/ O3 _3 q( z# J
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
- W3 |2 J$ q: G# ~8 w i, o1 D# ~ - <property name="mapperInterface" value="com.wg.dao.UserDao" /> 7 }3 ?6 `% d* M5 k/ _- b2 v. ^& i
- <property name="sqlSessionFactory" ref="sqlSessionFactory" />
* X% ^! r5 _1 v6 d, e - </bean>- F7 A. k1 \. u c) z
- + b) m( W3 x+ i6 l: k& E* @% A
- H" D3 `8 M1 }9 o/ ?4 X M1 {- </beans>
复制代码
# N( o: E( C3 _7 P
# c& |" A( P5 O) K" o: c; q
$ o- h @# B1 ^" D- l* Z& t链接:springMvc整合mybatis项目源码
6 M' K; @; Y: ^( f! ?4 m3 B( K 密码:3 s# e1 w( K7 H0 y' m3 U. @: v- N
, V2 x# ~7 @6 z; Q
+ d8 y8 Z$ K) F+ e, \- p0 M2 T' n* `7 h1 q
|
|