spring3.2+hibernate4.1+struts2.3集成 事务提交不了

鹏城二少 发布于 2013/08/14 20:10
阅读 1K+
收藏 0

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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.1.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
	
	<!--********************************************* 工具类配置 *********************************************-->
	<!-- 1、获取登录前请求的url地址 -->
	<bean id="prePageInterceptor" class="com.insigma.books.util.GetPreUrlInterceptor" scope="prototype"></bean>
	<!-- 2、Hibernate操作数据库工具类 -->
	<bean id="hibernateTool" class="com.insigma.books.util.HibernateTool2" scope="prototype">
	    <constructor-arg name="sessionFactory" ref="sessionFactory"></constructor-arg>
	</bean>
	<!-- 3、页面信息 -->
	<bean id="pagetor" class="com.insigma.books.util.Pagetor" scope="prototype"></bean>
	<!-- 4、非法用户过滤 -->
	<bean id="userFilter" class="com.insigma.books.util.UserFilter" scope="prototype"></bean>
	<!-- 5、评论非法拦截 -->
	<bean id="authority" class="com.insigma.books.util.UserInteceptor" scope="prototype"></bean>
	
	
	<!--****************************************** 配置SessionFactory ****************************************-->
	<!-- 配置databaseSource -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" scope="singleton">
	    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	    <property name="url" value="jdbc:mysql://localhost:3306/taobaoke?characterEncoding=UTF-8"/>
	    <property name="username" value="root"/>
	    <property name="password" value="lyl123"/>
	    <!-- 连接池的最大值 -->
	    <property name="maxActive" value="500"/>
        <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
	    <property name="maxIdle" value="2"/>
	    <!-- 提交方式 -->  
        <property name="defaultAutoCommit" value="false"></property>  
    </bean>
    
    <!-- 配置sessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" scope="singleton">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
	        <list>
	            <value>com/insigma/books/vo/Tcard.hbm.xml</value>
	            <value>com/insigma/books/vo/Tuserinfo.hbm.xml</value>
	            <value>com/insigma/books/vo/Tsysuser.hbm.xml</value>
	            <value>com/insigma/books/vo/Tbooks.hbm.xml</value>
	            <value>com/insigma/books/vo/Tcomment.hbm.xml</value>
	        </list>
        </property>
        <property name="hibernateProperties">
	        <value>
	        	hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
	        	hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
				hibernate.show_sql=true
				hibernate.format_sql=true
				javax.persistence.validation.mode=none
			</value>
        </property>
    </bean>
    
    <!-- 定义事务管理器(声明式的事务) -->  
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" >
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add"        propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="edit"       propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="delete"     propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="executeHQL" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="executeSQL" propagation="REQUIRED" rollback-for="Exception"/>
        </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <aop:pointcut id="interceptorPointCuts"  expression="execution(* com.books.util.HibernateTool2.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />      
    </aop:config>   

	<!--****************************************** dao实现类配置 *********************************************-->
	<!-- 1、首页 -->
	<bean id="indexDAOImpl" class="com.insigma.books.dao.impl.IndexDAOImpl" scope="prototype">
	    <constructor-arg name="hibernateTool" ref="hibernateTool"></constructor-arg>
	</bean>
	<!-- 2、登录 -->
	<bean id="loginDAOImpl" class="com.insigma.books.dao.impl.LoginDAOImpl" scope="prototype">
	    <constructor-arg name="hibernateTool" ref="hibernateTool"></constructor-arg>
	</bean>
	<!-- 3、评价管理 -->
	<bean id="pjglDAOImpl" class="com.insigma.books.dao.impl.PjglDAOImpl" scope="prototype">
	    <constructor-arg name="hibernateTool" ref="hibernateTool"></constructor-arg>
	</bean>
	<!-- 4、注册 -->
	<bean id="registerDAOImpl" class="com.insigma.books.dao.impl.RegisterDAOImpl" scope="prototype">
	    <constructor-arg name="hibernateTool" ref="hibernateTool"></constructor-arg>
	</bean>
	<!--5、书籍管理 -->
	<bean id="sjglDAOImpl" class="com.insigma.books.dao.impl.SjglDAOImpl" scope="prototype">
	    <constructor-arg name="hibernateTool" ref="hibernateTool"></constructor-arg>
	</bean>
	<!-- 6、用户管理 -->
	<bean id="yhglDAOImpl" class="com.insigma.books.dao.impl.YhglDAOImpl" scope="prototype">
	    <constructor-arg name="hibernateTool" ref="hibernateTool"></constructor-arg>
	</bean>
	
	
	<!--**************************************** service实现类配置 *******************************************-->
	<!-- 1、首页服务类 -->
	<bean id="indexServiceImpl" class="com.insigma.books.service.impl.IndexServiceImpl" scope="prototype">
	    <constructor-arg name="dao" ref="indexDAOImpl"></constructor-arg>
	</bean>
	<!-- 2、登录服务类 -->
	<bean id="loginServiceImpl" class="com.insigma.books.service.impl.LoginServiceImpl" scope="prototype">
	    <constructor-arg name="dao" ref="loginDAOImpl"></constructor-arg>
	</bean>
	<!-- 3、评价服务类 -->
	<bean id="pjglServiceImpl" class="com.insigma.books.service.impl.PjglServiceImpl" scope="prototype">
	    <constructor-arg name="dao" ref="pjglDAOImpl"></constructor-arg>
	</bean>
	<!-- 4、注册服务类 -->
	<bean id="registerServiceImpl" class="com.insigma.books.service.impl.RegisterServiceImpl" scope="prototype">
	    <constructor-arg name="dao" ref="registerDAOImpl"></constructor-arg>
	</bean>
	<!-- 5、书籍管理服务类 -->
	<bean id="sjglServiceImpl" class="com.insigma.books.service.impl.SjglServiceImpl" scope="prototype">
	    <constructor-arg name="dao" ref="sjglDAOImpl"></constructor-arg>
	</bean>
	<!-- 6、用户管理服务类 -->
	<bean id="yhglServiceImpl" class="com.insigma.books.service.impl.YhglServiceImpl" scope="prototype">
	    <constructor-arg name="dao" ref="yhglDAOImpl"></constructor-arg>
	</bean>
	
	
	<!--********************************************* Action配置 *********************************************-->
	<!-- 1、图片验证码 -->
	<bean id="imageAction" class="com.insigma.books.action.SecurityCodeImageAction" scope="prototype"></bean>
	<!-- 2、首页 -->
	<bean id="indexAction" class="com.insigma.books.action.IndexAction" scope="prototype">
	    <constructor-arg name="service" ref="indexServiceImpl"></constructor-arg>
	    <constructor-arg name="pagetor" ref="pagetor"></constructor-arg>
	</bean>
	<!-- 3、登录 -->
	<bean id="loginAction" class="com.insigma.books.action.LoginAction" scope="prototype">
	    <constructor-arg name="service" ref="loginServiceImpl"></constructor-arg>
	</bean>
	<!-- 4、注册 -->
	<bean id="registerAction" class="com.insigma.books.action.RegisterAction" scope="prototype">
	    <constructor-arg name="service" ref="registerServiceImpl"></constructor-arg>
	</bean>
	<!-- 5、用户管理 -->
	<bean id="yhglAction" class="com.insigma.books.action.YhglAction" scope="prototype">
	    <constructor-arg name="service" ref="yhglServiceImpl"></constructor-arg>
	    <constructor-arg name="pagetor" ref="pagetor"></constructor-arg>
	</bean>
	<!-- 6、书籍管理 -->
	<bean id="sjglAction" class="com.insigma.books.action.SjglAction" scope="prototype">
	    <constructor-arg name="service" ref="sjglServiceImpl"></constructor-arg>
	    <constructor-arg name="pagetor" ref="pagetor"></constructor-arg>
	</bean>
	<!-- 7、评价管理 -->
	<bean id="pjglAction" class="com.insigma.books.action.PjglAction" scope="prototype">
	    <constructor-arg name="service" ref="pjglServiceImpl"></constructor-arg>
	    <constructor-arg name="pagetor" ref="pagetor"></constructor-arg>
	</bean>
	
