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&amp;characterEncoding=UTF-8&amp;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只能完成查询,修改、删除、新增是无法操作的。

好像用不了了,知道了朋友可以留言。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部