TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:4 s+ u) Z. B! f& w' `4 ^# I: ]4 I
为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:) A* V% M3 E- p! j% r
1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。- }2 w% m& @; l! N3 n8 P& l$ k( u
2、性能优秀,这是一个最能吸引眼球的话题。
# V; x7 X& E& m: m+ f& V6 n3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。1 o& i9 d! N( z8 b; D
4 Q2 k2 J: I6 v
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。
# n* c$ f* a3 A. x; P
' x2 c2 L# d" z& LSpring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。$ r7 X+ a# U' X4 X2 b/ K
0 e; i- B- ? ?) H
Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。
, c( _2 `& D2 _; K# l$ l! ]# y+ m: `& b! E: [; q
Spring3 MVC的优点:2 f9 h4 t0 r3 t# @
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
" b! n8 B8 ]" g! Q3 s1 L5 A2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)* j- q. i, G: \- L! g' R
3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。6 s' u& x+ t' c- y' @" o! t
% Z0 w. @7 c8 @Struts2的众多优点:% L: [) ]/ k( s) n' o- W
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。: Y1 A% O8 x) Y* M( O) `) o: ]
2、其它方面略...
* o# K& U! L7 o( p+ h==============================================================
- Q, K' c+ `& v* L- z' E什么是mybatis
0 G- X* v6 e2 b/ i' |- o, }MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.2 _0 y$ B: Y! i% `" f! g
+ T9 h c2 e% f9 Z' j( T8 porm工具的基本思想7 ?7 [$ t+ H& ?! U9 Y
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
- o9 a4 Q* D1 [6 h" Y" ]1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.+ \' R) t6 ]7 }: x
2. 由sessionfactory 产生 session$ j$ w q) I9 H
3. 在session 中完成对数据的增删改查和事务提交等.
' U$ u0 q- g6 v2 B7 z4. 在用完之后关闭session 。5 ~$ b7 H9 _' u! c7 m" y) \
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
/ k! q# v" L$ e# a+ m- z4 f$ G# U; C {
项目说明:实现了用户登陆demo。
' ?% z9 o0 S$ [, ~项目配置说明:+ r1 i; k6 d$ y Y' m# e2 P, @& i
web.xml:% Q; p( P5 ]& c$ m
- <?xml version="1.0" encoding="UTF-8"?> & ?1 V7 r" p2 G! ]5 ?# Z* \
- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" ! ?+ e$ O3 E Q- W8 |
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" # v( l9 [$ M: O" E8 j+ f
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
, I: o P* }* b4 }5 O) y& K. Y - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> : N f! A) K" Z8 U1 ^& N
- " q3 L5 h& Z0 A* k! J/ M, k, t$ |
- <!-- 监听spring上下文容器 -->
$ b7 Q5 Q2 U& Z0 r7 ` - <listener>
% R' o- z* o% }/ f/ Z/ a/ ^4 F - <listener-class>
0 }) m( Y! v' j" z/ ^; H& q2 \" T - org.springframework.web.context.ContextLoaderListener / {. O3 p8 s. r& E- j
- </listener-class>
6 z. y+ H: w( w ] - </listener> + i& Y- z r: q' N: x0 s
-
, W7 |4 h% A% l - <!-- 加载spring的xml配置文件到 spring的上下文容器中 --> ! N& h* B, a) G- |6 d/ o
- <context-param>
2 J. q: n+ Z8 o1 Z - <param-name>contextConfigLocation</param-name>
7 Q" D6 \( R& ~ s- X - <param-value>classpath:*-context.xml</param-value>
w8 v: t8 `* _2 O1 { - </context-param>
$ s* V- V" g& e( W5 s8 J- z2 f - * ]& @' E# E6 f2 R% H
- <!-- 配置Spring MVC DispatcherServlet --> K* a7 X2 r9 @: N( f1 c
- <servlet> $ }9 H3 h5 `, C! `% d& F
- <servlet-name>MVC</servlet-name> 0 b- ?8 g2 z! n2 L8 L4 M
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
9 q9 C! ^- R$ V- R; ^# I% G - <!-- 初始化参数 -->
H! @2 A1 |! S R/ `8 [( l7 l7 V# t - <init-param>
/ `, ~6 \; G2 H1 }/ b - <!-- 加载SpringMVC的xml到 spring的上下文容器中 -->
4 L7 O, ?) K: W9 ^ - <param-name>contextConfigLocation</param-name>
@1 y& u; M/ d' W8 K4 U' X; c - <param-value>
0 {6 l* `6 I0 [7 |" b& e5 ~ - /WEB-INF/classes/mvc-context.xml
% H# S( \# H8 m* {6 h - </param-value> $ N: k) N J0 A8 N2 a( e
- </init-param>
% K! Q7 M( \# Y3 Y6 S4 M1 Z - <load-on-startup>1</load-on-startup>
8 Q& q$ W; ^8 S7 ~5 g0 o% C - </servlet> 8 v/ o- V; s$ g
-
4 t O% g: c( m! |$ \8 A4 | - <!-- 配置DispatcherServlet所需要拦截的 url -->
. f# M- c# D7 |( V5 ~ - <servlet-mapping>
. F$ J& e+ ~ U% [, m/ D - <servlet-name>MVC</servlet-name> # r3 e) k( ?$ E1 X4 U7 v4 X5 N
- <url-pattern>*.do</url-pattern> ! t P: g0 R& r2 F6 p& T
- </servlet-mapping>
" b+ F( }0 G; S( S% o+ c* |$ c# A -
: a+ |; w5 d% ]) k; o' m. ] G5 \ - <welcome-file-list> # U% E" Q% u+ G' W
- <welcome-file>index.jsp</welcome-file> 2 M q; |3 [9 Z# b1 q% M8 n
- </welcome-file-list>
7 h* B4 q, J& [$ l - ; o' F7 X7 j: p" M# H
- . K. P1 D5 I' \
- </web-app>
复制代码
7 F- \, s3 d: S* M6 j7 \% Rmvc-context.xml:
9 {: p& b0 v- L# M# R; v0 B- <?xml version="1.0" encoding="UTF-8"?># z+ {* \2 j4 X( A9 i7 L( X0 T- E' D
- <beans xmlns="http://www.springframework.org/schema/beans"4 x) d/ J3 D8 Y( L
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
; w6 @' g! S! Y- B8 j - xmlns:context="http://www.springframework.org/schema/context"
, D# U# t! T1 w; Q* j/ Q - xsi:schemaLocation="http://www.springframework.org/schema/beans
, @: |$ S8 ^! }/ ?' S: M - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd7 n5 e) l9 z8 ^$ c1 X r9 S
- http://www.springframework.org/schema/context$ z& B( q0 l5 g2 e
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">- B3 I# V5 g; P% l8 D
- # @4 f* v2 j. j1 o
- <context:component-scan base-package="com.wg.*" />
7 n$ ?6 S" |. i$ k$ M M
" M; O R, n. F/ {5 y- <bean id="viewResolver"
( K7 x' ]( m6 W% U3 F: T - class="org.springframework.web.servlet.view.UrlBasedViewResolver">
& h6 D: y: V; S* J$ p9 h+ u - <property name="viewClass"" X+ k' ?7 h' b1 p5 T: b/ }1 Q
- value="org.springframework.web.servlet.view.JstlView" />) ~; v% X+ b! w- {# X) z
- <property name="prefix" value="/page/" />2 T5 l" b( ]( x% ~6 p& l1 B
- <property name="suffix" value=".jsp" />2 j/ G1 U9 a+ H$ z7 _" L" a
- </bean>0 `3 I6 }2 w; r
- </beans>. G N: g& u9 F9 l
复制代码
" D8 l B4 ]4 p2 x0 h8 gmybatis-config.xml:
! Z8 a$ \, z5 G- [* d7 p8 D p- <?xml version="1.0" encoding="UTF-8"?>3 H# F! H7 p( Z3 L& R) I
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
7 T- e/ t% x0 a/ E% @& N# X8 g - "http://mybatis.org/dtd/mybatis-3-config.dtd"># Z0 B# L* ^1 l2 C7 r& V. a4 b
- <configuration>
1 O. H# q% p$ Y+ |* y - <typeAliases>
# E. F8 f$ w5 q - <package name="com.wg.bean" />4 _) ~* Y* V4 T* k' h
- </typeAliases>
( y# y& g' J( r7 O: w3 g0 d0 Y6 y - <mappers>
( K+ n! L1 ]7 ^; P+ X- [ - <mapper resource="com/wg/bean/UserMapper.xml" />) o }. A' J F
- </mappers>
1 h; s# C2 M' n6 X. z - </configuration>
复制代码 root-context.xml:
# Z& F% v6 Z, I, D+ R& i* d- <?xml version="1.0" encoding="UTF-8"?>
4 H; l4 Z6 H: p( {. ^, j' N( H - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
0 ?! S9 ?. M. M - "http://mybatis.org/dtd/mybatis-3-config.dtd">
0 l4 Q' Z- t0 O4 g - <configuration>1 @, x" S5 v: J* N9 d3 q
- <typeAliases>8 [4 t* F; W7 t$ g" ^
- <package name="com.wg.bean" />
1 \3 G+ U9 `$ a5 a: b: F/ v - </typeAliases>
* Q4 F0 Q) Q4 V `& g. g - <mappers>
- x+ y0 E! j6 V* ?) y5 T0 m/ Q - <mapper resource="com/wg/bean/UserMapper.xml" />5 K! D# S, H2 l0 s; s
- </mappers>3 n$ _& c0 |0 G& x i: E5 f
- </configuration>
复制代码
; ~8 b% R7 B% z4 ~" @user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>$ d# \4 E [" c8 Y9 J
- <beans xmlns="http://www.springframework.org/schema/beans"1 e2 v. c+ z" `& C0 F' f! V9 |
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
U- M+ _7 @. Z6 s" S& N2 y - xmlns:context="http://www.springframework.org/schema/context"" G7 |& |" f8 {/ U* K7 d
- xsi:schemaLocation="http://www.springframework.org/schema/beans
6 Y9 `& i2 n- V8 _ - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
% ?9 {5 B. N" r# e N( b* S: b% F - http://www.springframework.org/schema/context! E. {4 G) A4 t' m* z0 y
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >! r# | o4 }' Z' s: ^
-
& e+ e1 W- \' w$ \% x) ?* V - ! S) O3 k. H3 f1 h5 s6 U! W c' n
- <!-- 用户Dao -->6 o6 L- M+ u) [1 `
- <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
/ d" O; S' m. W; a' K4 ]5 ~% j - <property name="mapperInterface" value="com.wg.dao.UserDao" />
5 o2 Z& G7 \. m5 @" I - <property name="sqlSessionFactory" ref="sqlSessionFactory" /> * e; C8 S6 c% O8 O U% X5 c
- </bean>
( { w! ?1 G/ Y& s - : T5 G3 q, V+ F+ h) s
* f1 z! l0 _: l- b! R* \. J" Y- </beans>
复制代码
- `# N' O: S8 b9 ]& P, z# `
9 E" y" Y9 N; {0 l4 \1 m* Q9 v2 n$ @3 V- m& D
链接:springMvc整合mybatis项目源码; z5 l7 N; x; e# _% ^- \6 H
密码:* _3 E4 X4 H8 ~7 Q1 N0 Q# ^% s
z, _: Q A# ]1 Y# N' }* S
2 ?6 |' E4 x: m% f1 {$ X0 \
& c9 n0 S7 ?9 w: V |
|