02hibernate_session

package com.bjsxt.hibernate;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.Transaction;

import junit.framework.TestCase;

public class SessionTest extends TestCase {

    public void testHello1() {
        System.out.println("-----------SessionTest.Hello1()------------");
        //throw new java.lang.RuntimeException();
    }
    
    public void testHello2() {
        System.out.println("-----------SessionTest.testHello2()------------");
        
        //this.assertEquals("hello", "hello111");
    }
    
    public void testSave1() {
        Session session = null;
        Transaction tx = null;
        User user = null;
        try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            
            //Transient瞬时状态
            user = new User();
            user.setName("白龙马");
            user.setPassword("123");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());
            
            //persistent持久状态,当属性发生改变的时候,hibernate会自动和数据库同步
            session.save(user);//发Hibernate: insert into User //save执行后:让id=402881e538dc30fd0138dc3189490001
            
            user.setName("猪八戒");
            //发Hibernate: update User set,Hibernate怎么知道什么时候要发update语句呢?
            
//它做的是数据版本也叫 脏数据检查
            
//session.update(user);
            tx.commit();
        }catch(Exception e) {
            e.printStackTrace();
            tx.rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
        
        //detached状态//显著特点:a.没有被session管理,同时数据库中有相应的记录
        user.setName("七仙女");
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
             //又变成了persistent状态
            session.update(user);
            session.getTransaction().commit();//commit后,发Hibernate: update User set XX ,此时数据库中记录被更新
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }        
    }
    
    public void testReadByGetMethod1() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            //马上发出查询sql,加载User对象
            User user = (User)session.get(User.class"402881e538dc30fd0138dc3189490001");
            System.out.println("user.name=" + user.getName());
            
            //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
            user.setName("白马王子");
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    public void testReadByGetMethod2() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            //采用get加载数据,如果数据库中不存在相应的数据,返回null
            
            User user = (User)session.get(User.class"asdfsafsdfdsf");

            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    public void testReadByLoadMethod1() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            //不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)
            
//延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
            
//hibernate延迟加载实现原理是代理方式
            User user = (User)session.load(User.class"402881e538dc33410138dc335ef30001");
            System.out.println("user.name=" + user.getName());
            
            //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
            user.setName("白雪");
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    public void testReadByLoadMethod2() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            //采用load加载数据,如果数据库中没有相应的数据
            
//那么抛出ObjectNotFoundException
            User user = (User)session.load(User.class"55555555");
            
            System.out.println(user.getName());
            
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
            throw new java.lang.RuntimeException();
        }finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    public void testUpdate1() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            //手动构造的detached状态的对象
            User user = new User();
            user.setId("402881e538dc33410138dc335ef30001");
            user.setName("刘德华");
            
            session.update(user);
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
    }    
    

    public void testDelete1() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
//            //手动构造的detached状态的对象
//            User user = new User();
//            user.setId("402880d01b9be8dc011b9be9b23d0001");
//            user.setName("德华");
//            session.delete(user);
            
            User user = (User)session.load(User.class"402881e538dc33410138dc335ef30001");
            session.delete(user);
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
        
        //transient状态
    }    
    
}
-----------------------------------------------------
package com.bjsxt.hibernate;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import junit.framework.TestCase;

public class QueryTest extends TestCase {

public void testQuery() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Query query = session.createQuery("from User");
query.setFirstResult(0);//注意第一条记录从0开始
query.setMaxResults(4);
List userList = query.list();
for (Iterator iter=userList.iterator(); iter.hasNext();) {
User user = (User)iter.next();
System.out.println(user.getId());
System.out.println(user.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}

 

posted @ 2012-07-31 18:06  Alamps  阅读(163)  评论(1编辑  收藏  举报