Hibernate 是一个优秀的ORM框架体现在:
1. 面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象、建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻的运行结果的差异就表现在内存中的对象状态发生了变化。
2.为了在关机和内存空间不够的状况下,保持程序的运行状态,需要将内存中的对象状态保存到持久化设备和从持久化设备中恢复出对象的状态,通常都是保存到关系数据库来保存大量对象信息。从Java程序的运行功能上来讲,保存对象状态的功能相比系统运行的其他功能来说,应该是一个很不起眼的附属功能,java采用jdbc来实现这个功能,这个不起眼的功能却要编写大量的代码,而做的事情仅仅是保存对象和恢复对象,并且那些大量的jdbc代码并没有什么技术含量,基本上是采用一套例行公事的标准代码模板来编写,是一种苦活和重复性的工作。
3.通过数据库保存java程序运行时产生的对象和恢复对象,其实就是实现了java对象与关系数据库记录的映射关系,称为ORM(即Object Relation Mapping),人们可以通过封装JDBC代码来实现了这种功能,封装出来的产品称之为ORM框架,Hibernate就是其中的一种流行ORM框架。使用Hibernate框架,不用写JDBC代码,仅仅是调用一个save方法,就可以将对象保存到关系数据库中,仅仅是调用一个get方法,就可以从数据库中加载出一个对象。
4.使用Hibernate的基本流程是:配置Configuration对象、产生SessionFactory、创建session对象,启动事务,完成CRUD操作,提交事务,关闭session。
5.使用Hibernate时,先要配置hibernate.cfg.xml文件,其中配置数据库连接信息和方言等,还要为每个实体配置相应的hbm.xml文件,hibernate.cfg.xml文件中需要登记每个hbm.xml文件。
6.在应用Hibernate时,重点要了解Session的缓存原理,级联,延迟加载和hql查询。
首先确保Spring集成进去了,在上一篇博客中详细介绍了如何集成,以及常用的三种方式
@Test public void handle(){ Configuration configuration = new Configuration().configure("hibernate.cfg.xml"); SessionFactory sessionFactory = configuration.buildSessionFactory(); Session session = sessionFactory.openSession(); System.out.print(session); }
上面这一个例子用来测试是否集成成功,打印一个地址则成功了
package hibernate; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.tz.entity.Student; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:config/applicationContext.xml") public class TestSpringHibernate { @Autowired private SessionFactory sessionFactory; //获取SessionFactory @Test//查找数据 public void handle2(){ Session session = sessionFactory.openSession(); //获取Session List<Student> students = session.createSQLQuery("select * from student").addEntity(Student.class).list(); for(Student student:students){ System.out.println(student.getName()); System.out.println("========="); } } @Test//插入数据 public void handle3(){ Session session = sessionFactory.openSession(); Transaction ts = session.beginTransaction(); //开启事物 Student stu = new Student(); stu.setName("zd"); stu.setMale(1); stu.setAge(12); try{ session.save(stu); ts.commit();//事物提交 }catch(HibernateException e){ e.printStackTrace(); ts.rollback();//事物回滚 }finally{ session.close(); } } @Test///删除数据 public void handle4(){ Session session = sessionFactory.openSession(); Transaction ts = session.beginTransaction(); Student st = new Student(); st.setId(1); try{ session.delete(st); ts.commit(); }catch(Exception e){ e.printStackTrace(); ts.rollback(); }finally{ session.close(); } } @Test //修改数据 public void handle5(){ Session session = sessionFactory.openSession(); Transaction ts = session.beginTransaction(); Student st = new Student(); st.setId(2); st.setName("zengda"); try{ session.update(st); ts.commit(); }catch(HibernateException e){ e.printStackTrace(); ts.rollback(); }finally{ session.close(); } } }