jpa是一个规范,hibernate是jpa的实现,是一种框架。
hibernate:
ORM框架/持久层框架(Object Relational Mapping) 它是是一个轻量级开放源代码的对象关系映射框架,hibernate可以自动生成SQL语句,自动执行,可以使用面向对象思想来操作数据库。
代码实现:
整体目录:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>studying</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>studying</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 数据库连接器-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
<!-- hibernate核心包-->
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.5.2.Final</version>
</dependency>
<!-- 自动生成工具-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
hibernate.cfg.xml
<?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节点代表一个数据库 -->
<session-factory>
<!-- 1. 数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/study-hibernate?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!--C3P0-->
<property name="hibernate.c3p0.acquire_increment">10</property>
<property name="c3p0.idle_test_period">10000</property>
<property name="c3p0.timeout">5000</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_statements">10</property>
<!-- 数据库方法配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 2. 其他相关配置 -->
<!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 2.2 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- 2.3 自动建表 -->
<property name="hibernate.hbm2ddl.auto">create</property>
<!--3. 加载所有映射-->
<mapping resource="com/dk/hibernate/entity/Student.xml"/>
</session-factory>
</hibernate-configuration>
Student:
package com.dk.hibernate.entity;
import lombok.Data;
/**
* 类描述: Student
**/
@Data
public class Student {
private Integer id;
private String name;
private Double score;
}
Student.xml:
<?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>
<!--
name:实体类全路径名
table:实体类对于的数据库表名称
-->
<class name="com.dk.hibernate.entity.Student" table="student">
<!--
id:用于设置数据库表结构中主键列的生成方式
name:实体类中属性名称
type:Jave的数据类型
column:数据库表字段名称
-->
<id name="id" type="java.lang.Integer" column="id">
<!--
class:定义主键列生成的方式:hibernate管理、数据库管理、开发者管理
increment,identity,sequcene,native,assgine
-->
<generator class="identity"></generator>
</id>
<!-- 与实体类相匹配 -->
<property name="name" type="java.lang.String" column="name"/>
<property name="score" type="java.lang.Double" column="score"/>
</class>
</hibernate-mapping>
参考链接:Hibernate框架使用详细步骤-CSDN博客
一对多
多对多
懒加载提高性能
为什么要延迟加载?
尽量减少java程序与数据库的交互次数。
如何实现?
在team中设置lazy为true后,在测试时,查询team,不用查players,如果为false,就会查两次,一次team,一次players。
HQL查询
HQL:Hibernate Query Language,是一种Hibernate框架提供的一种查询机制,与SQL类似,但是HQL是面向对象的查询语句,让开发者能够以面向对象的思想来编写查询语句,对java编程是一种友好的方式。
HQL不能直接参与数据库的交互,只是中间语言。
Java-->HQL-->Hibernate-->SQL-->DB
HQL只能完成查询,修改、删除、新增是无法操作的。
好像用不了了,知道了朋友可以留言。