|
该用户从未签到
|
- struts2、hibernate、spring所需jar包 ! k5 ^) s5 a3 k6 L9 y+ j3 u/ p
-
( P6 F$ E0 u5 g' J - struts-core-2.x.x.jar ----struts核心包
; D4 Y- K2 M" z( I# h; g8 E( r! d - xwork-core-2.x.x.jar -----身体ruts在其撒很难过构建
& q; K& {0 a* X8 V+ e8 x5 D - ognl-2.6.x.jar ----对象导航语言 " b. o1 c* J7 l9 G5 h) j& r
- freemarker-2.3.x.jar ------struts2的ui标签的模板使用 9 u) ~# ^. Q" F8 Q$ n9 W/ o
- commons-fileupload-1.2.x.jar ----文件上传组件 2.1.6版本后需加入此文件
E# p: V# n8 t - struts-spring-plugin-2.x.x.jar ---用于struts2继承spring的插件
& f. |9 q# s1 H4 w' U; C - . H3 r; {& [7 B) i
- hibernate核心安装包下的(下载路径:http://www.hibernate.org/ ,点击Hibernate Core 右边的download) 6 @1 Z ^) Y) U4 ~" g
- hibernate2.jar
4 ^+ n' D( y4 D) I+ i - lib\bytecode\hibernate-cglib-repack-2.1_3.jar M; E5 v- }3 f+ E; A2 G( i" H
- lib\required\*.jar
- }4 E# K: j- R& M - hibernate安装包下的(下载路径:http://www.hibernate.org/;点击Hibernate Annotations 右边的下载)
) P# }1 ?% s% v$ `/ j+ v4 T - hibernate-annotations.jar
* a( r1 W. F+ f+ l/ }( X - lib\ejb3-persistence.jar、hibernate-commons-annotations.jar ( m. j/ g( }* v p/ t2 @3 ^9 l
- hibernate针对JPA的实现包(下载路径:http://www.hibernate.org/ ,点击Hibernate Entitymanager右边下载)$ S2 h0 z' h7 Z% {# t: {* n5 ~
- hibernate-entitymanager.jar
: B8 S( T4 k) r0 I$ l/ Q2 U: f - lib\test\log4j.jar、 slf4j-log4j12.jar 0 x; Y# e( P# j& {: U
-
8 k) G5 u% T* l U4 ~+ S; s" c - spring安装包下的 : g9 J' t: X6 ~
- dist\spring.jar / Z+ S4 |8 h. B' o5 S
- lib\c3p0\c3p0-0.9.1.2.jar ! ?8 D: C; `6 T& Q% }4 W
- lib\aspecti\aspectjweaver.jar
6 ~/ \9 X' i3 G. j( E+ N - aspectjrt.jar 7 U2 {2 m1 |& b
- lib\colib\cglib-nodep-2.1_3.jar
[, H1 Y' o/ G& N - lib\j2ee\common-annotations.jar 8 Y& |( J' Y6 X( O3 _
- vlib\log4j\log4j-1.2.15.jar
& U8 @" ~! C( B) m - lib\jakarta-commons\commons_loggin.jar . q+ i9 }5 }; G7 |, p
- ! e& S/ M' k$ J$ s7 c* `
- 数据库驱动包 7 R# G y5 v! N! _7 L. z
-
" m1 I3 I# @1 Q( j8 p7 r6 ~ - 3 ^* @3 j+ l! h0 F
-
' X! G7 s, n& M0 E- \) l- u, S# [ - 引用3 w9 B: ~% k9 u, f0 ]
- 5 B/ Q1 w& A. J2 `+ o" q w# h. W
- 5 V* a- j4 @2 P, f
- 创建mysql数据库ssh 设置编码为utf-8 语句:
3 ?7 C+ ?: @8 m5 |3 Z9 I - create database ssh character set 'utf8' collate 'utf8_general_ci'2 ~" @1 w) v5 e$ G; n
-
; M6 O: @$ {# P+ c - & |. T+ I# C$ g+ ^6 K2 Y
-
1 v( |6 K0 } a& i - 引用
' u+ z) U8 A1 D. s, O - , R* ~5 k2 M# E! B
-
! }( I3 j3 u1 S; N0 F - 1.先整合spring和hibernate
$ U- g& }4 z- ?* c, h - *将spring和hibernate的jar包放入lib下;
7 M9 C2 A: a$ B7 i - *创建spring的beans.xml配置文件 ! m3 y i/ @" y9 f7 }7 b( C0 n% u
- 9 I0 J2 d0 o2 I: }- i# U
-
+ ?6 R! H% e, E" Q6 f - ; u0 r( o' s$ S/ z$ K, y! h
- java代码 * O8 n) a) u4 L. u' z
- 1.<?xml version="1.0" encoding="UTF-8"?>
6 J0 t) {5 Y. S" h, L* F1 L- S - 2.<beans xmlns="http://www.springframework.org/schema/beans" 3 V2 W! h4 p" w& r: w! e3 i' G& W: ?
- 3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
( S4 H! l! o: [9 Z1 a e- e - 4. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" ( q7 W# N. z! H3 o
- 5. xsi:schemaLocation="http://www.springframework.org/schema/beans
% W* ?8 i% e7 X( K - 6. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
A; X# `) M& D0 n! L& d - 7. http://www.springframework.org/schema/context
( ~1 z$ J) A |: U# `6 {) m - 8. http://www.springframework.org/schema/context/spring-context-2.5.xsd " G; Z# O4 O3 @% k4 S. o
- 9. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
: y8 c5 p% |3 H8 v4 u! ~' j - 10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> ) d- s4 t W1 v1 z L) O4 x
- 11. 1 p0 ~, A% I2 _# q4 r5 X; |
- 12. <!-- 将bean交由spring管理可以 用<bean></bean>和扫描加注 -->
/ Z6 M4 G+ Z9 r3 h: X/ d n7 [ - 13. <!--
* n6 }. e/ l1 ^* }* N7 w3 P6 | - 14. 扫描该包及该包下的子包
- `# c2 {3 l2 \, {/ M" Z - 15. --> 8 V6 L# a; A7 K' Y8 E
- 16. <context:component-scan base-package="com.yss"></context:component-scan>
/ o& h5 _- N+ c; R' q( V+ ~ - 17.
3 x- {( s7 m+ k; c0 M - 18. & Q2 A1 d) f7 k/ }4 t+ q2 k9 f
- 19. <!-- 集成hibernate sessionFactory单例模式 线程安全 创建耗内存-->
+ x$ e- v t1 m6 K: h9 ?0 a - 20. <!-- 将hibernate的事务也交由spring管理 --> , C' r5 @" a# K1 l5 r1 B
- 21. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
! b2 C6 z: j) a* Z - 22. destroy-method="close"> * W: C' r9 Q7 j5 m
- 23. <property name="driverClass" value="org.gjt.mm.mysql.Driver" /> / r$ |+ b& l7 z P$ X+ }; [
- 24. <property name="jdbcUrl"
$ _2 M- E7 O$ c8 @. D% C - 25. value="jdbc:mysql://localhost:3306/ssh?useUnicode=true&characterEncoding=UTF-8" /> 3 j8 ~: j; s( L+ X) B9 Z
- 26. <property name="user" value="root" />
- T1 t$ o* }6 z' F - 27. <property name="password" value="root" />
$ ~- l/ P' I; c' S7 I - 28. <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
' ?" _/ X3 E- j# O - 29. <property name="initialPoolSize" value="1" />
6 l5 q6 ~+ m, J4 a - 30. <!--连接池中保留的最小连接数。--> ; }) f4 {; p- ]+ U7 B4 J% s
- 31. <property name="minPoolSize" value="1" /> : l; P( X$ \! x" n8 Q/ A
- 32. <!--连接池中保留的最大连接数。Default: 15 --> 5 S+ w" c3 a3 c3 c. `
- 33. <property name="maxPoolSize" value="300" />
7 c" e9 D& f# X | - 34. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
5 B* v% c/ u7 g0 {0 \' @+ ~& V - 35. <property name="maxIdleTime" value="60" /> " i |2 T+ [% v/ C/ c% I
- 36. <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> ' o9 h" h' ]6 m$ u
- 37. <property name="acquireIncrement" value="5" /> - @. L4 |! L: |
- 38. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
+ C7 T* _3 m. G. r - 39. <property name="idleConnectionTestPeriod" value="60" />
# C2 Q1 v) ^* Y4 a' u( P - 40. </bean> * i# ~, n1 b, h4 N* d; d
- 41. 7 m7 A9 f( M( `
- 42. <bean id="sessionFactory"
; o4 [. Y/ ]4 o. n v8 J; @1 u4 P - 43. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> : ?5 G, ^ v: w4 D* k
- 44. <property name="dataSource" ref="dataSource" />
. _4 c; g+ i; q7 c! M0 q! y3 @ - 45. <property name="mappingResources"><!-- 放置hibernate的配置文件 -->
: \4 g2 A0 o; ^! @4 g' I$ p - 46. <list> 6 C3 t2 Y! `( t7 W; F
- 47. <value>com/yss/bean/Employee.hbm.xml</value>
6 w5 d, I: h2 ]1 P7 e+ ?3 N- }7 L2 N - 48. </list> 9 B. V# R4 y6 o5 K; q) Q
- 49. </property> % o+ p( W1 E7 b7 l
- 50. <property name="hibernateProperties"> + A. J% R5 _ [4 x3 T& y
- 51. <value> $ _# K. V( n" e8 P. Y9 N
- 52. hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
# V U3 J1 Q* m$ y; f - 53. hibernate.hbm2ddl.auto=update 5 ]0 n$ B7 f+ I
- 54. hibernate.show_sql=true
9 ?8 S1 o! R: R/ i3 @2 { - 55. hibernate.format_sql=false 9 [6 L& t$ j, S; I3 p- V
- 56. </value> ! X. [0 c* p$ A9 J9 [
- 57. </property> - @/ s- b; ]& V/ I W$ x |7 N
- 58. </bean>
$ H: R2 M/ H* g; [+ t - 59. & X0 p, I R$ z4 |6 l
- 60. <!--hibernate事务管理器配置-->
+ I1 w3 l" r C! [, A, h - 61. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> % b: q9 _( K* o
- 62. <property name="sessionFactory" ref="sessionFactory"></property> 4 w& z. e) X/ ?9 m5 B2 g
- 63. </bean>
$ f' z/ z" X7 p+ r" @ - 64. 5 `- G. S+ G- Z* u/ W
- 65. <!--spring可以用xml和注解来配置事务 声明 --> ; e3 N5 n1 q6 ~5 S' f
- 66. <tx:annotation-driven transaction-manager="transactionManager"/> 6 z6 V$ X$ m; k0 [3 I2 @: m% d
- 67.</beans> , }" n7 L' `$ R8 B `0 K1 e
- 5 C' z& g4 e3 O, {+ c
- *配置hibernate的model.hbm.xml和创建model类
' G3 ]8 k O+ c4 ^ - *创建service
8 ?. {! P( w ^. W - service接口: % v% z( N: s$ z; u. H4 F8 o
- , r# J7 x9 X* S* B
-
( k5 w, w/ H7 y# J/ M4 Y -
4 } o8 q- o) ?# @$ Q! z# s+ J5 ` - Java代码 ( l+ N9 @( K, w) U3 b; k( b
- 1.public interface EmployeeService {
' C! P8 p+ Y' Y5 g2 D1 u& \ - 2. public boolean save(Employee employee); ) m$ l1 g+ |; ~; W- O
- 3. public boolean update(Employee employee); $ Q( t6 ?' L' i0 y- N
- 4. public Employee find(String username); q. K3 G7 k k! r0 A
- 5. public boolean delete(String... username);//表示可变参数
( m+ v7 X) S6 H9 s c% h& B - 6. public List<Employee> findAll();
$ T9 x# p) _+ D! _; T' V - 7.}
% @* @$ ~" R1 v; N8 ? - 3 ?- R3 R' [/ H8 w- A0 d
- service实现类:
1 L0 h4 ~. @9 e/ s -
$ A; }" j! d4 b; h, } -
2 D' `) ^6 m) z* V- H( b) i( l" n. U9 } -
8 a- T. f, R1 |" O8 S - Java代码 1 \- D# r1 C1 u+ }' ]: g
- 1.import java.util.List; ! t3 f7 W" ^% c& T
- 2. . u* G2 o5 W1 r/ e- r
- 3.import javax.annotation.Resource;
) u3 i& a: h% [# {5 Q - 4.
- h, `! r6 R* [( [! x& v2 J. a- B - 5.import org.apache.log4j.Logger;
/ s4 ~6 }9 i5 `' e# ~ - 6.import org.hibernate.SessionFactory;
% ^8 N7 q/ v9 D h4 X, F0 T, u5 E - 7.import org.springframework.stereotype.Service; 4 n& O1 a- k- I' S6 G
- 8.import org.springframework.transaction.annotation.Propagation;
3 ] s2 |2 l% Q* L1 N/ D, } - 9.import org.springframework.transaction.annotation.Transactional;
( o3 Q: N, ^# y9 Z' {8 l- Z - 10. % i% R* B' w4 y. z5 K
- 11.import com.yss.bean.Employee;
( W0 c1 x# A. m - 12.import com.yss.service.EmployeeService; & q" O& g0 ?2 L. g) D4 @' G4 W
- 13.
, ^9 S0 q8 B( u$ U - 14./** . y( q7 e( x" z @- |" X+ G& q
- 15. * @author qing 默认bean名称 employeeServiceBean , ~& L+ j+ v! j! H4 Y; y2 N' \
- 16. *@Service @Transactional 注入service和开启事务
8 e1 G( H" H; {5 t0 a. J/ Z, o" T - 17. */ ; K/ \8 r1 N% ^+ N1 |
- 18.@Service % n1 t9 c1 }$ s; l7 \
- 19.@Transactional
7 ~0 I8 T) H6 g - 20.public class EmployeeServiceBean implements EmployeeService { $ y4 F1 O! ]6 |) h
- 21. private static Logger logger = Logger.getLogger(Employee.class); + J( W/ f& D& l
- 22. /**
' P% x1 y9 e" q+ H+ w1 e. R - 23. * 注入sessionFactory
$ {( f) N i/ R @7 k# B2 x C - 24. */
0 x3 K0 J5 b! Y0 M - 25. @Resource SessionFactory factory; ! d: s: h. t. D: w& \! o
- 26. * Z) t; w3 ^9 ^- r% z3 H# h7 Z
- 27. public boolean delete(String... usernames) { 9 h* g) u( |2 h: I/ e
- 28. try { " \6 Z( z: u6 j) B
- 29. for (String username : usernames) {
1 l- Q G- O6 X - 30. factory.getCurrentSession().delete(
8 C/ S9 _3 b7 z9 @3 } - 31. factory.getCurrentSession().load(Employee.class, & u1 W! D1 C: W7 i F
- 32. username)); 7 A7 Y, [8 U$ s( x
- 33. } - U" k! \5 d+ \0 I" \- w3 @
- 34. } catch (Exception e) { " K" p( `- e9 O
- 35. logger.error(e.getMessage()); % J4 J+ W4 z5 H. f
- 36. return false;
1 F% v9 F# `" e4 t0 H, @ @1 l - 37. } , n; R7 A/ V0 T5 k) ]* b; H
- 38. return true;
4 h1 M$ ^' h& m - 39. } . @( X( y4 \* X7 n/ b8 K- i0 |
- 40.
* y# w$ Y( M6 F( T - 41. /*
, Q M: q4 Q2 s$ m: O. x3 e2 P - 42. * (non-Javadoc) 5 J& `! l7 R/ y1 T, g0 C
- 43. *
2 K. }+ i. \& f6 s+ G' h+ k# C - 44. * @see com.yss.service.EmployeeService#find(com.yss.bean.Employee) ! h' u3 {+ _% P# T) H2 {
- 45. * 此标注表示不需要事务处理
3 O; `/ e& M" ]' u+ q - 46. */ 5 g2 S9 B' o& A2 ]" c6 L4 d8 \
- 47. @Transactional(propagation = Propagation.NOT_SUPPORTED) , i% U, p% @' w
- 48. public Employee find(String username) { ( ~: s! H7 Y% @8 A1 _
- 49. return (Employee) factory.getCurrentSession().get(Employee.class, + o, w# ^( m% O2 }; [
- 50. username);
5 E" D/ O. G5 a/ \ - 51. } & A, t% E+ J+ ]& w" b a) E
- 52. 8 U' Q5 {( x- y( t
- 53. @SuppressWarnings("unchecked") 1 I! g- Z) ]/ c+ j% v: {7 E4 W
- 54. @Transactional(propagation = Propagation.NOT_SUPPORTED)
/ h2 b# S4 Y+ d- l) E+ m; m' L5 V - 55. public List<Employee> findAll() {
, ?: Y- J. q% X8 F! w5 ? - 56. return factory.getCurrentSession().createQuery("from Employee emp")
4 K2 \ b3 {$ @ - 57. .list(); 7 Z- l% z" g. |4 {- [
- 58. }
7 M+ _9 {* ^+ n' ^! \ L - 59. . Z8 z: |% o3 Y
- 60. public boolean save(Employee employee) {
2 h& ~- C6 k+ x3 Z5 m - 61. try {
2 Q- o8 N. A2 G/ m* }5 Z - 62. factory.getCurrentSession().persist(employee);// .save(employee);//
- z& ^3 i* F* c5 ^! [* }5 e0 O - 63. // 获取已经开好的Session 4 K) q* a3 T8 l: K
- 64. } catch (Exception e) { 3 l% ^5 g0 S! w0 X3 N1 r
- 65. logger.error(e.getMessage());
3 h) o" ]* m1 P) ]; X8 j/ C - 66. return false; 2 G* A- N3 I6 s4 l% v+ `' l
- 67. } ) M) x; f% ^$ g0 X" e) h+ y
- 68. return true; , o/ F1 z4 }( m$ u6 ] h3 ~& b
- 69. } % Y! W; G6 }* V# ]
- 70. / Y' d5 F# p; \% L
- 71. public boolean update(Employee employee) { 3 H; M) i9 k4 I4 p' o: |& b" h
- 72. try { 6 g4 S$ v0 k" w, }: m' e0 e$ ]
- 73. factory.getCurrentSession().merge(employee);// 类似于saveOrUpdate()方法 0 C' ?. u/ k( z, X" j1 U1 |
- 74. } catch (Exception e) {
$ P0 D) i+ j% |0 s* g - 75. logger.error(e.getMessage());
# \& N' M& c: [6 j: X+ N - 76. return false;
6 G' s) t6 Q$ M2 o. Y - 77. } c% |" ~( n. O% \% e, H9 F8 |
- 78. return true;
: ]4 ~: z# |0 S6 e, m$ P6 F! E/ V - 79. } . _& W6 p6 W3 B; w6 ~3 k7 ]
- 80. 9 a- m8 w7 r1 ]1 e* r
- 81.} , ?- s& Y1 S( G. v0 F! }2 }% H
-
; N( w. M( o2 ~. a$ m3 y7 S - *新建测试类 ) z+ I1 B3 u/ A1 U
- & W7 `" U, X# S5 E0 ~
-
6 z1 k2 B" B! `- l/ n( _4 {! r8 R6 x* o - 0 W* D' s2 }: q$ E# j) q2 _
- Java代码
4 I2 b* b* C' M - 1.public class EmployeeTest {
# [0 \+ k. S) u# v6 J0 q - 2. private static EmployeeService employeeService;
) ?4 _6 C. G- Q7 m9 L - 3.
* ^; h* v+ I( {; V - 4. @BeforeClass
. S$ [+ t$ k- r/ P0 [: c - 5. public static void setUpBeforeClass() throws Exception {
" n" O5 a4 @* O0 _9 u! n, o - 6. try { - z* T2 d) G' L2 c. N$ T
- 7. ApplicationContext context = new ClassPathXmlApplicationContext(
( D& y5 |( ?+ Z+ l4 u; Z - 8. "beans.xml");
5 _% U& w- P6 X4 {5 l, h - 9. employeeService = (EmployeeService) context ) n1 i0 {, U% m( A$ k
- 10. .getBean("employeeServiceBean"); 5 l1 G1 C7 @% n" a" c6 w
- 11. } catch (Exception e) { S9 l3 b& i; ]$ g* H
- 12. System.out.println(e.getMessage()); & d' h- d# T7 D- G, D/ |5 [5 W* u1 J
- 13. }
: Z2 c0 T! t: v( W' w8 S! x - 14. } ' |( e! g5 i, I
- 15. 9 R/ F4 ^5 g- k, y, S+ O, B
- 16. @Test
8 B' e. w% Q8 Y i7 p: h - 17. public void createTable() { $ S2 T& |7 c' X# Z, Y
- 18. //new ClassPathXmlApplicationContext("beans.xml"); $ d/ s) V6 |, K6 S8 T; D
- 19. };
N$ J* P% @8 N8 t0 Z/ f" g - 20. u# g6 V1 \ d+ `( F) m
- 21. @Test
+ y" ]( g W' [ - 22. public void save() {
' R: C- ?+ c$ d8 w5 |3 K - 23. boolean result=employeeService.save(new Employee("long","long")); - a e! z. W' k
- 24. if (result) { " J9 @: q2 w# M0 e" z* I
- 25. System.out.println("保存成功。。。。。");
& v) `) m. q. I) z - 26. }else{ . k( B* R' ^ U! O
- 27. System.out.println("保存出错....");
% n: |# q1 H- W - 28. } / A0 w7 {+ L$ {; V
- 29. };
# {3 H! H/ y% K" _) B - 30.
7 G8 |* C! U. L9 [+ B - 31. @Test
4 r" Z w7 n& x' p ^7 v - 32. public void delete() {
5 |# W, w% ~. k4 @ - 33. boolean result=employeeService.delete("long"); % x; y8 N/ @5 a e
- 34. if (result) {
6 d! J6 H: j) o' t& A& ~ - 35. System.out.println("删除成功。。。。。"); & [$ W& F( k3 O9 V
- 36. }else{
. _& Q* a8 b- v - 37. System.out.println("删除出错....");
- w2 j/ s+ {1 h$ }; P( F$ } M - 38. }
# t5 D( L7 J1 X - 39. };
* @7 a+ w0 {& t - 40.
7 v/ Z- k n q2 {1 Q: t; Y6 c - 41. @Test ! H5 ]4 q, G! i" ]- r+ F5 ]
- 42. public void update() { - S7 k* _/ M1 I. A2 q5 p
- 43. boolean result=employeeService.update((new Employee("qing","long")));
/ \/ D0 u+ x4 Z" G) O5 _& S9 t4 M - 44. if (result) {
5 ?7 Y2 @1 h" W4 l% J - 45. System.out.println("更新成功。。。。。"); 2 l) W" u; I* N! u( p
- 46. }else{ 6 ~9 j* b4 B- ?: ^+ t
- 47. System.out.println("更新出错...."); ' [3 J6 ^/ }+ N: _' `
- 48. } % W2 j; f n+ w/ r2 E! u3 T
- 49. }; 5 U% `0 D( J( C" C
- 50. 3 S2 H, w" ]( t* o9 y
- 51. @Test - H. ^& o, @* P8 u( f7 I4 U8 E
- 52. public void findAll() { , f, e% |/ d6 v9 ^, {, C% J
- 53. List<Employee> elist=employeeService.findAll();
% P* d2 g. u+ [" x0 R: L ?$ ~ - 54. Iterator itor=elist.iterator(); ! k- ]# ~/ d* S8 ~# Z* U5 ~: O
- 55. while(itor.hasNext()){
( |& M( M; T+ {8 I9 @* q" [ - 56. Employee emp=(Employee)itor.next(); 9 p( V6 l) S r2 k
- 57. System.out.println(emp.getPassword());
0 m7 \( e" o" ^- @7 d4 F2 \ P - 58. }
' ?# N Y- j. T' A7 u - 59. };
! e) E" D- A- X7 Z - 60. * ~1 v2 B R9 j: ]/ j
- 61. @Test
% z# V2 e; b" p - 62. public void find(){ : F$ u! L. ] {7 o% V
- 63. Employee employee=employeeService.find("qing"); ; \; {1 L5 d( A2 p
- 64. System.out.println(employee.getPassword()); 0 K; t$ {0 t$ Q7 C4 E' Q
- 65. } ; o! m& R0 m" W9 ^
- 66.} - q' @8 M' s7 C! N! U
-
$ e# P* S. k! b9 T3 u3 f* X# u( a* u - *ok 没问题spring和hibernate整合完毕
: p1 J, B! k8 `1 P3 V - 6 N0 O6 M+ g0 H4 t1 p% m
- *再将struts2所需包加入lib中 ) @# D! S- V# G( [6 o- P
- *创建struts.xml配置文件 0 o9 D5 b5 v2 q2 G
-
% U: H4 |$ c; I) u' u8 a# }* n/ F C: g - 1 F' \% ^. Z6 A
-
C& n3 Y( D1 a' I1 y - Java代码 % M9 J% R6 P8 V; P9 T( N
- 1.<?xml version="1.0" encoding="UTF-8" ?> # Q. L$ Z$ O! N6 l/ S7 U) v( j
- 2.<!DOCTYPE struts PUBLIC
& {+ z* z+ _+ n2 a9 G& X+ u- h - 3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ! E1 ]- Y! M, i" A' n
- 4. "http://struts.apache.org/dtds/struts-2.0.dtd">
# [, U. e" f/ A0 q' R0 H - 5.<struts> / N7 I2 M b7 B' b' O
- 6. <!-- 将struts的action交由spring管理 不在由struts的工厂介入 --> $ `, c) S: I3 c
- 7. <constant name="struts.objectFactory" value="spring" /> , p1 C" B9 a8 ?( k/ W
- 8.
$ o' m# l8 [8 ^% c2 \8 L - 9. <package name="employee" namespace="/employee" extends="struts-default">
+ s, {# ~& Y" K0 g - 10. <action name="list" class="employeeAction">
, J0 C% t7 z; w4 n6 a E# n. N, { - 11. <result name="success">
! u* K8 ?3 t0 F - 12. /WEB-INF/feapp/employee.jsp " q; I9 W# M& ~0 D& F5 [- D/ ~
- 13. </result>
0 H# B$ _' `% l4 {, @# C - 14. </action>
: t8 u7 |0 M) Q+ |+ J/ q* w - 15. + F: d0 P% i% ?" o: O
- 16. <action name="manager_*" class="employeeManagerAction" method="{1}"> % J1 d8 B2 M S; l3 F9 E8 e
- 17. <result name="success">
5 N* K8 e( t) y' Y1 V9 r - 18. /WEB-INF/feapp/employeeadd.jsp
2 g" d/ P0 ]" a! @2 J - 19. </result> 5 S" L* P1 n0 }; t; f" A
- 20. <result name="message">
) q" Y* Q- ^4 O, \) M - 21. /WEB-INF/feapp/result.jsp
" [; X- _) n" Y - 22. </result>
2 ]9 ^" N* B2 K7 H# K4 D2 O) i - 23. </action>
& g9 l+ Y' r6 p5 b0 R - 24. </package>
9 C/ S5 z9 U0 k% ?$ \( |. t - 25.</struts>
7 K/ [1 b$ Z: m; d -
$ S3 q& |5 c8 r \! R3 d2 |) y - *在web.xml中加入
L7 G7 o8 q9 D+ A) M -
v0 M7 U8 g" P3 E; X8 H' e - - [% h8 s, u5 a+ \( c' N" \
- ! Y" Y5 @5 _, \ E/ [
- Java代码
4 Y) V z2 x/ R$ `7 [ - 1.<?xml version="1.0" encoding="UTF-8"?>
A4 H0 g& I7 t/ G6 P( f - 2.<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" ; _- }4 L a3 _- ^) [" S" L0 c
- 3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. L- L/ [7 F2 [ - 4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
% A( @. w. \3 m! ? - 5. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
2 {) O6 j9 Z$ l ]+ d% A8 }+ J - 6.
" K2 ?8 h4 n- L. W- j - 7. <!-- + E2 ]! M4 ~; d8 \/ k4 _/ T" t
- 8. 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 . U4 z' }* T" g. \0 s0 d) [
- 9. -->
2 J& L! D8 x$ R" b$ D - 10. <context-param> , e! y- p) Q' _; f; ^) d+ p
- 11. <param-name>contextConfigLocation</param-name> ' K9 i3 p6 l3 f; b8 V
- 12. <param-value>classpath:beans.xml</param-value><!-- 多个配置文件的写法 classpath:beans1.xml,classpath:beans2.xml,classpath:beans3.xml --> # Y; i0 s1 L6 |* s- g
- 13. </context-param>
+ i) e1 m& k4 U3 n ?( E - 14. <!-- 对Spring容器进行实例化 --> 2 i- S, [7 `: b; D( j7 `
- 15. <listener>
3 t- Y" ~% }8 {& V @! l! H: r - 16. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> ' X9 p% ^1 E' l; o
- 17. </listener> 8 r! t' I+ _# {9 A: Q: i
- 18.
& R; B5 u6 Y" \( o7 o7 X - 19. <!-- struts2 的监听器 --> & k6 j6 D7 O( k3 c u( W
- 20. <filter>
# M* \/ H7 ?# |- b( p$ I) ? - 21. <filter-name>struts2</filter-name> , ?7 U" ]: x+ u9 T4 e: N' N6 K
- 22. <filter-class>
9 [0 }. U) p) Y j - 23. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> % p7 L' N" q9 q* L
- 24. </filter>
. G' e p' K( b" O+ K) d( w1 l - 25. <filter-mapping>
! D" U% L# W- v1 L3 Z) P( d. H - 26. <filter-name>struts2</filter-name>
* ]; }: [( o- T3 C8 [/ w - 27. <url-pattern>/*</url-pattern>
, s2 i p3 Q7 |- b' Q - 28. </filter-mapping>
) j+ g4 h" n f$ t - 29.
( g3 e: g) E9 v& ~$ f* f - 30. <welcome-file-list> 9 ?8 P5 p3 A/ f: M. Q
- 31. <welcome-file>index.jsp</welcome-file>
% v! Z! |, v4 L0 I6 }! Z% _( H8 `/ _ - 32. </welcome-file-list>
& A) t% l F2 d0 Q1 y+ Z: } - 33.</web-app>
. `. P3 M/ b- I/ M' O7 \( O - ) m- U+ x* G( v
- *创建相关jsp和action 4 h1 w& t3 [3 k/ v9 u. T2 m
- + w1 {) o4 `/ t1 J5 L `
- : x" P9 E7 \2 |- i9 J5 d
-
( K) T* E x5 R4 v- j r, ^- U) P - Java代码 - I2 ^. E. F' n6 a
- 1.@Controller @Scope("prototype") / }0 t' g# m8 l7 }& Z1 P
- 2.public class EmployeeManagerAction extends ActionSupport {
) h- i+ E3 X# w; m - 3. @Resource EmployeeService employeeService;
u# g+ o* k) `& R - 4. private Employee employee;
7 t5 ^0 K& ~2 R3 x/ ^+ H; d - 5.
, i' j- d; u% ~# n8 R - 6. public String addUI(){
& _1 e* m* Q# f2 \" N& ` - 7. //System.out.println("user come");
4 E0 p( `9 c+ W( y. [- c- a - 8. return SUCCESS; + q }4 F D$ o) H9 P3 F
- 9. }
8 C2 O: t, J* g- J/ _* P8 a - 10. % K) t& l. s1 ^# I
- 11. public String add(){ # k0 Z4 v' V) ]5 Z: g8 x# Y6 w! s
- 12. //System.out.println("--------------");
, |% w H) L, L, A6 h - 13. boolean result=employeeService.save(employee);
2 c- \- K# G! Q0 g - 14. //ActionContext.getContext().put("genders", Gender.values());
7 j2 }7 ]; I' V- ~4 u - 15. if(result){ D' z+ ~5 K6 i7 Z9 T8 e# {
- 16. ActionContext.getContext().put("message", "保存成功!"); ; V( E/ I6 o' G6 L3 x% w: X: f0 b
- 17. }else{ $ t X5 Z6 I9 N2 B& @ H
- 18. ActionContext.getContext().put("message", "保存失败!");
+ N0 Y) {6 v& `" |1 D, G% Q - 19. } 2 W7 ?, E$ X- a0 ~4 K
- 20. return "message"; - ]0 p! ?+ [- z% [& ?
- 21. } # D/ L8 T9 T7 f9 q
- 22.
2 [+ i5 Q! i7 Q6 \( F% q0 b% w D - 23. public Employee getEmployee() { , m( C( W4 ^- y5 u6 k
- 24. return employee; " T7 t7 x" x* T N
- 25. } " p- J/ C7 j/ [
- 26.
* g( i5 b: I+ T - 27. public void setEmployee(Employee employee) {
" v8 q& l& {) |* m - 28. this.employee = employee;
L6 s ]) t1 M l1 T- N/ k - 29. }
( k) k2 y& P2 N6 {! J - 30.}
复制代码 , i, x8 }6 N' i/ s
0 J3 w! n- B L& P5 j |
|