Hibernate
主流ORM框架Object Relation Mapping 对象关系映射,将面向对象映射成面向关系。
-
Customer
-
Orders
使用
-
导入相关依赖
-
创建Hibernate配置文件
-
创建实体类
-
创建实体类-关系映射文件
-
调用Hibernate API 完成操作
具体操作
-
创建maven工程,pom.xml
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.6.8.Final</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency> </dependencies> -
hibernate.cfg.xml、
核心配置:session-factory[标签]
接口SessionFactory:针对单个数据库映射经过编译的内存镜像文件,将数据库转化为一个Java可以识别的镜像文件。
构建SessionFactory非常耗费资源,所以通常一个工程只需要创建一个SessionFactory。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" > <hibernate-configuration> <session-factory> <!--这是数据源配置--> <property name="connection.username">root</property> <property name="connection.password">fwp010330</property> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?userUnicode&characterEncoding=UTF-8</property> <!--C3P0连接池--> <property name="c3p0.acquire_increment">10</property> <property name="c3p0.idle_test_period">1000</property> <property name="c3p0.timeout">5000</property> <property name="c3p0.max_size">30</property> <property name="c3p0.min_size">5</property> <property name="hibernate.c3p0.max_statements">10</property> <!--数据库方言--> <property name="dialect">org.hibernate.dialecct.MYSQLDialect</property> <!--打印SQL--> <property name="show_sql">true</property> <!--格式化SQL--> <property name="format_sql">true</property> <!--是否自动生产数据表--> <property name="hibernate.hbm2ddl.auto"></property> </session-factory> </hibernate-configuration> -
创建实现类
package com.fwp.entity; import lombok.Data; import java.util.Set; @Data public class Customer { private Integer id; private String name; private Set<Orders> orders; }package com.fwp.entity; import lombok.Data; @Data public class Orders { private Integer id; private String name; private Customer customer; } -
创建实体关系映射文件
package com.fwp.entity; import lombok.Data; @Data public class People { private Integer id; private String name; private Double money; }


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.fwp.entity.People" table="people">
<id name="id" type="java.lang.Integer">
<column name="id"></column>
<generator class="identity"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name"></column>
</property>
<property name="money" type="java.lang.Double">
<column name="money"></column>
</property>
</class>
</hibernate-mapping>
-
实体关系映射文件注册到Hibernate的配置文件中
<!--注册实体关系映射文件--> <mapping resource="com/fwp/entity/People.hbm.xml"></mapping> -
使用Hibernate API 完成数据操作。
package com.fwp.Test; import com.fwp.entity.People; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class Test { public static void main(String[] args) { //创建Configuration Configuration configure = new Configuration().configure(); //获取SessionFactory SessionFactory sessionFactory = configure.buildSessionFactory(); //获取session Session session = sessionFactory.openSession(); People people = new People(); people.setName("张三"); people.setMoney(1000.0); session.save(people); session.beginTransaction().commit(); session.close(); } } -
pom.xml中需要配置resource。
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>Hibernate级联操作
-
一对多
客户和订单:每个客户可以购买多个产品,生产多个订单,但是一个订单只能属于一个客户,所以客户是一,订单是多。
数据库的一方是主表,多的一方时候从表,通过主外键关系来维护。
面向对象中
package com.fwp.entity; import lombok.Data; import java.util.Set; @Data public class Orders { private Integer id; private String name; private Set<Orders> orders; }package com.fwp.entity; import lombok.Data; @Data public class Orders { private Integer id; private String name; private Customer customer; } -
多对多关系
学生选课:一门课程可以被多个学生选择,一个学生可以选择多个课程,学生是多,课程也是多。
数据库中是通过两个一对多关系来维护的,学生和课程都是主表,额外添加一张中间表作为从表,两张主表和中间表都是一对多的关系。
阿松大
Java和数据库对于这两种关系的体现完全是两种不同的方式,Hibernate框架的作用就是将这两种方式进行转换和映射的。
-
Hibernate 实现一对多
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.fwp.entity.Customer" table="customer">
<id name="id" type="java.lang.Integer">
<column name="id"></column>
<generator class="identity"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name"></column>
</property>
<set name="orders">
<key column="cid"></key>
<one-to-many class="com.fwp.entity.Orders"></one-to-many>
</set>
</class>
</hibernate-mapping>
- set标签 用来配置实体类中的集合属性orsers
- name实体类属性名
- table表名
- key外键
- one-to-many与集合泛型的实体类对应
这篇教程介绍了Hibernate,一个主流的ORM框架,用于将面向对象模型映射到关系数据库。内容包括Hibernate的使用步骤,如创建配置文件、实体类、关系映射文件,以及如何使用Hibernate API进行数据操作。特别强调了Hibernate中一对多关系的实现,解释了一对多关系在数据库和面向对象模型中的表现,并展示了如何在配置文件中设置一对多关系。

被折叠的 条评论
为什么被折叠?



