用JUnit测试Spring管理Hibernate框架的一个例子

 

                                         (源代码:shTest https://github.com/TerenceJIng/javaLearn)

将JUnit 与hibernate整合起来

上述例子,分为三个包:

  • src:存放业务代码
  • test:存放测试代码
  • lib:引入Hiberante和Spring框架的jar包。

JUnit应用于Spring测试

Spring核心配置文件applicationContext.xml:

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="date"class="java.util.Date"/>
</beans>

SpringTest.java:

import java.util.Date;
import org.junit.BeforeClass;
import org.junit.Test;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
 
public class SpringTest {
       privatestatic ApplicationContext context = null; 
       /*
        * 加载Spring的核心配置文件
        */
       @BeforeClass
       publicstatic void setUpBeforeClass() throws Exception {
              context= new ClassPathXmlApplicationContext("applicationContext.xml");
       }
       @Test
       publicvoid test() {
              Datedate =  (Date)context.getBean("date");
              System.out.println(date);
       }
}

执行测试:加载进了配置文件中获取的时间

JUnit应用于Hibernate

Hibernate核心配置文件hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/HibernateConfiguration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/mytest</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="myeclipse.connection.profile">com.mysql.jdbc.Driver</property>
    </session-factory>
</hibernate-configuration>
测试类HibernateTest.java
import org.hibernate.Session;
import org.junit.Test;
public class HibernateTest {@Test public void test() {
		Session session = HibernateSessionFactory.getSession();
		System.out.println(session);
	}
}
测试执行结果:

Spring管理Hibernate

给Spring核心配置文件applicationContext.xml 引入Hibernate配置文件信息:
<?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:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml" />
	</bean>
	<bean id="date" class="java.util.Date" />
</beans>
SpringAndHibernate.java
import org.hibernate.impl.SessionFactoryImpl;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringAndHibernate {
	private static ApplicationContext context;@BeforeClass public static void setUpBeforeClass() throws Exception {
		context = new ClassPathXmlApplicationContext("applicationContext.xml");
	}@Test public void test() {
		SessionFactoryImpl bean = (SessionFactoryImpl) context.getBean("sessionFactory");
		System.out.println(bean);
	}
}
测试:
用Spring管理Hibernate需要引入持久化类包,还需要以下Hibernate会话工厂类:
HibernateSessionFactory.java类
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
/** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html }. */
public class HibernateSessionFactory {
	/** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. * The default classpath location of the hibernate config file is * in the default package. Use #setConfigFile() to update * the location of the configuration file for the current session. */
	private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
	private static final ThreadLocal < Session > threadLocal = new ThreadLocal < Session > ();
	private static Configuration configuration = new Configuration();
	private static org.hibernate.SessionFactory sessionFactory;
	private static String configFile = CONFIG_FILE_LOCATION;
	static {
		try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch(Exception e) {
			System.err.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}
	private HibernateSessionFactory() {}
	/** * Returns the ThreadLocal Session instance. Lazy initialize * the <code>SessionFactory</code> if needed. * * @return Session * @throws HibernateException */
	public static Session getSession() throws HibernateException {
		Session session = (Session) threadLocal.get();
		if (session == null || !session.isOpen()) {
			if (sessionFactory == null) {
				rebuildSessionFactory();
			}
			session = (sessionFactory != null) ? sessionFactory.openSession() : null;
			threadLocal.set(session);
		}
		return session;
	}
	/** * Rebuild hibernate session factory * */
	public static void rebuildSessionFactory() {
		try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch(Exception e) {
			System.err.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}
	/** * Close the single hibernate session instance. * * @throws HibernateException */
	public static void closeSession() throws HibernateException {
		Session session = (Session) threadLocal.get();
		threadLocal.set(null);
		if (session != null) {
			session.close();
		}
	}
	/** * return session factory * */
	public static org.hibernate.SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	/** * return session factory * * session factory will be rebuilded in the next call */
	public static void setConfigFile(String configFile) {
		HibernateSessionFactory.configFile = configFile;
		sessionFactory = null;
	}
	/** * return hibernate configuration * */
	public static Configuration getConfiguration() {
		return configuration;
	}
}

 

spring与hibernate的整合测试总结:1.添加spring,hibernate,MySQL等jar包2.添加spring配置文件,hibernate配置文件3.@BeforeClass获得spring的配置文件ClassPathXmlApplicationContext("配置文件")4.测试通过getBean获得spring管理的bean是否成功(Hibernate、Spring+Hibernate同理测试可得)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值