Struts2+Hibernate3.2+Sprint2.5 整合

tendencyrheumaticInternet και Εφαρμογές Web

12 Νοε 2013 (πριν από 3 χρόνια και 7 μήνες)

226 εμφανίσεις

Struts2+Hibernate3.2+Sprint2.5
整合

H
ibernate
使用数据库连接池


MyEclipse6.5 Tomcat6.0


创建
项目,








整合
Hibernate

右键项目,
MyEclipse

>Add Hibernate Capabilities



















使用
Spring
管理,把勾去掉












整合
Spring2.5

右键项目,
MyEclipse

>AddSpring Capabilities









导入数据库连接池包:
proxool
-
0.9.1.jar proxool
-
cglib.jar

和数据库驱动包


mysql
-
connector
-
java
-
5.0.8
-
bin.jar





编写
src/jdbc.properties
文件


db.driver=
com.mysql.jdbc.Driver

db.url=
jdbc
:
mysql://localhost:330
6
/tuanwei3

db.user=
root

db.password=
123456

db.alias=
MySqlPool

db.hou
seKeepingTestSql=
select

1

db.characterEncoding=
UTF
-
8

db.maximumConnectionCount=
50

db.minimumConnectionCount=
20


编写
applicationContext.xml
文件

<?
xml
version
=
"1.0"
encoding
=
"UTF
-
8"
?>

<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://w
ww.w3.org/2001/XMLSchema
-
instance"


xmlns:jee
=
"http://www.springframework.org/schema/jee"
xmlns:tx
=
"http://www.springframework.org/schema/tx"


xmlns:context
=
"http://www.springframework.org/schema/context"


xsi:schemaLocation
=
"http://www.springframework.org
/schema/beans
http://www.springframework.org/schema/beans/spring
-
beans
-
2.5.xsd






http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring
-
tx
-
2.5.xsd






http://www.springframework.org/schema/jee
http://www.springframewor
k.org/schema/jee/spring
-
jee
-
2.5.xsd






http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring
-
context
-
2.5.xsd"


default
-
lazy
-
init
=
"true"
>


<!
--

关于
spring
启动的优化

default
-
lazy
-
init="true"
--
>




<
bean
id
=
"propertyCon
figurer"
class
=
"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
"
>



<
property
name
=
"location"
>




<
value
>
classpath:jdbc.properties
</
value
>



</
property
>


</
bean
>



<!
--

使用
proxool
连接池配置数据源

--
>


<
bean
id
=
"dataSource"
class
=
"org.lo
gicalcobwebs.proxool.ProxoolDataSource"
>





<
property
name
=
"driver"
value
=
"${db.driver}"
/>



<
property
name
=
"driverUrl"
value
=
"${db.url}"
/>



<
property
name
=
"user"
value
=
"${db.user}"
/>



<
property
name
=
"password"
value
=
"${db.password}"
/>



<
property
name
=
"alias"
value
=
"${db.alias}"
/>



<
property
name
=
"houseKeepingTestSql"
value
=
"${db.houseKeepingTestSql}"
/>



<
property
name
=
"maximumConnectionCount"
value
=
"${db.maximumConnectionCount}"
/>



<
property
name
=
"minimumConnectionCount"
value
=
"${db.minimumConnectio
nCount}"
/>



<
property
name
=
"delegateProperties"
value
=
"characterEncoding=${db.characterEncoding}"
/>



<!
--




alias
别名名字




houseKeepingTestSql=select CURRENT_DATE
当连接为空闲连接时,




用此条
sql
语句来测试是否空闲中。如果
sql
语句不存在,那么测试将被忽略。





maximum
-
connection
-
lifetime

最大连接生命周期

默认值:
4
小时




maximum
-
active
-
time


最大活动时间

默认值:
5
分钟




maximum
-
connection
-
count
最大连接数

默认值:
15





minimum
-
connection
-
count
最小连接数

默认值:
5






--
>


</
bean
>


<
bean
id
=
"sessionFactory"
class
=
"org.springframework.orm.hibernate3.LocalS
essionFactoryBean"
>



<
property
name
=
"dataSource"
ref
=
"dataSource"
/>



<!
--

hibernate
配置文件所在地

--
>



<
property
name
=
"mappingDirectoryLocations"
>




<
list
>




<
value
>
classpath:
/Junit/test
</
value
>




</
list
>



</
property
>



<!
--

配置
hibernate
属性

如第一个方言等
--
>



<!
--





1.hibernate.dialect Hibernate SQL
方言

表示连接那种数据库





2.hibernate.query.substitutions






你可以使用
hibernate.query.substitutions
定义新的
Hibernate
查询短语。比如
说:





hibernate.query.substitutions true 1, false 0





