TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
! n: e' B3 K8 \* ^$ I为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
3 v2 u6 x( _. y1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。) s* q, T3 x2 j! C; z8 p2 P
2、性能优秀,这是一个最能吸引眼球的话题。
9 b5 c. i9 _7 H6 x2 [; f; G @3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。
$ O; |0 V) t5 a1 I, }# [0 \$ Q: g( ^7 ^- l
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。* P0 U6 u- e* B6 H
( @9 X+ |; B; iSpring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。5 A& ], A: b. l4 k4 d
* I! I8 r U+ D4 ?
Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
' M/ A1 \" @* g4 y E% d" }( a) w3 y% R
Spring3 MVC的优点:2 }8 w1 n7 v: _4 y* Z# {
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
+ R8 L. T1 s/ j: h2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
; ^* U& @$ n! a$ u4 |1 c; C. `* L0 n3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。" T: ?- a, N7 Y8 U: B; M9 q& w& \9 [. x
& m+ \+ w9 Q& gStruts2的众多优点:( t9 b( s9 g6 u
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。" B0 f3 _) a7 U& A
2、其它方面略... $ Q& A+ t% i4 [/ x u+ O
==============================================================; u2 [% W* X' A
什么是mybatis# P( e0 s2 b$ ^/ ]- w" S
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
4 d( c/ ]$ Z+ ?
1 m/ }. P% [- d5 L2 Xorm工具的基本思想4 r6 l% n- ]! ?2 L
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
5 ?3 ?) R( k7 G1 p4 ~/ k7 n, B' p1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
# z2 n$ M9 ^9 U' H5 P- t# G6 f4 T& e2. 由sessionfactory 产生 session
4 s' i; L. j- B3. 在session 中完成对数据的增删改查和事务提交等.. T s1 [8 w6 Z* C( q$ d; H. [
4. 在用完之后关闭session 。" ~5 n' k4 Q! j# w9 U5 v d
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。; N6 b) d( O# [7 B; Z! M
" W# o- r. Z8 j% M6 z! \
项目说明:实现了用户登陆demo。
3 E0 d9 d; S6 k' p0 |& g# N项目配置说明:
: m( Z* D+ p5 U9 gweb.xml:; `9 y% h! p6 P0 n0 G9 [
- <?xml version="1.0" encoding="UTF-8"?> - G' R6 c& H" \4 M) @
- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
; P+ I8 W% `, [ - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" # Z2 c% s4 W$ ~- H8 |. @3 q" Q
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
$ J( G, E/ O- r2 e9 z, s - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
! ?0 |5 k* b, V7 H - 6 N+ W* A" _1 f* _: R$ Y
- <!-- 监听spring上下文容器 --> $ M! p+ O6 M0 y7 X8 G" w
- <listener> 2 Y! W6 K6 c. ?# T
- <listener-class> / ~9 s3 Z3 c: z. t, x5 t0 U- b, S" C {
- org.springframework.web.context.ContextLoaderListener : K- T$ E; J# E; d- o1 {6 T
- </listener-class>
# F2 y' \7 R* _ U* Z6 F# S; T& | - </listener> " b' w+ ^, C! `$ W7 Z- D' g
- 0 J3 q6 T" M$ X; a5 ]- G9 ~ O6 X
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 --> ' }& b, A, A: q% N: P
- <context-param>
$ f) ]+ J, e! g, e& B2 I7 `: i - <param-name>contextConfigLocation</param-name>
$ N8 ~( u: t5 v9 C3 M( m - <param-value>classpath:*-context.xml</param-value>
, n2 n; s9 p4 g - </context-param> 6 a; x* [1 d- z" ?( z% I8 f
- 0 W$ m$ a7 b; u1 A
- <!-- 配置Spring MVC DispatcherServlet --> 7 L8 a* a' I3 J6 d9 a7 g) ]% d4 t
- <servlet>
6 M$ }* r! W5 I5 v$ Z - <servlet-name>MVC</servlet-name> 3 m& j: I% W# g. A3 h
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
; m3 z8 O% @' p7 I4 Q - <!-- 初始化参数 --> & i/ p @1 ` V$ F% a5 `! p0 H# A
- <init-param> ! V. p- B! t1 T7 E! w3 I9 j0 G! |: o
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> ( s, k# x. |& {0 p% `
- <param-name>contextConfigLocation</param-name>
3 F2 m0 z9 W4 s; ~- ` l' c - <param-value> ( o6 T) z* I/ n n! j" g0 j% `8 w( E
- /WEB-INF/classes/mvc-context.xml
& c$ R- p+ J) _8 D0 } - </param-value>
. d2 V0 d0 e! z! h0 E9 Q6 ] - </init-param> 8 Y" {6 z3 @! V1 n
- <load-on-startup>1</load-on-startup> 8 E/ n7 X5 V4 h1 R+ S5 p$ K4 b
- </servlet>
1 s5 L8 G- r) O' h - ( W! B8 ~6 G% |5 s1 d8 z
- <!-- 配置DispatcherServlet所需要拦截的 url -->
) W. p7 c K4 r4 @" o - <servlet-mapping> # u0 U3 y0 e) P) I1 L
- <servlet-name>MVC</servlet-name> 7 r7 O. N3 X4 q
- <url-pattern>*.do</url-pattern>
x. B. e+ Q' ^; Y - </servlet-mapping>
, O6 B; g, ]/ y -
1 }; G" M$ _) W4 J; A7 ^ - <welcome-file-list> 7 Y9 {; @" u+ b+ f7 Z0 O0 i
- <welcome-file>index.jsp</welcome-file> [! Y. |' ~; N! H% @ }
- </welcome-file-list> 7 ^! P" O' M* I$ p4 a& l9 L
-
: B; Q) z, m$ A+ J -
0 k) q/ m3 C- ?7 i - </web-app>
复制代码 " X1 h) U* |$ Q( Z" `
mvc-context.xml:
4 [0 x& W1 t o; I% u# A- <?xml version="1.0" encoding="UTF-8"?>( X0 Q% L5 F8 l
- <beans xmlns="http://www.springframework.org/schema/beans"$ B1 g" q; h6 P4 P V$ D# G4 w
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
, K4 s8 P# {3 L& K8 E L- n3 J4 O - xmlns:context="http://www.springframework.org/schema/context"
5 d N) k! g$ C. q6 j - xsi:schemaLocation="http://www.springframework.org/schema/beans
8 W6 | H( I& V - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd0 k1 o+ t, n f
- http://www.springframework.org/schema/context6 E7 ]1 G6 L3 | }
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
, [) W/ i0 v# \( ~ Z8 ]# Z1 G
9 W2 P2 p/ f5 K4 L! z0 m3 k9 \" ^- <context:component-scan base-package="com.wg.*" />6 Q ?% ^ m0 N" ?! I. Q& q' Q% x. ~- A
- 4 X) y5 N' U" w1 O! z5 ~- L) P
- <bean id="viewResolver"0 w& L/ g0 O/ c2 G$ t& k
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">
$ S; Q2 j' ~% N" E6 B( s - <property name="viewClass", Y4 S+ [) i5 H+ S5 b
- value="org.springframework.web.servlet.view.JstlView" />
) h+ S$ a9 ^9 T: T3 j - <property name="prefix" value="/page/" />3 b: o5 l# Y' T; q: Y
- <property name="suffix" value=".jsp" />
. H' Y7 |* e+ k5 K0 E3 c* n5 J, V - </bean>
; O0 ^. I+ h, j& X - </beans># S7 k5 T L0 g1 J
复制代码 2 E* p1 ?; S1 a! I
mybatis-config.xml:
! `: y9 O* e6 {' ]1 _- <?xml version="1.0" encoding="UTF-8"?>4 \9 s0 {" p$ {7 Z( p9 o$ ?
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
6 Y7 m. B5 T4 {& D; q8 B - "http://mybatis.org/dtd/mybatis-3-config.dtd">, y, ^7 X! f. d! Y
- <configuration>
3 B/ g1 k: E% `1 d7 e - <typeAliases>) R. G# s: u& R
- <package name="com.wg.bean" />1 D" @, |: B5 W) V
- </typeAliases>( [5 T( c0 @! ?" _5 [) x1 ~2 \
- <mappers>( H7 c+ ]1 `# c. F. Z" [: h+ k4 L
- <mapper resource="com/wg/bean/UserMapper.xml" />6 z- q; U5 ^* v! G0 u- n3 f
- </mappers>: }" B/ ]6 a% g0 Y( b4 h
- </configuration>
复制代码 root-context.xml:& ~9 w+ W6 G' V0 i5 l5 m# T
- <?xml version="1.0" encoding="UTF-8"?>
! D3 r K" M: L8 ~ - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
) P4 j8 j/ Q( y; \ \ - "http://mybatis.org/dtd/mybatis-3-config.dtd">
4 Q6 {& [5 E3 z$ u$ p T: k - <configuration>, z# r% E$ p3 _
- <typeAliases>
+ d; e. r! _8 g& Z) I/ [6 ] - <package name="com.wg.bean" />2 j5 |4 y: E& f9 G0 G8 E7 ?
- </typeAliases>
; L% T! u0 ?2 S) E! o' j - <mappers>
; r7 g& d) U2 e5 l/ |$ L) h - <mapper resource="com/wg/bean/UserMapper.xml" />
' R/ t( o4 j( H+ `7 g; k( w/ q - </mappers>3 W8 V5 E3 T0 @: y
- </configuration>
复制代码
! ]" x- g/ ]. V$ muser-context.xml:- <?xml version="1.0" encoding="UTF-8"?>! R; D6 ?# t. b
- <beans xmlns="http://www.springframework.org/schema/beans"
: I3 ~6 f2 {) j$ E3 Y - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8 c! X' T# A7 G% { - xmlns:context="http://www.springframework.org/schema/context") M2 c9 h' g+ k$ N& w3 \! Z, N
- xsi:schemaLocation="http://www.springframework.org/schema/beans
% P! e. v8 m" B# F8 L% _8 M% I! B1 D - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
1 a( N0 u2 g* q/ H4 r - http://www.springframework.org/schema/context
2 @( [: ~9 T0 W, y3 j- q - http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
" G5 ^2 j# _4 q - 3 W" r# N+ J" F' c2 o
-
; Y8 q8 v" h+ H2 ^3 ^2 P: @ - <!-- 用户Dao -->
2 m. k) j( E M3 Z0 } - <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 5 H$ c9 a: N n: X7 S( L: v
- <property name="mapperInterface" value="com.wg.dao.UserDao" />
5 C. `: p" k0 U4 g - <property name="sqlSessionFactory" ref="sqlSessionFactory" /> * B. u! g0 z6 c; ^! p
- </bean>( Y/ ~ P) \7 s8 K6 S
-
1 k) b: y+ l1 T3 e
& i" Q& c# w( ^) {0 q- </beans>
复制代码 + z* }' p/ H" ?! Y+ h0 `. R L
8 {- s6 n/ w- H' g5 S$ g+ t
/ D) b$ B# T% E4 v! M, v" L链接:springMvc整合mybatis项目源码
7 s2 D& }+ ~: } 密码:3 K) H D; d6 a3 w4 ^
# c; Z8 W0 F: x( s
; c8 r# p0 E Z% I/ { q# Y2 j$ q" R# d: q
|
|