spring jdbc+HibernateTemplate配置方法
首先说一下为什么要这样来配置:
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 !!!"); } }