(源代码: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同理测试可得)