Hibernate 简介
Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 一句话:Hibernate 是一个实现了 ORM 思想的框架,封装了 JDBC。
ORM: 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。其实就是将关系和对象通过映射文件进行联系。我们在程序中只需要操作对象即可操作对应的数据库表的数据。
注意:POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,
使用环境:
1、Hibernate 5.2.17, JBoss tools 插件生成配置文件
2、Eclipse 4.7
3、jdk1.8
4、MySQL5.7
5. maven
一、创建一个简单的 maven 项目 导包 和 配置 Hibernate5 主配置文件
导包
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.17.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
Hibernate5 主配置文件:hibernate.cfg.xml
注意:方言 MySQL5 指5.0+版本的MySQL
自动生成表结构策略(开发配置, 生产不配置)
<property name="hbm2ddl.auto">update</property>
value -- update(使用最多):当数据库不存在表时,hibernate启动后会自动生成表结构。
当数据库表存在时,如果一样,则只会写入数据,不会改变表结构。
当数据库表存在时,如果不一样,则会修改表结构,原有的表结构不会改变。
create(很少):无论表结构是否存在,hibernate启动后都会重新生成表结构。(造成之前的数据丢失)
create-drop(极少):无论表结构是否存在,hibernate启动都会重新生成表结构。并且hibernate关闭后,表结构会被删除。来无影去无踪。
validate(很少):不会创建表结构,不会修改表结构。校验与数据库中的表结构是否一样,如果不一样则报异常。
<session-factory>
<!-- 数据库基本信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_hibernate5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- hibernate配置信息 MySQL5指5.0+版本的MySQL-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- ORM 映射关系 -->
<mapping resource="cn/jq/hibernate5/model/Student.hbm.xml"/>
</session-factory>
二、 创建一个 POJO 类 和 Xxxt.hbm.xml 映射文件
POJO 类:必须要有无参构造器
public class Student {
private int id;
private String name;
private String sex;
private Date birthday;
...
//必须要有无参构造器
//getter setter
}
Xxxt.hbm.xml : 插件生成, 简单修改
<class name="cn.jq.hibernate5.model.Student" table="T_STUDENT">
<id name="id" type="int">
<column name="ID" />
<!-- 设置主键的生成方式 -->
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" />
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" />
</property>
</class>
三、 创建 Junit 测试类
注意: SessionFactory 工厂类的创建过程
Hibernate5 规定: 所有配置或服务要生效, 必须将其注册到一个 StandardServiceRegistry 服务注册类中
@Test
public void test() {
//1. 创建一个 SessionFactory 工厂类: 通过它建立一个与数据库连接回话 session
SessionFactory sessionFactory = null;
//配置类: 封装有我们的配置文件里的配置信息, 返回的 configuration 包含有配置文件里的具体信息
Configuration configuration = new Configuration().configure();
//Hibernate5规定: 所有配置或服务要生效, 必须将其注册到一个服务注册类中
StandardServiceRegistry serviceRegistry = configuration.getStandardServiceRegistryBuilder().build();
sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
//2. 通过工厂类开启 Session 对象
Session session = sessionFactory.openSession();
//3. 开启事务
Transaction transaction = session.beginTransaction();
//4. 执行 CRUD 操作
Student student = new Student("李四","男",new Date());
session.save(student);
//5. 提交事务
transaction.commit();
//6. 关闭 Session
session.close();
//7. 关闭工厂类
sessionFactory.close();
}