在 2 Hibernate:入门简介 中已经介绍了如何使用 Hibernate 本地 API,根据 Hibernate 官方文档,对单元测试代码进行优化。
package hibernate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class NativeApiIllustrationTest {
private SessionFactory sessionFactory;
@Before
public void setUp() throws Exception {
final StandardServiceRegistry registry =
new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
try {
sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
} catch (Exception e) {
// 如果构建SessionFactory出现异常,需要手动销毁StandardServiceRegistry
StandardServiceRegistryBuilder.destroy(registry);
}
}
@After
public void tearDown() throws Exception {
if (null != sessionFactory) {
sessionFactory.close();
}
}
@Test
public void test() throws ParseException {
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(new Person("tom", "Tommy", new SimpleDateFormat("yyyy-MM-dd").parse("1985-01-01")));
session.save(new Person("mix", "Mercy", new SimpleDateFormat("yyyy-MM-dd").parse("1990-10-01")));
session.getTransaction().commit();
session.close();
session = sessionFactory.openSession();
session.beginTransaction();
@SuppressWarnings("unchecked")
List<Person> result = session.createQuery(" FROM Person").list();
for (Person person : result) {
System.out.println(person);
}
session.getTransaction().commit();
session.close();
}
}
打印结果:
Hibernate:
insert
into
PERSON
(ACCOUNT, NAME, BIRTH)
values
(?, ?, ?)
Hibernate:
insert
into
PERSON
(ACCOUNT, NAME, BIRTH)
values
(?, ?, ?)
六月 24, 2017 4:25:44 下午 org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
INFO: HHH000397: Using ASTQueryTranslatorFactory
Hibernate:
select
person0_.ID as ID1_0_,
person0_.ACCOUNT as ACCOUNT2_0_,
person0_.NAME as NAME3_0_,
person0_.BIRTH as BIRTH4_0_
from
PERSON person0_
Person [id=1, account=tom, name=Tommy, birth=1985-01-01 00:00:00.0]
Person [id=2, account=mix, name=Mercy, birth=1990-10-01 00:00:00.0]
六月 24, 2017 4:25:44 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://localhost:3306/test]