您的位置:首页 > 编程语言 > Java开发

spring jdbc+HibernateTemplate配置方法

2017-09-30 00:00 357 查看
首先说一下为什么要这样来配置:

spring的jdbc可以灵活的与数据库打交道,但是sql语句要自己来写,增删改查会比较复杂一点。这里我们要共用一个事务,那就是hibernate的事务,也同用一个数据库连接池。这们我们就将比较复杂的操作交给hibernate,将会影响性能的一些操作或者是比较复杂操作交给spring jdbc。

第一步:加入spring jar包或者hibernate jar

第二步我们来看一下spring的配置文件:applicationContext.xml

<!-- 拿到配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 !!!");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息