TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、前言:
) H: ^" I# s' l1 x- z# ~ p4 E为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:: q( G5 e; U4 D7 g& K
1、简单易用,以提高开发效率。使小部分的精力在框架上,大部分的精力放在业务上。+ G. i6 a$ I$ r9 K7 Q
2、性能优秀,这是一个最能吸引眼球的话题。, j2 Q( C9 k5 S6 l/ H R6 E3 [) _- v
3、尽量使用大众的框架(避免使用小众的、私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响。
/ E3 ^% \6 W% g! d- W- N* y4 ]/ t: j# J- W% p- s! G" w( x' n
如果你还在为这件事件发愁,本文最适合你了。选择spring MVC吧。1 E/ K7 A/ c" ]5 b
# I3 C! |6 {- s: \; _9 }. U5 S
Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对struts 2的超越。现在越来越多的开发团队选择了Spring MVC。' ]7 ?0 [7 S# o2 m$ u, I% ~; K
V6 }: Y p5 f& V9 ~, F2 X' N% aStruts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。: `* ~4 Q l& l3 G2 U" M3 e8 a
3 |7 m! x- ~. i, U$ m8 C0 R9 Z4 A: bSpring3 MVC的优点:9 G; q7 o& t4 s# b
1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
7 u! ]9 K8 g8 Y% x1 l3 c2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
* ~9 s, ?" M/ t# x0 Z3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。0 S4 Y& S% h$ V" L
( [7 r8 D k2 Z6 X5 K5 }6 f% N
Struts2的众多优点:" V7 R: U Q7 z4 t! F8 ^( Q/ V
1、老牌的知名框架,从Struts1起积累了大量用户群体。技术文档丰富。
' @* [( B& d% [" X# u, l: E2、其它方面略...
5 ^* Y: N, A) Z% p) V; u# z2 ]==============================================================* s1 Q) c& j+ a
什么是mybatis3 [4 h) B( S: ]! h K* }" K, L
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
8 ~: K2 u) s( U0 |# d' p- ]0 w8 J- E. z2 d" v3 s) H
orm工具的基本思想
1 ]0 G! p$ e( z无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1 M- a' B5 q1 n. r1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.2 |2 \$ O/ U2 Z- Y# d! A7 d
2. 由sessionfactory 产生 session
) l! e* ~7 h2 l5 E, E& F+ J3. 在session 中完成对数据的增删改查和事务提交等.+ e" v; j6 ~) i# M: g6 M
4. 在用完之后关闭session 。
6 J6 J" E- R" P8 |% Z* G9 e6 D2 n5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
% P6 G" N- n$ E8 ^/ `1 D) R! l8 ~6 }' `5 j( V
项目说明:实现了用户登陆demo。
; B+ m5 w% [$ M2 a" y: B7 u项目配置说明:
; [. {! P0 [7 `8 _* qweb.xml:
/ `3 a8 L% ]3 Q- <?xml version="1.0" encoding="UTF-8"?>
7 e z5 s3 D8 `6 D' u0 j# V - <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 0 v4 c) w, d- x- M
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ( N: n% Q* g, d, k( y5 W1 e
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee , p5 I, X/ m# P) a0 `
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 5 D. L7 l' ?1 |" X! K% H
- : S/ \2 x6 U/ o* E: V( h& i
- <!-- 监听spring上下文容器 --> 7 K4 }9 M. a/ B+ ^* U
- <listener> 5 g2 Y( Q' k* x* n3 z9 C
- <listener-class> ' Y. ?4 x2 p. @7 s4 |9 v, r! {
- org.springframework.web.context.ContextLoaderListener % K- `2 _( b& a9 X; Q4 [
- </listener-class>
. J; J" A4 `: a- v' r1 U) C - </listener> ! ?' A% C8 c/ h7 u+ f& b' L
-
2 G5 {+ E4 W7 ~" d: M6 l - <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
( i* L6 \! `3 l% ]: b7 ~ - <context-param> 3 `7 x! [8 O3 ^
- <param-name>contextConfigLocation</param-name>
" S2 V& s( p8 t1 b, v) M8 [ - <param-value>classpath:*-context.xml</param-value> 5 V6 y M" B- T* O9 j
- </context-param> + \6 A& ^( E" g& A, [/ [
- / m2 T/ S5 [7 K
- <!-- 配置Spring MVC DispatcherServlet -->
7 ?7 z+ R( ^" q, J# U6 O( [7 Q - <servlet> % \8 j! G; t* B) s! `" |0 f
- <servlet-name>MVC</servlet-name> * `/ {6 }0 J! K6 O, L R: v) X
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
/ `( J- t! b0 C. f" o$ h - <!-- 初始化参数 --> * t& U3 T* e0 E4 ?
- <init-param> 3 u+ q3 L2 _; L# N
- <!-- 加载SpringMVC的xml到 spring的上下文容器中 -->
" ?4 ~2 O" W! O6 l9 u. N" Y B - <param-name>contextConfigLocation</param-name> 5 {) Z" A4 i& Q) @/ X3 i* v
- <param-value> 5 H+ |5 d# J9 U1 m8 M$ g
- /WEB-INF/classes/mvc-context.xml : z( |1 b# _, S* y+ r9 b/ G6 ?
- </param-value>
/ B4 T7 ~$ S% D" t9 n# X. j - </init-param>
5 f" \0 r6 Z0 ?7 b9 j1 p& J5 N - <load-on-startup>1</load-on-startup>
3 u1 r. O/ l6 u/ G8 K) D9 X - </servlet> / V$ ^" d" `' ?
- . Y# P% o3 ?9 ^+ G! L: O
- <!-- 配置DispatcherServlet所需要拦截的 url -->
9 R- Y/ Z* x5 v& N0 O+ J - <servlet-mapping>
& n( D! \! L7 w: | - <servlet-name>MVC</servlet-name> ; t& Y" d3 B! |
- <url-pattern>*.do</url-pattern>
- h. W( ~9 B- b4 ? - </servlet-mapping> . r4 Y6 Z4 g8 I# O, _6 R
-
8 Z6 |( Y* W+ t: o2 R! G - <welcome-file-list>
$ D% E0 b, p- D - <welcome-file>index.jsp</welcome-file> ( j m* r c# w
- </welcome-file-list>
% \ k$ v" m3 X" E; Y; G - " n* G# K8 o8 i+ v6 K$ p k+ v) G
-
, v7 f- a" W: G [2 ?- A - </web-app>
复制代码 # C+ r) V/ H6 r
mvc-context.xml:
d! n. B+ _9 [9 A! t7 s, H X- <?xml version="1.0" encoding="UTF-8"?>
( C8 o9 @- {& F3 Q+ d - <beans xmlns="http://www.springframework.org/schema/beans"
7 ^* U6 w: R0 n: w% B: \ - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 d% x4 b1 Z2 s& j4 m - xmlns:context="http://www.springframework.org/schema/context"
, ]% a8 B0 n. p+ q - xsi:schemaLocation="http://www.springframework.org/schema/beans
2 x" }+ {: q+ C - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
. g" Z& K! U4 m0 L7 p; A - http://www.springframework.org/schema/context
/ V0 X& O0 r" t7 H3 P4 U - http://www.springframework.org/schema/context/spring-context-3.0.xsd">
' }$ R7 _) L0 }) P% f5 H: a - 8 n7 P6 D) ~8 _9 O9 V
- <context:component-scan base-package="com.wg.*" />
) l' ?7 D3 ^0 z
2 N* H4 A9 ]# a# B2 E' K' L- i# w- <bean id="viewResolver"
8 V4 `9 Z& a! l0 n" @2 }7 | - class="org.springframework.web.servlet.view.UrlBasedViewResolver">
& {: k z: u: d+ { - <property name="viewClass"
Y7 a- W# E- X - value="org.springframework.web.servlet.view.JstlView" />% H) ?' `3 K$ W2 \- Q6 [
- <property name="prefix" value="/page/" />
3 F D# S! b! f0 Z& e6 i! [ - <property name="suffix" value=".jsp" />6 g( i2 R- U3 D1 T) u9 t/ Q; S
- </bean>9 I P+ S2 s B, m2 Y1 U
- </beans>
3 h7 j: A( E1 o( h5 V; l
复制代码 * U6 _3 u9 D9 Q- {7 J ~* H$ d
mybatis-config.xml:9 O1 B K4 `6 K% N/ e
- <?xml version="1.0" encoding="UTF-8"?>
6 q- |# q& [+ ?; Y& x* X - <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 \, d6 r9 n, f9 v5 w0 @# p, W
- "http://mybatis.org/dtd/mybatis-3-config.dtd">! e" U/ w, B8 O8 c6 ~$ ?1 l
- <configuration>. r& L% R7 ]. A5 V( e) B
- <typeAliases>
* z" U# f) r; \ - <package name="com.wg.bean" />3 |; P/ S' w6 w+ u5 @9 a
- </typeAliases>
9 N8 y* Y( M& R3 r - <mappers>
: Y6 c; R* c% |6 A - <mapper resource="com/wg/bean/UserMapper.xml" />
1 j: V3 x- R+ M+ T5 s. o- F7 R/ a0 t - </mappers>4 k W4 ]7 ~! y% O3 n, {
- </configuration>
复制代码 root-context.xml:( [5 d3 k( V+ H& V: D5 A( a
- <?xml version="1.0" encoding="UTF-8"?>$ b& j+ z. ?$ S+ R
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 0 o# K5 V7 I, P F6 g' |# B
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
, v O# z4 S x* p0 B; m - <configuration>" f; n- {7 e7 M: k3 g$ V/ [/ I
- <typeAliases>2 G9 n5 K+ m! l
- <package name="com.wg.bean" />
. Q- Y6 A1 m( ]$ x2 b - </typeAliases>, X9 f+ O8 i# M- S
- <mappers>
$ K w0 E1 V" H8 S; C, d' U! m - <mapper resource="com/wg/bean/UserMapper.xml" /># V, s4 D3 I1 a! W4 ^ ?2 X$ q# X
- </mappers>9 [2 n0 E7 D6 c/ ^; ?0 S' s
- </configuration>
复制代码 - X( _; l! b( R( T# ]6 [
user-context.xml:- <?xml version="1.0" encoding="UTF-8"?>
% l. s M8 K0 W5 O - <beans xmlns="http://www.springframework.org/schema/beans"
9 a2 x( O8 q: i, i' F" [. T - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ K: [ Z, S" }( x+ s1 i% d& l - xmlns:context="http://www.springframework.org/schema/context"$ Z6 k2 I: |: l3 O! d" x x0 m5 [' }
- xsi:schemaLocation="http://www.springframework.org/schema/beans
, S( L+ N1 U0 n- y) q) V/ A# \ - http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
' ]+ }9 P# h8 x9 }2 w - http://www.springframework.org/schema/context( `6 x3 G2 ^! L0 x: U. p
- http://www.springframework.org/schema/context/spring-context-3.2.xsd" >
& D% }, m. O5 m2 U9 K - ) l( _, {1 ^$ R' U' K
-
# Q% p% D$ N7 ~ - <!-- 用户Dao -->
5 @8 Q+ c1 T h - <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
4 j7 g5 t- L- h - <property name="mapperInterface" value="com.wg.dao.UserDao" />
9 H, U, t2 O. }& L# p - <property name="sqlSessionFactory" ref="sqlSessionFactory" /> + A% J2 E1 m+ s0 W/ A5 M
- </bean>
# |3 @! x: k* B - - i( g/ F6 x; d
# u& m: H: p T6 [- </beans>
复制代码 " W9 {& }2 w! R) F
% R) t4 S9 I( L v- r. `$ [' o: |, |1 w+ ]! X
链接:springMvc整合mybatis项目源码
- l4 L% F. v/ c# e! L 密码:: M4 S) d- n6 h& A7 O' i& ?
6 z7 K) Y w, B) j& Q/ l
. Z# j& ?9 a1 h9 |/ A& q# }2 n3 t( C6 G e
|
|