criteria完整配置使用經驗2(集成配置)

本文配置是建立在criteria完整配置使用經驗2(集成配置)基礎上進行基礎的。今天主要來說說關於criteria的配置如何集成更方便使用。
一、hibernate.cfg.xml和hibernate.cfg.xml的集成配置
前文說到使用criteria就一定要用到hibernate.cfg.xml和hibernate.cfg.xml兩個文件。但是實際上我們項目的裏實體類的可達幾十個,總不能一個一個配置過去吧,所以這裏考慮將hibernate.cfg.xml和hibernate.cfg.xml兩個文件集成配置到application,如下所示:

	<!-- 數據庫連接池 -->
	<bean id="dataSourceForFact" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
		<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl" />
		<property name="user" value="scott" />
		<property name="password" value="oracle" />
		<property name="acquireIncrement" value="3" />
		<property name="initialPoolSize" value="3" />
		<property name="minPoolSize" value="2" />
		<property name="maxPoolSize" value="75" />
		<property name="maxIdleTime" value="600" />
		<property name="idleConnectionTestPeriod" value="900" />
		<property name="maxStatements" value="100" />
		<property name="numHelperThreads" value="10" />
	</bean>

	<!-- hibernate -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<!-- 集成hibernate.cfg.xml -->
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
				<prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
				<prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
				<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
				<prop key="javax.persistence.validation.mode">${javax.persistence.validation.mode}</prop>
				<prop key="hibernate.connection.SetBigStringTryClob">true</prop> 
			</props>
		</property>
		<!-- 集成hbm.xml ,這裏通過註解掃描實體類,而不用在hbm.xml中申明實體類了-->
		<property name="packagesToScan" value="ffcs.cn" />
	</bean>

調用:

Resource resource = new ClassPathResource("ffcs/cn/system/applicationContext.xml");
		BeanFactory factory = new XmlBeanFactory(resource);
		SessionFactory sessionFactory = (SessionFactory) factory.getBean("sessionFactory");
		Session s = sessionFactory.openSession();
		s.beginTransaction();
		Criteria c = s.createCriteria(Product.class);

二、 使用工廠模式創建sessionFactory‘
如上面所示,我們每次使用criteria都需要重新創建sessionFactory,封裝性較差,所以這裏可以考慮使用工廠模式創建sessionFactory。

  1. xml配置
    由於使用時候報錯,提示需要用到事務的支持,所以這裏配置下事務
<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
		<property name="dataSource" ref="dataSourceForFact" />
	</bean>
	<tx:annotation-driven transaction-manager="transactionManager" />
  1. 父類設置
package ffcs.cn.common.dao;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
@Transactional
public class SupperDao {
	@Autowired
	protected SessionFactory sessionFactory;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public Session getSession() {
		System.out.println(sessionFactory);
		return sessionFactory.getCurrentSession();
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public SupperDao(final SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public SupperDao() {
		super();
	}
}

  1. 子類調用
package ffcs.cn.peam.card.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;
import ffcs.cn.common.dao.SupperDao;
import ffcs.cn.peam.card.domain.Card;

@SuppressWarnings("unchecked")
@Repository
public class CardDao extends SupperDao {

	public String getdata() {
		Session session = this.getSession();
		Criteria c = session.createCriteria(Card.class);
		List<Card> ps = c.list();

		for (Card p : ps) {
			System.out.println(p.getUser());
		}
		return null;

	}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章