3 Hibernate:本地 API 单元测试优化

来源:互联网 发布:sql查询多表相同列名 编辑:程序博客网 时间:2024/05/17 22:00

在 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 initiateServiceINFO: HHH000397: Using ASTQueryTranslatorFactoryHibernate:     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 stopINFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://localhost:3306/test]
原创粉丝点击