这个配置意思是当你在
Hibernate
里面输入
true
的时候,
Hibernate
会转化为
1
插入数
据库,





当你在
Hibernate
里面输入
false
的时候,
Hibernate
会转化为
0
插入数据库,后面的
Y

N
同理。





对于某些数据库,例如
Oracle
来说,没有
boolean
数据类型,就是采用
1
代表
true

0
代表
false






因此使用这个配置在
Hibernate
里面直接用
true/false
会非常直观。




hibernate.query.substitutions toLowercase=LOWER





这可以让你重新命名
SQL

LOWER
函数。






3.hibernate.
jdbc.batch_size
一个非零值,会开启
Hibernate
使用
JDBC2
的批量更
新功能取值
.
建议值在

5


30
之间。






4.hibernate.cache.provider_class
指定一个自定义的
CacheProvider
缓存提供
者的类名
.
取值
. classname.of.CacheProvider





5.hibernate.cache.provider_configuration_file_resource_path
hibernate
缓存文件路径



6.update
如果数据库中不存在表则生成,存在如果有增加自动增加,开发使用
update
,生
产一般不设置



--
>



<
property
name
=
"hibernateProperties"
>




<
value
>




hibernate.hbm2ddl.auto




hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect




hibernate.query.substitutions=true 1, false 0




hibernate.jdbc.batch_size=20




hibernate.hbm2ddl.auto=update




hibernate.show_sql=true




hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider




hibernate.cache.provider_configuration_file_resource_path=/ehcache
-
hiberna
te.xml




</
value
>




<!
--

hibernate.cache.provider_configuration_file_resource_path





指定缓存文件路径和文件名





--
>



</
property
>


</
bean
>




<!
--

事务配置

配置事务管理器
--
>


<
bean
id
=
"txManager"
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
>



<
property
name
=
"sessionFactory"
ref
=
"sessionFactory"
/>


</
bean
>


<!
--

使用
annotation
自动注册
bean,
并检查
@Required,@Autowired
的属性已被注入




base
-
package="com.wlb"

com.wlb
下的包都纳入管理


--
>


<
context:component
-
scan
base
-
package
=
"
Junit.test
"
/>




<!
--

使用
annotation
定义事务

采用注解的方式管理


:@Server @Controller @Repository
@component
--
>


<
tx:annotation
-
driven
transact
ion
-
manager
=
"txManager"
/>

</
beans
>




编写

Junit
测试
Hibernate

Sprint
集成


新建包

JUnit/test

application.xml
文件配置中注意包名要一致

BaseDao.java


package

JUnit.test;


public

interface

BaseDao {


public

void

save(
Object

obj);

}


BaseDaoImpl.java


package

JUnit.test;


import

org.hibernate.Session;

import

org.hibernate.SessionFactory;

import

org.springframework.beans.factory.annotation.Autowired;

import

org.springframework.stereotype.Repository;

import

org.springframework.transaction.annotation.Transactional
;


@Repository

@
Tran
sactional

public

class

BaseDaoImpl
implements

BaseDao {




@Autowired



protected

SessionFactory
sessionFactory
;




public

void

setSessionFactory(SessionFactory sessionFactory){



this
.
sessionFactory

= sessionFactory;


}




public

Session getSession(){



r
eturn

sessionFactory
.getCurrentSession();


}




public

void

save(Object obj){



getSession().save(obj);


}


}







Person.java
实体类

package

Junit.test;

import

java.io.Serializable;

public

class

Person
implements

Serializable {


private

Long
id
;


private

Str
ing
name
;


private

int

age
;


public

Long getId() {



return

id
;


}


public

void

setId(Long id) {



this
.
id

= id;


}


public

String getName() {



return

name
;


}


public

void

setName(String name) {



this
.
name

= name;


}


public

int

getAge() {



return

age
;


}


public

void

setAge(
int

age) {



this
.
age

= age;


}

}

Person.hbm.xml hibernate
配置文件

<?
xml
version
=
"1.0"
?>

<!
DOCTYPE
hibernate
-
mapping
PUBLIC


"
-
//Hibernate/Hibernate Mapping DTD//EN"


"http://hibernate.sourceforge.net/hibernate
-
mapping
-
3.0.dtd"
>


<
hibe
rnate
-
mapping
package
=
"Junit.test"
>


<
class



name
=
"Person"



table
=
"PERSON"


>



<
id




name
=
"id"




type
=
"java.lang.Long"




column
=
"PERSON_ID"



>




<
generator
class
=
"native"
/>



</
id
>



<
property




name
=
"name"




column
=
"name"




type
=
"java.lang.Stri
ng"




length
=
"20"



/>



<
property




name
=
"age"




column
=
"age"




type
=
"java.lang.Integer"




length
=
"10"



/>


</
class
>


