第十三章spring应用spring管理hibernateWord下载.docx
- 文档编号:16582020
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:26
- 大小:22.39KB
第十三章spring应用spring管理hibernateWord下载.docx
《第十三章spring应用spring管理hibernateWord下载.docx》由会员分享,可在线阅读,更多相关《第十三章spring应用spring管理hibernateWord下载.docx(26页珍藏版)》请在冰豆网上搜索。
}
映射文件:
User.hbm.xml
<
?
xmlversion="
1.0"
encoding="
utf-8"
>
!
DOCTYPEhibernate-mappingPUBLIC"
-//Hibernate/HibernateMappingDTD3.0//EN"
"
hibernate-mapping>
<
classname="
ch04.entity.User"
table="
usertable"
idname="
uid"
type="
java.lang.Integer"
columnname="
/>
generatorclass="
native"
/id>
propertyname="
username"
java.lang.String"
/>
password"
/class>
/hibernate-mapping>
hibernate.cfg.xml
xmlversion='
1.0'
encoding='
UTF-8'
DOCTYPEhibernate-configurationPUBLIC
"
-//Hibernate/HibernateConfigurationDTD3.0//EN"
--GeneratedbyMyEclipseHibernateTools.-->
hibernate-configuration>
session-factory>
connection.username"
root<
/property>
connection.url"
jdbc:
mysql:
//127.0.0.1:
3306/test?
&
amp;
useUnicode=true&
characterEncoding=gb2312<
dialect"
org.hibernate.dialect.MySQLDialect<
myeclipse.connection.profile"
mysql<
connection.password"
connection.driver_class"
com.mysql.jdbc.Driver<
show_sql"
true<
format_sql"
mappingresource="
ch04/entity/User.hbm.xml"
/session-factory>
/hibernate-configuration>
UserDao.java
packagech04.dao;
importch04.entity.User;
publicinterfaceUserDao{
booleanadd(Useru);
booleandel(Useru);
UsergetUserByName(Useru);
实现类,需要继承自org.springframework.orm.hibernate3.support.HibernateDaoSupport类,以便于spring可以为本类对象注入sessionfactory对象。
UserDaoImpl.java
packagech04.dao.impl;
importjava.util.List;
importorg.springframework.dao.DataAccessException;
importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;
importch04.dao.UserDao;
publicclassUserDaoImplextendsHibernateDaoSupportimplementsUserDao{
publicbooleanadd(Useru){
try{//得到操作模板
this.getHibernateTemplate().save(u);
returntrue;
}catch(DataAccessExceptione){
logger.error(e);
returnfalse;
}
publicbooleandel(Useru){
getSession().delete(u);
returnfalse;
publicUsergetUserByName(Useru){
List<
User>
ulist=(List<
)
getHibernateTemplate().findByExample(u);
if(ulist.size()!
=0)
returnulist.get(0);
else{
returnnull;
@Override
publicStringtoString(){
return"
测试"
;
配置文件:
spring-hibernate.xml
UTF-8"
beansxmlns:
xsi="
http:
//www.w3.org/2001/XMLSchema-instance"
xmlns="
//www.springframework.org/schema/beans"
xmlns:
aop="
//www.springframework.org/schema/aop"
tx="
//www.springframework.org/schema/tx"
xsi:
schemaLocation="
//www.springframework.org/schema/beanshttp:
//www.springframework.org/schema/beans/spring-beans-2.0.xsd
//www.springframework.org/schema/aophttp:
//www.springframework.org/schema/aop/spring-aop-2.0.xsd
//www.springframework.org/schema/txhttp:
//www.springframework.org/schema/tx/spring-tx-2.0.xsd"
--得到sessionfactory对象-->
beanid="
sessionFactory"
class="
org.springframework.orm.hibernate3.LocalSessionFactoryBean"
<
configLocation"
value="
classpath:
ch04/hibernate.cfg.xml"
/bean>
--为dao注入sessionfactory-->
userDao"
class="
ch04.dao.impl.UserDaoImpl"
<
refbean="
--管理事务-->
transactionManager"
org.springframework.orm.hibernate3.HibernateTransactionManager"
--通知(增强)-->
tx:
adviceid="
txadvice"
transaction-manager="
attributes>
methodname="
*"
propagation="
REQUIRED"
--详细见readme.txt
add*"
SUPPORTS"
rollback-for="
java.lang.Exception"
-->
/tx:
advice>
--接入点-->
aop:
config>
pointcutexpression="
execution(*ch04.dao..*.*(..))"
id="
cut"
advisoradvice-ref="
pointcut-ref="
/aop:
/beans>
在配置中,用<
aop:
…>
标签管理了事务的关注点,这在上次学习中已经给大家做过介绍,重点讲解一下execution的表达方式,要注意,这个方法签名定义切点的方式,支持的是方法:
execution(public**(..))
所有公有的方法,第一个*表示返回值第二个表示方法名
execution(**User(..))这里第一个星表示返回值类型
上面定义了关注所有以User结尾的方法
如:
getUser()addUser()deleteUser()
execution(*ch04.dao.UserDao.*(..))
关注userdao接口定义的方法
execution(*ch04.dao.UserDao+.*(..))
关注userdao接口和子类的方法,注意,这里包括了UserDaoImpl中定义的方法
execution(*com..*.*Dao.find*(..))
关注所有com包中子包内后缀为Dao的类里,以find开头的方法
关于参数的定义execution(*add(..))
..表示的任意多个任意类型的参数
也可以用*来表示任意类型参数
execution(*add(*,int))
execution(*add(String,..))第一个参数为String其它不限
除了上面对于相应的hibernate事务处理进行aop管理之外,还可以为事务进行更详细的配置,比如:
--
这里可以指定方法名称的定义
如
propagation事务的传播行为:
required必需的
supports支持
never从不
....
read-only事务是否是只读的
no-rollback-for不回滚的异常
rollback-for回滚的异常,可以用,分开
-->
测试类:
Test.java
packagech04.util;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
publicclassTest{
publicstaticvoidmain(String[]args){
ApplicationContextac=newClassPathXmlApplicationContext("
ch04/spring-hibernate.xml"
);
UserDaoud=(UserDao)ac.getBean("
//加用户
Useru=newUser();
u.setUsername("
admin"
//u.setPassword("
aaa"
ud.add(u);
u=ud.getUserByName(u);
System.out.println(u.getUid()+"
:
+u.getUsername()+"
+u.getPassword());
运行结果:
Hibernate:
insert
into
usertable
(username,password)
values
(?
?
select
this_.uidasuid0_0_,
this_.usernameasusername0_0_,
this_.passwordaspassword0_0_
from
usertablethis_
where
(
this_.username=?
)
1:
admin:
null
在上面的例子中,hibernate本身配置由自己完成,spring只起到辅助作用,帮助使用者完成了相应的sessionfactory、session及事务的管理。
当然还有更深入的一些方式,比如我们可以省掉hibernate的配置文件,sessionfactory完全由spring提供。
其它部分基本一置,去掉hibernate.cfg.xml就行了,所以这里只给出配置文件写法:
jee="
//www.springframework.org/schema/jee"
//www.springframework.org/schema/tx/spring-tx-2.0.xsd
//www.springframework.org/schema/jeehttp:
//www.springframework.org/schema/jee/spring-jee-2.0.xsd"
ch05.dao.impl.UserDaoImpl"
execution(*ch05.dao..*.*(..))"
id="
dataSource"
mons.dbcp.BasicDataSource"
driverClassName"
com.mysql.jdbc.Driver"
url"
characterEncoding=gb2312"
value="
root"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十三 spring 应用 管理 hibernate