您的位置:首页 > 编程语言 > Java开发

SSH Spring3事务配置

2013-07-25 01:43 417 查看
起初遇到的问题就是能在页面中查询出数据,比如说登录页面可以登录,但后来发现注册之后也可以登录,不过那是在服务器没关闭之前,因为数据库没有存入数据。
BbsusersDAO dao = new BbsusersDAO();
ApplicationContext acx1 = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
dao = (BbsusersDAO)acx1.getBean("BbsUsersDao");
BbsUsersServiceImpl src = (BbsUsersServiceImpl) acx1.getBean("usersService");
Bbsusers user = src.findById("admin");
System.out.println(user!=null?user.getUname():null);
Date d = user.getUbirthday();
user = new Bbsusers("abc4", "张大夫4", "abc1", "54564", d, "女", "leaguer", "2.gif");
System.out.println(dao.insert(user));
在Test.java 中的main方法中用这种方式不管是dao还是service都能插入到数据库中,但是呢在服务器上dao可以因为dao中的方法使用的是session的beginTransaction() commit()方法做事务,而service我用的hibernateTemplate没有事务的使用所以从页面访问使用dao的action可以增删改查而service不行。

后来网上找了很久才知道是事务不对,我对spring也是一知半解,所以也不知道怎么表达搜索,不过还是成功了。此方法为借鉴也不知道哪儿弄的了。

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
default-autowire="byName">


需要声明的如上 其中有tx 和 context的语句添加到xml中去,这些就是声明式事务使用的标签格式所需要的

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>

sessionFactory

<!-- 配置Spring上下文的注解 -->
<context:annotation-config/>
<!-- 配置事务管理 -->
<bean id="transManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transManager"/>

<context:annotation-config/> 这句话有点重要 不写这句话就得写很多注解的bean声明 用于使用@Transactional

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class BbsTransactional {

}
在service类里面继承了这个类就行了,当然我试过写成接口但是之后数据库就没有事务提交了,也可以直接在service类里面直接在类名前面@Transactional也行

package com.project.bbs.service.impl;

import com.project.bbs.bean.Bbsusers;
import com.project.bbs.hibernate.IBbsUsersDao;
import com.project.bbs.service.IBbsUsersService;
import com.project.bbs.spring.BbsTransactional;

public class BbsUsersServiceImpl extends BbsTransactional implements IBbsUsersService {
private IBbsUsersDao usersDao;//BbsUsersDaoSpringImpl

public Bbsusers findById(String id) {
return usersDao.findById(id);
}

public boolean insert(Bbsusers user) {
return usersDao.insert(user);
}

public IBbsUsersDao getUsersDao() {
return usersDao;
}

public void setUsersDao(IBbsUsersDao usersDao) {
this.usersDao = usersDao;
}
}

抛开着一切事务配置 ,再找到解决事务不提交的问题前我找到了这个方法
在hibernate.xml里面

<session-factory>
<property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="connection.username">scott</property>
<property name="connection.password">scott</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="format_sql">true</property>
<property name="show_sql">true</property>
<!-- <property name="connection.autocommit">true</property>  -->
<property name="myeclipse.connection.profile">scott</property>
<mapping resource="com/project/bbs/bean/Bbsusers.hbm.xml" />
</session-factory>

写上这句,事务不写就可以但是网上说这种方法不太好--不是专家不懂

不写了 发泄下成功的喜悦

其中"<pre
class="java"
name="code"></pre> "可以去掉




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息