hibernate 之 hibernate实现(crud)增删改查 , 封装hibernate工具类

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的事务需要手动提交。

原文地址:https://www.cnblogs.com/forever2h/p/6734970.html