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