SSH Spring3事务配置

起初遇到的问题就是能在页面中查询出数据,比如说登录页面可以登录,但后来发现注册之后也可以登录,不过那是在服务器没关闭之前,因为数据库没有存入数据。
		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> "可以去掉




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值