1.封装工具类:
public class HibernateUtil { private static Configuration cfg=null; private static ServiceRegistry registry; private static SessionFactory factory = null; private static ThreadLocal<Session> session=new ThreadLocal<Session>(); static{ cfg = new Configuration().configure(); registry = new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()) .build(); factory = cfg.buildSessionFactory(registry); } public static Session getSession(){ if(session.get()==null){ session.set(factory.openSession()); } return session.get(); } public static void close(){ if(session.get()!=null) { session.get().close(); session.set(null); } } }
2. crud实现:
public class HibernateTest { private Session session=null; @Before public void setUp(){ session = HibernateUtil.getSession(); } @After public void tearDown(){ HibernateUtil.close(); } //查询单个对象 @Test public void testFindOne(){ User user=(User)session.get(User.class, 2); System.out.println(user); } //查询所有 @Test public void testFindAll(){ List<User> list = session.createCriteria(User.class).list(); for(User u:list){ System.out.println(u); } } //保存--hibernate和jdbc不一样 //jdbc事务默认自动提交 //hibernate的事务需要手动提交 @Test public void testSave(){ User user = new User(); user.setName("刘德华"); user.setAge(55); Transaction tx =null; try { //获取事务对象 并且开启事务 tx = session.beginTransaction(); /*Transaction tx = session.getTransaction(); tx.begin();*/ session.save(user); //提交事务 tx.commit(); } catch (Exception e) { e.printStackTrace(); if(tx!=null) tx.rollback();//回滚事务 } } @Test public void testDelete(){ Transaction tx =null; try { //获取事务对象 并且开启事务 tx = session.beginTransaction(); /*Transaction tx = session.getTransaction(); tx.begin();*/ User user = (User)session.get(User.class, 1); session.delete(user); //提交事务 tx.commit(); } catch (Exception e) { e.printStackTrace(); if(tx!=null) tx.rollback();//回滚事务 } } @Test public void testUpdate(){ Transaction tx =null; try { //获取事务对象 并且开启事务 tx = session.beginTransaction(); /*Transaction tx = session.getTransaction(); tx.begin();*/ User user = (User)session.get(User.class, 3); user.setName("王五"); session.update(user); //提交事务 tx.commit(); } catch (Exception e) { e.printStackTrace(); if(tx!=null) tx.rollback();//回滚事务 } } }
注意:hibernate和jdbc 不一样, jdbc事务默认自动提交,hibernate的事务需要手动提交。