采用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(); } } }