这种层次关系在之前的例子中就有很好的体现(http://blog.csdn.net/yu422560654/article/details/6974796):
public static void main(String[] args) throws Exception 19. { 20. //实例化Configuration 21. Configuration conf = new Configuration().configure(); 22. //实例化SessionFactory 23. SessionFactory sf = conf.buildSessionFactory(); 24. //实例化Session 25. Session sess = sf.openSession(); 26. //开始事务 27. Transaction tx = sess.beginTransaction(); 28. //创建消息实例 29. News n = new News(); 30. //设置消息标题和消息内容 31. n.setTitle("疯狂Java联盟成立了"); 32. n.setContent("疯狂Java联盟成立了,网址是www.crazyit.org"); 33. //保存消息 34. sess.save(n); 35. //提交事务 36. tx.commit(); 37. //关闭Session 38. sess.close(); 39. }
一、Configuration类
二、SessionFactory接口
使用SessionFactory对象可以获取Session对象。
三、Session(会话)接口
Session接口是Hibernate中的核心接口,它不是Java Web应用中HttpSession接口。Hibernate操作数据库之前必须先获取一个Session对象,相当于JDBC在操作数据库之前必须获取一个Connection对象一样。
//也可以使用Session session=session.openSession()方法
获取Session对象后,Hibernate内部并不会获取操作数据库的java.sql.Connection对象,而是等待Session对象真正需要对数据库进行CRUD等操作时,才会从数据库连接池中获取java.sql.Connection对象。而关闭Session对象时,则是将java.sql.Connection对象返回到连接池中,而不是直接关闭java.sql.Connection对象。
1、save()方法
save()方法是用来保存持久化对象,进而在数据库中新增一条数据的方法;执行save()方法之后不会立即操作数据库来进行保存数据,而是在Transaction对象的commit()方法执行之后才会保存数据。
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import java.util.Date; public class HibernateTest { public static void main(String[] args) { Configuration config = new Configuration(); config.configure(); SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); Transaction tx = session.beginTransaction(); Guestbook gb = new Guestbook(); gb.setName("刘伟"); gb.setPhone("01082622285"); gb.setEmail("[email protected]"); gb.setTitle("大家好"); gb.setContent("欢迎大家学习Hibernate技术。"); gb.setCreatedTime(new Date()); session.save(gb); tx.commit(); sessionFactory.close(); } }
2、get()/load()方法
通过Session对象的get()方法可以获取数据库中的一条记录,如:
Guestbook gb=(Guestbook) session.get(Guestbook.class,new Integer(1));//查找Guestbook中id为1的记录
get()方法的第一个参数是持久化对象,第二个参数是要查找的持久化对象的标识符属性值。
通过Session对象的load()方法可以获取数据库中的一条记录,如:
Guestbook gb=(Guestbook) session.load(Guestbook.class,new Integer(1));//查找Guestbook中id为1的记录
两者之间的区别:load()和get()在未找到符合条件的持久化对象的时候,load()会抛出一个违例,而get()方法返回null。另外两者对缓存对象的读取也不同,load()方法会先从Hibernate的一级缓存中去查找符合条件的对象,找不到的话则会去Hibernate的二级缓存中去查找对象,仍未找到的话才会去数据库中去查找;但是get()方法不会去查找Hibernate的二级缓存。(有关Hibernate缓存机制的问题,参见文章:http://blog.csdn.net/yu422560654/article/details/7008654 转载滴)
3、update()方法
4、delete()方法
四、Transaction(事务)接口
五、Query接口
六、Criteria接口