package me.test; import static org.hibernate.criterion.Order.asc; import static org.hibernate.criterion.Restrictions.ge; import java.util.List; import java.util.Random; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import me.test.domain.User; import org.hibernate.ScrollMode; import org.hibernate.ScrollableResults; import org.hibernate.Session; import org.springframework.context.support.ClassPathXmlApplicationContext; public class HibernateTest { private static Random random = new Random(System.currentTimeMillis()); public static void main(String[] args) { ClassPathXmlApplicationContext appCtx = new ClassPathXmlApplicationContext("applicationContext.xml"); // SessionFactory sessionFactory = appCtx.getBean(SessionFactory.class); EntityManagerFactory emf = appCtx.getBean(EntityManagerFactory.class); EntityManager em = emf.createEntityManager(); Session session = em.unwrap(Session.class); session.beginTransaction(); if (args.length > 0 && "add".equals(args[0])) { int count = 1; if (args.length > 1) { count = Integer.valueOf(args[1]); } add(session, count); } else if (args.length > 0 && "update".equals(args[0])) { update(session); } else if (args.length > 0 && "list".equals(args[0])) { list(session); } else { System.err.println("Usage : java me.test.HibernateTest [add|update|list]"); } session.getTransaction().commit(); appCtx.close(); } public static void add(Session session, int count) { for (int i = 0; i < count; i++) { User user = new User(); user.setName("z-" + Math.abs(random.nextLong())); session.save(user); } System.out.println("Added."); } @SuppressWarnings("unchecked") public static void update(Session session) { List<User> userList = session.createCriteria(User.class).list(); for (User user : userList) { user.setName("z-" + Math.abs(random.nextLong())); session.save(user); } System.out.println("Updated."); } // http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#querycriteria /** * 演示如何遍历处理大数据集。 */ public static void list(Session session) { ScrollableResults userResults = session.createCriteria(User.class) .add(ge("id", 5L)) .addOrder(asc("id")) .setFirstResult(1) // = offset .setMaxResults(10) // = limit .setFetchSize(1) .scroll(ScrollMode.FORWARD_ONLY); while (userResults.next()) { User user = (User) userResults.get(0); System.out.println(user); } System.out.println("List finished."); } }