hibernate学习笔记之四 Hibernate的增删改查

采用JUnit测试,继承TestCase

import java.util.Date;

import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Client extends TestCase{

    Configuration config = new Configuration().configure();
    SessionFactory factory = config.buildSessionFactory();
    Session session = factory.openSession();

一.添加数据

public void testAdd1(){
        //user对象进入transient状态
        User user = new User();
        user.setName("用户1");
        user.setCreateTime(new Date());
        user.setExpireTime(new Date());
        try{
            //开启事务
            session.beginTransaction();
            //session管理user对象,进入Persistent状态
            session.save(user);
            //提交事务,把内存的改变提交到数据库保存
            session.getTransaction().commit();
        } catch(Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        } finally {
            if(session != null && session.isOpen()){
                //session.关闭,user对象进入detached状态
                session.close();
            }
        }
    }

二.查询数据
使用get查询,没有延迟加载,把需要的一次性都查询出来
使用load查询,有延迟加载,只把需要显示的查询出来,如果还需要查询其他的数据,再次进行查询(在一定程度上提高性能)
查询一条数据

public void testGetOrLoad(){
//        User user = (User)session.get(User.class, "2c90e481596c44da01596c44dba30001");
    User user = (User)session.load(User.class, "2c90e481596c44da01596c44dba30001");
    System.out.println(user.getName());
}

查询表中的所有数据

public void testQuery(){
        try{
            Query query = session.createQuery("from User");
            //建议使用这种方式读取数据,一次都查询出来
            List<User> userList = query.list();
            for(Iterator<User> iter = (Iterator) userList.iterator(); iter.hasNext(); ){
                User user = iter.next();
                System.out.println(user.getName());
            }
            //使用迭代器的方式,每个对象都要查询一次,大量查询时会增加数据库的负担和延迟
//            Iterator<User> iter = query.iterate();
//            while(iter.hasNext()){
//                User user = iter.next();
//                System.out.println(user.getName());
//            }
        } catch(Exception e){
            e.printStackTrace();
        } finally{
            
        }
    }

三.修改数据

public void testUpdate(){
        //需要先把数据从数据库中查询出来到对象中,修改对象,再update对象
        User user = (User)session.load(User.class, "2c90e481596c44da01596c44dba30001");
        user.setName("修改用户");
        try{
            session.beginTransaction();
            session.update(user);
            session.getTransaction().commit();
        } catch(Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        } finally {
            if(session != null && session.isOpen()){
                session.close();
            }
        }
    }

四:删除数据

public void testDelete(){
        //需要先把数据从数据库中查询出来到对象中,再delete对象
        User user = (User)session.load(User.class, "2c90e481596c44da01596c44dba30001");
        try{
            session.beginTransaction();
            session.delete(user);
            session.getTransaction().commit();
        } catch(Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        } finally {
            if(session != null && session.isOpen()){
                session.close();
            }
        }
    }
原文地址:https://www.cnblogs.com/djoker/p/6251273.html