</beans>

hibernate代码:

package com.insigma.books.util;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

/**
 * Hibernate操作数据库工具类(防sql注入)
 * 
 * @author liyulin
 * 
 * @version 2.2 2013-08-11
 * 
 */

public final class HibernateTool2 {
	private SessionFactory sessionFactory;
	
	public HibernateTool2(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	/*********************************************** HQL操作数据库 ***********************************************/
	/**
	 * 增加一条记录
	 * 
	 * @param obj
	 * 
	 * @return -1 增加失败;1 增加成功
	 * 
	 */
	public int add(Object obj) {
		Session session = sessionFactory.openSession();
		try {
			session.save(obj);
			return 1;
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
	}

	/**
	 * 修改一条记录
	 * 
	 * @param obj
	 * 
	 * @return -1 修改失败;1 修改成功
	 * 
	 */
	public int edit(Object obj) {
		Session session = sessionFactory.openSession();
		try {
			session.update(obj);
			return 1;
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
	}

	/**
	 * 删除一条记录
	 * 
	 * @param obj
	 * 
	 * @return -1 删除失败;1 删除成功
	 * 
	 */
	public int delete(Object obj) {
		Session session = sessionFactory.openSession();
		try {
			session.delete(obj);
			return 1;
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
	}

	
	
	
	/**
	 * 查询一条记录(HQL:使用positional parameter的方式进行参数绑定)
	 * 
	 * @param hql
	 *            hql语句(参数用"?"表示)
	 * 
	 * @param params
	 *            hql参数数组
	 * 
	 * @return Object
	 * 
	 */
	public Object findForObjectByHql(String hql, Object[] params) {
		Session session = sessionFactory.openSession();
		Object object = null;
		try {
			// 参数绑定
			Query query = session.createQuery(hql);
			if (params != null) {
				for (int i = 0, size = params.length; i < size; i++) {
					query = query.setParameter(i, params[i]);
				}
			}
			object = query.uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		} 
		return object;
	}

	/**
	 * 分页查询(HQL:使用positional parameter的方式进行参数绑定)
	 * 
	 * @param hql
	 *            hql语句(参数用"?"表示)
	 * 
	 * @param params
	 *            hql参数数组
	 * 
	 * @param page
	 *            开始页
	 * 
	 * @param rows
	 *            每页的记录条数
	 * 
	 * @return List 返回结果
	 * 
	 */
	@SuppressWarnings("rawtypes")
	public List findForListByHql(String hql, Object[] params, int page, int rows) {
		List list = null;
		Session session = null;

		try {
			session = sessionFactory.openSession();
			// 参数绑定
			Query query = session.createQuery(hql);
			if (params != null) {
				for (int i = 0, size = params.length; i < size; i++) {
					query = query.setParameter(i, params[i]);
				}
			}
			query.setFirstResult((page - 1) * rows);// 设置第几页
			query.setMaxResults(rows); // 设置每页多少条记录

			list = query.list();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return list;
	}

	/**
	 * 删除、更改(HQL:使用positional parameter的方式进行参数绑定)
	 * 
	 * @param hql
	 *            hql语句(参数用"?"表示)
	 * 
	 * @param params
	 *            hql参数数组
	 * 
	 * @return 0:失败;非0:成功
	 * 
	 */
	public int executeHQL(String hql, Object[] params) {
		Session session = sessionFactory.openSession();
		int success = 0;// 是否操作成功

		try {
			// 参数绑定
			Query query = session.createQuery(hql);
			if (params != null) {
				for (int i = 0, size = params.length; i < size; i++) {
					query = query.setParameter(i, params[i]);
				}
			}
			success = query.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return success;
	}

	/*********************************************** 标准SQL操作数据库 ***********************************************/

	/**
	 * 查询一条记录(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
	 * 
	 * @param sql
	 *            sql语句(参数用"?"表示)
	 * 
	 * @param params
	 *            sql参数数组
	 * 
	 * @return Object
	 * 
	 */
	@SuppressWarnings("rawtypes")
	public Object findForObjectBySql(String sql, Object[] params, Class obj) {
		Session session = sessionFactory.openSession();
		Object object = null;
		try {
			SQLQuery query = session.createSQLQuery(sql);
			// 参数赋值
			if (params != null) {
				for (int i = 0, size = params.length; i < size; i++) {
					query = (SQLQuery) query.setParameter(i, params[i]);
				}
			}

			object = query.addEntity(obj).uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		} 
		return object;
	}

	/**
	 * 分页查询(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
	 * 
	 * @param sql
	 *            sql语句(参数用"?"表示)
	 * 
	 * @param params
	 *            sql参数数组
	 * 
	 * @param page
	 *            开始页
	 * 
	 * @param rows
	 *            每页的记录条数
	 * 
	 * @param obj
	 *            欲查询的对象的class
	 * 
	 * @return List 返回结果
	 * 
	 */
	@SuppressWarnings("rawtypes")
	public List findForListBySql(String sql, Object[] params, int page,
			int rows, Class obj) {
		Session session = sessionFactory.openSession();
		List list = null;

		try {
			SQLQuery query = session.createSQLQuery(sql);
			// 参数赋值
			if (params != null) {
				for (int i = 0, size = params.length; i < size; i++) {
					query = (SQLQuery) query.setParameter(i, params[i]);
				}
			}

			list = query.addEntity(obj).setFirstResult((page - 1) * rows)
					.setMaxResults(rows).list();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return list;
	}

	/**
	 * 增加、删除、更改(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
	 * 
	 * @param sql
	 *            sql语句(参数用"?"表示)
	 * 
	 * @param params
	 *            sql参数数组
	 * 
	 * @return 0:失败;非0:成功
	 * 
	 */
	public int executeSQL(String sql, Object[] params) {
		Session session = sessionFactory.openSession();

		int success = 0;// 是否操作成功
		try {
			SQLQuery query = session.createSQLQuery(sql);
			// 参数赋值
			if (params != null) {
				for (int i = 0, size = params.length; i < size; i++) {
					query = (SQLQuery) query.setParameter(i, params[i]);
				}
			}
			success = query.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return success;
	}
}

进行增、删、改时,事务不起作用。请问哪里错了?

加载中
0
乾坤摄
乾坤摄
你看下把,spring el表达式 好像有问题的
0
乾坤摄
乾坤摄

        <aop:pointcut id="interceptorPointCuts"  expression="execution(* com.books.util.HibernateTool2.*.*(..))" />

com.books.util.HibernateTool2.*.*(..) 感觉是不是多了一层,第一个.*是指HibernateTool2下的所有方法,但第二.*我就看不出来了

*..service*..*(..)) 这个是我一般配置的是比较泛的,就是通知service包下的所有所有类的所有方法

返回顶部
顶部