什么是Hibernate:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
ORM:Object Relational Mapping(对象关系映射)。指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。
为什么用Hibernate:
1、Hibernate对JDBC进行了非常轻量级的对象封装,大大简化了数据访问层繁琐的重复性代码,减少了内存消耗,加快了运行效率;
2、Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,支持从一对一到多对多的各种复杂关系;
3、源代码开源以及API的开放使其可扩展性好。
怎么用Hibernate:
Hibernate的下载地址及目录结构
下载地址:https://sourceforge.net/projects/hibernate/files/hibernate-orm/
目录结构:
documentation:Hibernate开发的帮助文档
lib:Hibernate开发的所需jar包
project:Hibernate开发的项目示例
Hibernate的简单入门:
1、创建Java或web项目,导入所需jar包:
数据库驱动包:
Hibernate开发的必需jar包:
日志记录包:
2、在数据库新建一个表:cst_customer
3、在“cn.jingpengchong.pojo”包下新建一个实体类:Customer
package cn.jingpengchong.pojo;
public class Customer {
private long id;
private String name;
private String source;
private String industry;
private String level;
private String phone;
private String mobile;
//为节省篇幅,此处没有粘贴get/set方法
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", source=" + source + ", industry=" + industry + ", level="
+ level + ", phone=" + phone + ", mobile=" + mobile + "]";
}
}
4、在“cn.jingpengchong.pojo”包下创建实体类Customer的映射文件:Customer.hbm.xml
映射文件的dtd可以在hibernate-core-5.4.10.Final.jar包的“/org/hibernate/hibernate-mapping-3.0.dtd”文件中找到。
映射文件的内容主要有:
①用class标签建立类与表的映射;
②用id标签建立类中的id与表中的主键的映射,定义主键生成策略;
③用property标签建立类中的普通属性与表中的字段的映射。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 建立类与表的映射 -->
<class name="cn.jingpengchong.pojo.Customer" table="cst_customer">
<!-- 建立类中的id与表中的主键的映射 -->
<id name="id" column="cust_id" length="32" type="long">
<generator class="native"/>
</id>
<!-- 建立类中的普通属性与表中的字段的映射 -->
<property name="name" column="cust_name" length="32" type="string"/>
<property name="source" column="cust_source" length="32" type="string"/>
<property name="industry" column="cust_industry" length="32" type="string"/>
<property name="level" column="cust_level" length="32" type="string"/>
<property name="phone" column="cust_phone" length="64" type="string"/>
<property name="mobile" column="cust_mobile" length="16" type="string"/>
</class>
</hibernate-mapping>
5、在src目录下创建Hibernate核心配置文件:hibernate.cfg.xml
配置文件的dtd可以在hibernate-core-5.4.10.Final.jar包的“/org/hibernate/hibernate-configuration-3.0.dtd”文件中找到。
配置文件的的内容主要有:property标签的name属性值及标签内容的书写格式可以参考“hibernate-release-5.4.10.Final\project\etc”目录下的“hibernate.properties”文件。
①用property标签声明必需的配置:驱动、url、用户名、密码、数据库行话等,数据库行话用于生成符合对应数据库标准的SQL语句;
②用property标签声明其他的配置:是否打印SQL语句、是否格式化SQL语句、是否自动建表等;
③用mapping标签指明映射文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 必须的配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 可选的配置 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 映射的文件 -->
<mapping resource="cn/jingpengchong/pojo/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
6、新建一个包“cn.jingpengchong.test”,创建测试类:Test
主要步骤有:
①加载配置文件;
②根据Configuration对象创建一个SessionFactory对象;
③根据SessionFactory对象获得一个Session对象;
④根据Session对象开启事务获得一个Transaction对象;
⑤执行增删改查等操作;
⑥根据Transaction对象提交事务;
⑦释放资源。
package cn.jingpengchong.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.jingpengchong.pojo.Customer;
public class Test {
public static void main(String[] args) {
//1、加载配置文件
Configuration configure = new Configuration().configure();
//2、根据Configuration创建一个SessionFactory
SessionFactory factory = configure.buildSessionFactory();
//3、根据SessionFactory获得一个Session对象
Session session = factory.openSession();
//4、手动开启事务
Transaction transaction = session.beginTransaction();
//5、执行增删改查等操作
Customer customer = new Customer();
customer.setName("孙悟空");
session.save(customer);
//6、提交事务
transaction.commit();
//7、释放资源
session.close();
factory.close();
}
}
运行结果如下:
再看数据库中已经有数据了:
Hibernate的映射文件与配置文件:
映射文件:
class标签的配置:用于建立类与表的映射关系
属性:
- name:实体类的全路径
- table:表名
- catalog:数据库名,可以不写,在配置文件中已经指定
id标签的配置:用来建立类中某个属性与表中主键的映射关系
属性:
- name:类的属性名
- column:表中的字段名
- length:数据长度,hibernate自动建表时使用
- type:数据类型,hibernate自动建表时使用
property标签的配置:用于建立类中的属性和表中字段的映射关系
属性:
- name:类的属性名
- column:表中的字段名
- length:数据长度,hibernate自动建表时使用
- type:数据类型,hibernate自动建表时使用
- not-null:设置非空,hibernate自动建表时使用
- unique:设置唯一,hibernate自动建表时使用
配置文件:
property标签用于数据库参数的配置:使用hibernate框架必须的参数配置有驱动类、url、用户名、密码、所用数据库的行话等,其他的重要参数配置有:
hibernate.show_sql:是否在控制台打印SQL语句
hibernate.format_sql:是否在打印SQL语句时将其格式化
hibernate.hbm2ddl.auto:自动建表或删表
- none:当要操作的表不存在时,hibernate不会自动建表而是报错;
- create:当要操作的表不存在时,hibernate会自动建表,当要操作的表存在时,hibernate会将该表删了,然后重新创建一个表;
- create-drop:当要操作的表不存在时,hibernate会自动建表,使用完毕后将该表删了,当要操作的表存在时,hibernate会将该表删了,然后重新创建一个表,使用完毕后将该表删了;
- update:当要操作的表不存在时,hibernate会自动建表,当要操作的表存在时,会使用已经存在的表;
- validate:当要操作的表不存在时,hibernate不会自动建表而是报错,当要操作的表存在时,会使用已经存在的表;
mapping标签用于指明映射文件。