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