什么是hibernate?
hibernate是一种orm框架,它的英文缩写是Object Relational Mapping(对象-关系映射),可以理解为一种数据持久化技术,
其主要是把对象模型,例如实体对象,和关系型数据库的表建立对应关系,并且提供了一个以面向对象形式操作数据库表的机制。
ORM的优势
ORM在对象模型和关系数据库表之间建立了一座桥梁。
程序员不再需要使用sql语句操作数据库中的表。
以面向对象的形式实现数据的存储、删除、查询、更改等操作。
通过ORM实现简单、高效的数据库迁移。
Hibernate应用程序开发实例
1.在MySQL数据库中创建一个数据库,例如库名为db_hibernate.
2.在创建的数据库中创建一张表,例如表名为tb_student.
3.创建Java项目
4.项目中添加hibernate所需jar包
5.项目中添加hibernate.cfg.xml配置文件,完善配置信息。
一般该配置文件都配置的是:
<hibernate-configuration>
<session-factory>
里面一般有配置驱动、数据库连接的url、数据库连接的用户名、数据库连接的密码、
开启session、数据库连接池、方言等等;还有映射文件的资源路径也需要在这里配置。
</session-factory>
</hibernate-configuration>
6.创建数据库表对应的实体类,例如类目为Student,为该类提供私有属性和get/set方法。
7.在Student类的包下添加一个映射文件Student.hbm.xml。
8.创建SessionFactory对象,获取Session对象。
9.通过Session对象以面向对象的形式操作关系型数据库。
下面是第八步和第九步的具体测试:
public class Test {
public static void main(String[] args) {
testSave();
// testGet();
}
public static void testSave() {
//调用配置文件类,加载配置文件
Configuration config = new Configuration().configure();
//创建服务注册对象
//Hibernate4中获取SessionFactory的方法
ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//最终我们要使用Configuration对象创建SessionFactory(Session工厂)
SessionFactory factory = config.buildSessionFactory(registry);
//通过SessionFactory获得Session(会话)
Session session = factory.getCurrentSession();
//获取到Session对象之后就可以通过该对象使用面向对象的方式操作数据库
//开启事务
session.beginTransaction();
//创建一个Student对象
//------------瞬态 start ,没有被和session进行关联,也没唯一标识(ID),也没有被持久化到数据库------------------
Student student = new Student();
student.setName("张学友");
student.setSex("男");
student.setAge(55);
student.setBirthday(new Date());
//------------瞬态 end------------------
//通过Session对象的save方法保存Student对象
//------------游离态态 start 被session关联,也没分配了唯一标识(ID),但是并没有持久化到数据库------------------------
session.save(student);
//------------游离态 end------------------------
//提交事务
session.getTransaction().commit(); //事务提交之后,Student对象被持久化到了数据库
//Seesion关闭之后
//Student对象处于游离态(脱管状态),分配了唯一标识ID,也被持久化到了数据库,但是脱离了Session的管理
//瞬态和游离态的对象异同:
//相同:都随时会被gc所回收
//不同:瞬态没有唯一标识ID,没有被持久化到数据库,游离态仅仅是没有被session管理
}
public static void testGet() {
//调用配置文件类,加载配置文件
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//最终我们要使用Configuration对象创建SessionFactory(Session工厂)
SessionFactory factory = config.buildSessionFactory(registry);
//通过SessionFactory获得Session(会话)
Session session = factory.getCurrentSession();
//获取到Session对象之后就可以通过该对象使用面向对象的方式操作数据库
//开启事务
session.beginTransaction();
//查询一条记录
Student stu = (Student) session.get(Student.class, 3);
/* System.out.println(stu.getName());
session.delete(stu);*/
session.load(Student.class, 7);
session.getTransaction().commit();
}