zoukankan      html  css  js  c++  java
  • 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();
                }
            }
        }
  • 相关阅读:
    用Sqoop进行Hive和MySQL之间的数据互导
    Spark读HBase写MySQL
    Kafka如何彻底删除topic及数据
    LDAP-HA安装与配置(Keepalived方式实现)
    配置两个Hadoop集群Kerberos认证跨域互信
    MYSQL HA 部署手册
    ELK简单安装测试
    Elasticsearch CURL命令
    大数据常见错误解决方案(转载)
    生成 RSA 公钥和私钥的方法
  • 原文地址:https://www.cnblogs.com/djoker/p/6251273.html
Copyright © 2011-2022 走看看