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