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