package com.fisher.base.service.impl;import com.fisher.base.dao.impl.BaseDaoImpl;
import com.fisher.base.po.SuperObject;
import com.fisher.base.service.IBaseService;import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;import javax.annotation.Resource;/**
 * Created with IntelliJ IDEA.
 * User: zhangliao
 * Date: 13-3-10
 * Time: 涓嬪崍3:43
 * To change this template use File | Settings | File Templates.
 */
@Service("baseService")
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public class BaseServiceImpl<T extends SuperObject> implements IBaseService<T> {
    private BaseDaoImpl<T> dao;

    @Resource(name="baseDao")
    @Required
public void setDao(BaseDaoImpl<T> dao){
this.dao = dao;
}

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public T getEntitybyId(Class<T> clazz, Serializable id) {
        return (T) dao.getEntityById(clazz,id);
    }    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public List<T> getAllEntity(final Class<T> clazz) {
        return dao.getAllEntity(clazz);
    }    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public final boolean save(final T obj){
        System.out.print(dao);
        return dao.save(obj);
    }    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public final boolean delete(final T obj){
        return dao.delete(obj);
    }    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public final boolean saveAll(T...objs){
        return dao.saveAll(objs);
    }    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public final boolean deleteAll(T...objs){
        return dao.deleteAll(objs);
    }
}package com.fisher.base.dao.impl;/**
 * Created with IntelliJ IDEA.
 * User: zhangliao
 * Date: 13-3-10
 * Time: 涓嬪崍2:54
 * To change this template use File | Settings | File Templates.
 */import java.io.Serializable;
import java.util.List;
import com.fisher.base.dao.IBaseDao;
import com.fisher.base.po.SuperObject;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;@Repository("baseDao")
public class BaseDaoImpl<T extends SuperObject> extends HibernateDaoSupport implements IBaseDao<T> {
   
    @Override
    @SuppressWarnings("unchecked")
    public T getEntityById(Class<T> clazz, Serializable id) {
        return (T) getSession().load(clazz,id);
    }
    @Override
    @SuppressWarnings("unchecked")
    public final List<T> getAllEntity(Class<T> clazz) {
        return getSession().createQuery("from "+clazz.getName()).list();
    }
    @Override
    public final boolean save(T obj){
        getSession().save(obj);
        return true;
    }
    @Override
    public final boolean delete(T obj){
        getSession().delete(obj);
        return true;
    }
    @Override
    public final boolean saveAll(T...objs){
        for (T obj : objs){
            save(obj);
        }
        return true;
    }
    @Override
    public final boolean deleteAll(T...objs){
        for(T obj : objs){
            delete(obj);
        }
        return true;
    }
}
<?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"
xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byName">
<!-- 使用 annotation -->
<context:annotation-config />
<!-- 使用 annotation 自动注册bean,并检查@Controller, @Service, @Repository注解已被注入 -->
<context:component-scan base-package="com.fisher" />
<!-- hibernate属性配置 -->
<context:property-placeholder location="classpath:hibernate/hibernate.properties"/>
<!-- Hibernate 配置管理 -->
<import resource="applicationContext-persistence.xml" />
</beans>
<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- C3P0 数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${hibernate.connection.driver_class}"/>
        <property name="jdbcUrl" value="${hibernate.connection.url}"/>
        <property name="properties"> 
            <props> 
                <prop key="user">${hibernate.connection.username}</prop>
                <prop key="password">${hibernate.connection.password}</prop>
            </props> 
        </property>
    </bean>
    
    <!-- SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.fisher.*.po"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<!--<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>-->
<!--<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> -->
<!--<prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>-->
</props>
</property>
</bean>

<!-- 配置事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 配置注解实现管理事务(cglib:proxy-target-class="true") -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

</beans>SS2H