asdfasdfasdfasdf

来源:互联网 发布:mysql 性能测试工具 编辑:程序博客网 时间:2024/05/14 02:48
package org.rabbitx.hibernate4.searchstrategy;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;/** *  * @author RabbitX */public class SearchStrategyJUnitTest {private static SessionFactory sessionFactory;private static Session session;private static Transaction transaction;@BeforeClasspublic static void beforeClass(){String cfgPath = "org/rabbitx/hibernate4/searchstrategy/hibernate.cfg.xml";Configuration cfg = new Configuration().configure(cfgPath);ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();sessionFactory = cfg.buildSessionFactory(serviceRegistry);session = sessionFactory.openSession();}@AfterClasspublic static void afterClass(){sessionFactory.close();}@Beforepublic void before(){session = sessionFactory.openSession();transaction = session.beginTransaction();}@Afterpublic void after(){if(session.isOpen()){transaction.commit();session.close();}}/** * 准备需要的数据 */@Testpublic void testPrepareData(){Customer customer = new Customer("BluceLi");Order order1 = new Order(100090001);Order order2 = new Order(100090002);Order order3 = new Order(100090003);Order order4 = new Order(100090004);Order order5 = new Order(100090005);Order order6 = new Order(100090006);Order order7 = new Order(100090007);Order order8 = new Order(100090008);Order order9 = new Order(100090009);//设定关联关系order1.setCustomer(customer);order2.setCustomer(customer);order3.setCustomer(customer);order4.setCustomer(customer);order5.setCustomer(customer);order6.setCustomer(customer);order7.setCustomer(customer);order8.setCustomer(customer);order9.setCustomer(customer);customer.getOrders().add(order1);customer.getOrders().add(order2);customer.getOrders().add(order3);customer.getOrders().add(order4);customer.getOrders().add(order5);customer.getOrders().add(order6);customer.getOrders().add(order7);customer.getOrders().add(order8);customer.getOrders().add(order9);session.save(customer);session.save(order1);session.save(order2);session.save(order3);session.save(order4);session.save(order5);session.save(order6);session.save(order7);session.save(order8);session.save(order9);}/** * 在Customer.hbm.xml文件中class节点不设置lazy属性时,默认值为true。 *    <class name="Customer" table="TBL_SEARCH_STRATEGY_CUSTOMER" lazy="true"> *    在此设置下使用load方法检索数据时为延迟检索。 * 执行结果: *    不发送SQL; *    返回一个hibernate创建的代理对象(org.rabbitx.hibernate4.searchstrategy.Customer_$$_javassist_0);     */@Testpublic void testClassLazy001(){Customer customer = (Customer) session.load(Customer.class, 1);//返回结果:org.rabbitx.hibernate4.searchstrategy.Customer_$$_javassist_0System.out.println(customer.getClass().getName());System.out.println(customer.getId());}/** * 配置:<class name="Customer" table="TBL_SEARCH_STRATEGY_CUSTOMER"> * 延迟检索情况下,在应用程序第一次访问代理类实例的非 OID 属性时, Hibernate 会初始化代理类实例 */@Testpublic void testClassLazy002(){Customer customer = (Customer) session.load(Customer.class, 1);System.out.println(customer.getName());System.out.println(customer.getClass().getName());}/** * 配置:<class name="Customer" table="TBL_SEARCH_STRATEGY_CUSTOMER" lazy="false"> * 立即检索情况下,立即检索数据,hibernate不再创建代理对象。 * 执行结果: *    发送SQL; *    返回原对象(org.rabbitx.hibernate4.searchstrategy.Customer);     */@Testpublic void testClassLazy003(){Customer customer = (Customer) session.load(Customer.class, 1);System.out.println(customer.getId());//返回结果:org.rabbitx.hibernate4.searchstrategy.CustomerSystem.out.println(customer.getClass().getName());}/** * 配置:<class name="Customer" table="TBL_SEARCH_STRATEGY_CUSTOMER"> * 使用get方法检索数据 * 执行结果: *    发送SQL; *    返回原对象(org.rabbitx.hibernate4.searchstrategy.Customer);     */@Testpublic void testClassLazy004(){Customer customer = (Customer) session.get(Customer.class, 1);System.out.println(customer.getId());//返回结果:org.rabbitx.hibernate4.searchstrategy.CustomerSystem.out.println(customer.getClass().getName());}/** * 配置:<class name="Customer" table="TBL_SEARCH_STRATEGY_CUSTOMER"> * 使用Query 的 list() 方法检索数据 * 执行结果: *    发送SQL; *    返回原对象(org.rabbitx.hibernate4.searchstrategy.Customer);     */@Test@SuppressWarnings("unchecked")public void testClassLazy005(){Query query = session.createQuery("from Customer");List<Customer> customers = query.list();System.out.println(customers);}/** * 配置:<set name="orders" table="TBL_SEARCH_STRATEGY_ORDER" inverse="true"> *     相当于<set name="orders" table="TBL_SEARCH_STRATEGY_ORDER" inverse="true" lazy="true"> * 默认采用延迟检索,通过查看控制台的SQL语句确定 */@Testpublic void testSetLazy001(){Customer customer = (Customer) session.load(Customer.class, 1);System.out.println(customer.getOrders().getClass());}/** * 配置:<set name="orders" table="TBL_SEARCH_STRATEGY_ORDER" inverse="true" lazy="false"> * 默认采用立即检索,通过查看控制台的SQL语句确定 */@Testpublic void testSetLazy002(){Customer customer = (Customer) session.load(Customer.class, 1);System.out.println(customer.getName());System.out.println(customer.getOrders().getClass());}/** * 配置:<set name="orders" table="TBL_SEARCH_STRATEGY_ORDER" inverse="true" lazy="false"> * 默认采用立即检索,通过查看控制台的SQL语句确定 */@Testpublic void testSetLazy003(){Customer customer = (Customer) session.load(Customer.class, 1);System.out.println(customer.getName());System.out.println(customer.getOrders().getClass());}}

0 0
原创粉丝点击