spring jdbc+HibernateTemplate配置方法

首先說一下爲何要這樣來配置: html

     spring的jdbc能夠靈活的與數據庫打交道,可是sql語句要本身來寫,增刪改查會比較複雜一點。這裏咱們要共用一個事務,那就是hibernate的事務,也同用一個數據庫鏈接池。這們咱們就將比較複雜的操做交給hibernate,將會影響性能的一些操做或者是比較複雜操做交給spring jdbc。
    第一步:加入spring jar包或者hibernate jar
    第二步咱們來看一下spring的配置文件:applicationContext.xml java

<!-- 拿到配jdbc配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="jdbc.properties" />
</bean>

<!-- 配置dbcp鏈接池,注意要加入它的第三包jar包 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	<property name="driverClassName" value="${jdbc.driverClassName}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
	<!-- 鏈接池啓動時的初始值 -->
	<property name="initialSize" value="1" />
	<!-- 鏈接池的最大值 -->
	<property name="maxActive" value="500" />
	<!-- 最大空閒值.當通過一個高峯時間後,鏈接池能夠慢慢將已經用不到的鏈接慢慢釋放一部分,一直減小到maxIdle爲止 -->
	<property name="maxIdle" value="2" />
	<!-- 最小空閒值.當空閒的鏈接數少於閥值時,鏈接池就會預申請去一些鏈接,以避免洪峯來時來不及申請 -->
	<property name="minIdle" value="1" />
</bean>

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="packagesToScan">
		<list>
			<value>com.lushuifa.entity</value>
		</list>
	</property>
	<property name="hibernateProperties">
		<value>
			hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
			hibernate.show_sql=true
			hibernate.hbm2ddl.auto=update
		</value>
	</property>
</bean>

<bean id="hibernateTransaction" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory" ref="mySessionFactory"></property>
</bean>

<!-- 配置spring jdbc事務操做模板裏面會有一些增刪改查的操做,跟HibernateTemplate,JpaTemplate是一個意思 ,特色不一而已 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource">
		<ref bean="dataSource" />
	</property>
</bean>

<bean id="baseDao" class="com.lushuifa.base.dao.impl.BaseDaoImpl">
	<property name="sessionFactory" ref="mySessionFactory"></property>
	<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>



第三步咱們來看一下Dao
package com.lushuifa.base.dao.impl;

import java.sql.Types;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.lushuifa.base.dao.BaseDao;
import com.lushuifa.entity.Users;

public class BaseDaoImpl<T> extends HibernateTemplate implements BaseDao<T> {

	private JdbcTemplate jdbcTemplate;

	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	/**
	 * 利用spring jdbc的方式來進行保存
	 */
	public void saveUsers(Users users) {
		jdbcTemplate.update("insert into t_users(username,password) values(?)", new Object[] { users.getUserName(), users.getPassword() }, new int[] { Types.VARCHAR, Types.VARCHAR });
	}

	/**
	 * 利用hibernate的方式來保存
	 * 
	 * @param t
	 */
	public void saveT(T t) {
		this.save(t);
	}
}



最後來測試一下:
package com.lushuifa.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.lushuifa.base.dao.BaseDao;
import com.lushuifa.entity.Users;

public class UserDaoTest {

	public BaseDao getBaseDao() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		return (BaseDao) ac.getBean("baseDao");
	}

	/**
	 * 這裏是hibernateTemplate來進行添加
	 */
	@Test
	public void saveUsers() {
		Users users = new Users();
		users.setUserName("這是hibernate的方式添加的");
		users.setPassword("tempPassword");
		this.getBaseDao().saveT(users);
		System.out.println("save successFully !!!");
	}

	/**
	 * 這裏是添加Spring jdbc
	 */
	@Test
	public void saveUsers2() {
		Users users = new Users();
		users.setUserName("這是spring jdbc的方式添加的");
		users.setPassword("tempPassword");
		this.getBaseDao().saveUsers(users);
		System.out.println("save successFully !!!");
	}
}
相關文章
相關標籤/搜索