TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:0 d' t. N5 n2 ~. A$ B2 Q$ i
为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:; S! N" Y2 W8 X
1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。
$ u9 | e+ b t2 }/ \* P2、性能优秀,这是一个最能吸引眼球的话题。
" L* y7 w! B# K, Q( m( a3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。! I6 Q" S+ S$ E+ M. @
3 S. Z$ K7 ?! @% L, H# ~7 V; h- y, V如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
2 o6 Z# z$ ?' D( g& V: H& ^" p' O' X% Y6 m" a6 \' |
Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。
2 I7 n @8 _6 O7 a3 [/ @
* u9 q& ~! O0 D5 U @/ tStruts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
( j' H) u* R1 k- h: o4 ?5 d8 z! {1 R! n# V6 B% d$ S4 l% z
Spring3 MVC的优点:
, T& j9 R; l" Y& Y0 w9 a0 v7 ]1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。/ k8 k& p1 R. Y4 z+ T, R7 K
2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
. e# { ~8 K# t. s, e t0 j3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。
! @6 |1 h- i2 w& a$ [0 [: T7 n6 I! z3 N' d t( }- z/ n
Struts2的众多优点:6 D- ?. ~: S% b! T) ~/ A, }6 x
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。
6 W( d1 ^% c3 D g2、其它方面略... 7 j( J% J6 W) B9 R; j6 P
==============================================================9 d5 H9 p& n( G {1 w$ D5 R/ m
什么是mybatis
$ @) y1 j& w8 |% [: v. G( L, I) d9 J) LMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.: ^; o, }! j2 p# j0 o) ^
1 V/ S: [3 j/ Y# D' `# w: ?
orm工具的基本思想
2 @- t: ]7 x$ E: N) _ S无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
- X* |: b( C8 k6 ~3 J1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
1 G& T4 Y# P5 a$ M0 v7 o6 u2. 由sessionfactory 产生 session) G7 s: K9 ~* G0 D$ f4 K* P$ k% D
3. 在session 中完成对数据的增删改查和事务提交等.
8 p7 h/ i4 V* N/ Y& z5 R4. 在用完之后关闭session 。
. t/ S( R: h+ ]% N4 }5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。! q0 i8 {- {" ^1 y
' n/ R- d2 _: ~) J$ x7 y5 ^5 S; P项目说明:实现了用户登陆demo。
8 ]2 |' r2 y" |项目配置说明:
0 m* D0 F+ p: x: r. f/ oweb.xml:$ \8 V" T: r+ Z$ i
- <?xml version="1.0" encoding="UTF-8"?>
* ` z* `+ |' e0 u; D4 I - <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
, M$ o! n, R3 ?/ I - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. N/ c! b. i0 K0 n! A4 \ - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ' o' V& p) A3 T2 x2 q( m9 W; W
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
& C% @5 V+ T3 F& c$ C/ [ -
; q& h8 |! N$ N) v6 p8 i: ? - <!-- 监听spring上下文容器 --> ! e) L; c7 h Q! ^
- <listener> & m$ b6 _5 r% d0 k
- <listener-class>
, _3 \1 c' V I B - org.springframework.web.context.ContextLoaderListener & g: V1 F8 O0 V! }" Q
- </listener-class>
: l1 g& Y1 j- O" Z* [4 [1 W - </listener> ! D/ m6 B- D# A% r; X6 O5 C1 M
- 9 y( ?0 J" I8 N. {% z0 G: i
- <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
' y1 v7 C! H. C$ c - <context-param>
4 Z4 u2 i( J. m% O0 M8 k# ]6 U - <param-name>contextConfigLocation</param-name>
2 [3 _6 r2 d7 a* y - <param-value>classpath:*-context.xml</param-value>
0 }6 D: s6 x5 |& B/ Y6 x - </context-param> ) n4 n6 z4 H5 J0 X8 h
-
# ~1 x- q: F$ p9 X0 x8 Y! A - <!-- 配置Spring MVC DispatcherServlet -->
! |2 `+ }! B0 L9 I+ Q9 J' D - <servlet> 5 h5 s$ ?3 V% I
- <servlet-name>MVC</servlet-name>
; O3 p0 u4 }! q - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
% i' ~, w( p- Z/ G+ s( k - <!-- 初始化参数 -->
& l5 c9 I: M. _$ A) a - <init-param> 2 f {. q! K n
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> # C# ~9 T& e7 G, r1 d
- <param-name>contextConfigLocation</param-name> # h! N8 V9 y; E: l' w- `2 S" w
- <param-value> / P$ |, z! T+ h' o' p4 n
- /WEB-INF/classes/mvc-context.xml % o: _+ I5 ~; w
- </param-value>
7 b5 v2 e) _" D, |5 X - </init-param>
2 x8 T q' s* }% y5 e - <load-on-startup>1</load-on-startup> 8 z; s2 K. f3 g3 p/ @
- </servlet>
# q8 u9 A& @; Q0 x/ s1 d - ) b: {% T7 ^2 ?5 F9 F+ S# {: N% ?' O
- <!-- 配置DispatcherServlet所需要拦截的 url --> , i, w5 S8 M. \% ]. J0 ?
- <servlet-mapping> * V \5 a" a& [( i, w F2 N9 ?
- <servlet-name>MVC</servlet-name> $ h) H/ Q4 ?, U- u0 g: ^
- <url-pattern>*.do</url-pattern>
" K; m% G' F# l) F7 z7 ` - </servlet-mapping> # o" |: c4 e* I9 h6 N. s y
-
! O3 J& v. N+ J& q7 r/ R - <welcome-file-list> 6 O' r+ G# p5 ?9 l" m" g1 p+ k% H
- <welcome-file>index.jsp</welcome-file> ) Q! [7 b! ^ `/ v
- </welcome-file-list> 5 R, s. S' O* t6 {: F
- 5 e( [& A$ I0 S& H4 F, r8 d
-
" g4 f2 A0 k, Z' E - </web-app>
复制代码
' q9 \8 r) F9 e0 t9 L" @mvc-context.xml:
9 X! N. Z: {! M# _- R3 l" b/ V! I- <?xml version="1.0" encoding="UTF-8"?>! ~6 w; ~! W& u: y# e$ B
- <beans xmlns="http://www.springframework.org/schema/beans"8 z0 T0 K. @. x, z4 U
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
# R( d) @& u" W; }0 Z4 f - xmlns:context="http://www.springframework.org/schema/context"
/ U2 z) E+ i2 y5 ? - xsi:schemaLocation="http://www.springframework.org/schema/beans7 K$ f3 }* n, c3 m* e' F
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
* A6 q- T, Q- V; _$ o. i% l - http://www.springframework.org/schema/context) E, \& B% G5 o6 b) F! Q8 ^1 c* T8 z( S
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">+ B1 b, n4 a. F9 A
- 6 y$ |. _; o D$ y: X2 }1 ?
- <context:component-scan base-package="com.wg.*" />8 I3 s# _4 ^& `* x
, P4 u8 C8 V2 x5 O! {/ g- <bean id="viewResolver"0 D7 h; L5 p6 ~1 k/ A6 s
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">" e# ~1 D; |+ \$ o5 b! p' ~
- <property name="viewClass"! M; g" P% S) d! ^9 l
- value="org.springframework.web.servlet.view.JstlView" />: X2 y. Z! b8 j6 ^; a, a
- <property name="prefix" value="/page/" /># K0 F! q( E& J7 P! _
- <property name="suffix" value=".jsp" />
: V$ ~7 p4 C7 U' j - </bean>/ @6 [5 e/ e: \' r8 W
- </beans>
7 Y2 l1 A5 n3 E2 E+ o
复制代码
) l+ o1 |0 P/ H, K! P+ p hmybatis-config.xml:$ k6 y# a% L+ {3 ^& [+ Q
- <?xml version="1.0" encoding="UTF-8"?>
" D# y7 v" I n" ?: x - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- k B- r% b- _5 W- r - "http://mybatis.org/dtd/mybatis-3-config.dtd">3 }' t8 P: M! y2 G& A
- <configuration>7 A8 [ X, H) R5 x" F$ F! ?
- <typeAliases>0 } F& T5 Z/ }5 X! X8 [
- <package name="com.wg.bean" />. N. e0 ^ J, J
- </typeAliases>3 v. ?( x* s4 H F
- <mappers>$ U' m. _6 `1 e* T$ \; D
- <mapper resource="com/wg/bean/UserMapper.xml" /># V2 ?& F, T& L* |7 F1 ^& q3 [
- </mappers>
1 z# U. d4 j* T3 c4 \/ ~ - </configuration>
复制代码 root-context.xml:1 X0 [* a9 `+ X( {! i
- <?xml version="1.0" encoding="UTF-8"?>
/ P- A" {! D! n1 S" G) X9 r( T8 l( d - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+ Y0 J- f# j: L - "http://mybatis.org/dtd/mybatis-3-config.dtd">4 P1 u: G+ E5 N" z) t. i/ ^
- <configuration>
& @1 ]! [/ A# T* U6 c- S: M! x - <typeAliases>
. Z1 b- f- ?* c - <package name="com.wg.bean" />
! Q4 z7 s3 E; v) _2 M' e - </typeAliases>* ~. J @2 |+ H, W1 O
- <mappers>
- V3 i. K- @7 r6 v1 X; b- ~ - <mapper resource="com/wg/bean/UserMapper.xml" />& e5 k# n* Q. p5 M% D/ y
- </mappers>7 a& X" `4 u; ~6 R W& _4 C
- </configuration>
复制代码 / v$ s1 N6 w1 b+ j! P$ t7 T
user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
% o5 F' ~, o& c5 ?& h - <beans xmlns="http://www.springframework.org/schema/beans"
, s5 @ {: L2 W1 a- T5 x& ?3 V+ u - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"" @3 k8 t1 X; M+ A% m5 R, w k! k
- xmlns:context="http://www.springframework.org/schema/context"
# ?* V4 z& S; y; c - xsi:schemaLocation="http://www.springframework.org/schema/beans# ?- Y4 u5 t8 u8 n; c
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd' H- ]% i- Y; R/ P- H) j! `
- http://www.springframework.org/schema/context$ L" i! o0 j. n5 `% n5 ~
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
# b0 h+ A* \! ?/ [+ D: { - ' z/ ]( b- H# n% F
- ' p- C2 K x2 A
- <!-- 用户Dao -->/ |; ]( \5 C L5 A
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 9 s {: L7 L# C) \$ _0 F
- <property name="mapperInterface" value="com.wg.dao.UserDao" /> * i7 j& A! C# C( x/ R% \8 {1 M
- <property name="sqlSessionFactory" ref="sqlSessionFactory" />
' K7 X4 G6 ^4 b2 `7 c+ g7 E - </bean>( w* S2 N6 G) X
- 6 V2 e( |. A T6 c1 p6 u& e
: t, ]6 Q8 I" I$ W( Z- </beans>
复制代码 + e' ?' n+ `% o3 U( O, \
5 L1 Y- E; |' N- ~3 K3 T6 I
' X" J. C3 h+ s9 j7 H
链接:springMvc整合mybatis项目源码6 C: f: f! d4 w: v
密码:
* B6 w0 y; J1 r4 l, `
( u2 R. n7 z6 X
9 |+ g: `. |+ ^& w7 d8 ^- J
: |5 k5 A# ]5 ^1 m' r' C |
|