</
hibernate
-
mapping
>


TestDao.java
测试文件

package

JUnit.test;


import

org.junit.AfterClass;

import

org.junit.BeforeClass;

import

org.j
unit.Test;

import

org.springframework.context.ApplicationContext;

import

org.springframework.context.support.ClassPathXmlApplicationContext;


import

JUnit.test.Person;



public

class

TestDao {



private

static

ApplicationContext
cxt
;


private

static

BaseDa
o
baseDao
;



@BeforeClass


public

static

void

setUpBeforeClass()
throws

Exception {



try
{




cxt

=
new

ClassPathXmlApplicationContext(
"applicationContext.xml"
);




baseDao

= (BaseDao)
cxt
.getBean(
"baseDaoImpl"
);



}
catch
(Exception e){




e.getStackTrace();



}






}



@AfterClass


public

static

void

tearDownAfterClass()
throws

Exception {


}



@Test


public

void

testSave(){



for
(
int

i=0;i<20;i++){




Person ps =
new

Person();




ps.setName(
"chenbo"
+i);




ps.setAge(i);




baseDao
.save(ps);



}


}

}


在数据库中
新建指定的数据库,运行
TestDao
保存数据进数据库,集成成功。


集成
Struts2.0.

使用
Struts2.0.11

导入包

commons
-
io
-
1.3.2.jar freemarker
-
2.3.8.jar ognl
-
2.6.11.jar

Struts2
-
core
-
2.0.11.jar xwork
-
2.0.4.jar struts2
-
spring
-
plugin
-
2.0.11.jar

看有无重复的
jar
包,去掉
(否则会引起冲突
报错

,如:
asm.2.2.3.jar


可以通过
Referen
ced libraries
右键,

查看
buildi path
-


configure

build path
安字母顺序排序看有无重复



src
下新建
struts.xml
文件

注意要


<struts></struts>


<?
xml
version
=
"1.0"
encoding
=
"UTF
-
8"
?>

<!
DOCTYPE
struts
PUBLIC


"
-
//Apache Software Foundation//DTD Struts Configuration 2.1//EN"


"http
://struts.apache.org/dtds/struts
-
2.1.dtd"
>

<
struts
>


</
struts
>



web.xml
文件中声明
struts2
过滤器

<!
--

struts2
过滤器

--
>


<
filter
>



<
filter
-
name
>
struts2
</
filter
-
name
>


<
filter
-
class
>
org.apache.struts2.dispatcher.FilterDispatcher
</
filter
-
class
>


</
filter
>


<
filter
-
ma
pping
>



<
filter
-
name
>
struts2
</
filter
-
name
>



<
url
-
pattern
>
*.do
</
url
-
pattern
>

</
filter
-
mapping
>




web.xml
文件中声明
Spring
监听器

<!
--

spring
容器实例化,声明
spring
的监听器

--
>


<
listener
>


<
listener
-
class
>
org.springframework.web.context.ContextLoaderListener
</
lis
tener
-
class
>


</
listener
>


web.xml
文件中配置


<!
--

指定
spring
配置文件

--
>


<
context
-
param
>



<
param
-
name
>
contextConfigLocation
</
param
-
name
>



<
param
-
value
>




classpath:applicationContext.xml



</
param
-
value
>


</
context
-
param
>


S
rc
下配置
struts.properties

#struts
接收的后缀名

struts.action
.extension=
do

#

struts2
交给
spring
管理,指定
Struts 2
默认的
ObjectFactory Bean
,该属性默认值是
spring


struts.objectFactory=spring

#
允许动态方法调用

struts.enable.DynamicMethodInvocation=
false

#
是否为
strtus
开发模式,如果设置该属性为
true
,则可以在应用出错时显示更多、更友好的出错提示。

struts.devMode=
false

#
默认的国际化地区信息

struts.l
ocale=
zh_CN

#
国际化信息内码

#struts.i18n.encoding=GBK

#
默认的
UI template
主题,关于
struts2
页面布局

struts.ui.theme=
simple

#
该属性指定
Struts 2
应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文
件名以英文逗号(
,
)隔开。

#struts.custom.i18n.resources=i18n

#
该属性指定视图主题所需要模板文件的位置,该属性的默认值是
template
,即默认加载
template
路径下

模板文件。

struts.ui.templateDir=
/WEB
-
INF/template

#
该属性指定上传文件的临时保存路径,该属性的默认值是
javax.servlet.context.tempdir

#struts.multipart.saveDir=temp/

# multipart
请求信息的最大尺寸(文件上传用)


struts.multipart.maxSize=
8388608

#
该属性设置
Struts 2
是否允许在
Action
名中使用斜线

struts.enable.SlashesInActi
onNames=
true


Struts2+Hibernate3.2+Sprint2.5
整合

完成