声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行。

1、安装依赖

 <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.12.Final</version>
</dependency>

默认依赖

         <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

2、创建实体类

package com.example.demo.entity;

import lombok.Data;
import java.util.Set;

@Data
public class Student {
    private Integer id;
    private String name;
    private Double score;
}

3、使用

    Configuration configuration = new Configuration().configure("hibernate.cfg.xml");

    //获取session
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    Session session = sessionFactory.openSession();

    Student student = new Student();
    student.setName("哈哈");
    student.setScore(11.22);
    session.save(student);

    session.beginTransaction().commit();
    session.close();

4、一对多

TeamEntity

package com.example.demo.entity;


import lombok.Data;

import java.util.Set;

@Data
public class Team {

    private Integer id;
    private String name;
    private Set<Player> players;
}

Team.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.example.demo.entity.Team" table="team">
        <id name="id" type="java.lang.Integer">
            <column name="id"/>
            <generator class="identity"/>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"/>
        </property>
        <set name="players" table="player" lazy="true">
            <key column="tid"></key>
            <one-to-many class="com.example.demo.entity.Player"></one-to-many>
        </set>
    </class>
</hibernate-mapping>

PlayerEntity

package com.example.demo.entity;


import lombok.Data;

import java.util.Set;

@Data
public class Team {

    private Integer id;
    private String name;
    private Set<Player> players;
}

Player.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.example.demo.entity.Player" table="player">
        <id name="id" type="java.lang.Integer">
            <column name="id"/>
            <generator class="identity"/>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"/>
        </property>
        <many-to-one name="team" class="com.example.demo.entity.Team" column="tid"></many-to-one>
    </class>
</hibernate-mapping>

添加配置

    <mapping resource="Player.xml"></mapping>
    <mapping resource="Team.xml"></mapping>

使用

    Team team = new Team();
    team.setName("t");

    Player player1 = new Player();
    player1.setName("a1");
    player1.setTeam(team);

    Player player2 = new Player();
    player2.setName("a2");
    player2.setTeam(team);


    session.save(player1);
    session.save(player2);
    session.save(team);

5、多对多

StudentEntity

package com.example.demo.entity;

import lombok.Data;
import java.util.Set;

@Data
public class Student {

    private Integer id;
    private String name;
    private Double score;

    private Set<Course> courses;
}

Student.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.example.demo.entity.Student" table="student">
        <id name="id" type="java.lang.Integer">
            <column name="id"/>
            <generator class="identity"/>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"/>
        </property>
        <property name="score" type="java.lang.Double">
            <column name="score"/>
        </property>

        <set name="courses" table="student_course">
            <key column="sid"></key>
            <many-to-many class="com.example.demo.entity.Course" column="cid"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

CourseEntity

package com.example.demo.entity;


import lombok.Data;

import java.util.Set;

@Data
public class Course {

    private Integer id;
    private String name;
    private Set<Student> students;
}

Course.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.example.demo.entity.Course" table="course">
        <id name="id" type="java.lang.Integer">
            <column name="id"/>
            <generator class="identity"/>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"/>
        </property>

        <set name="students" table="student_course">
            <key column="sid"></key>
            <many-to-many class="com.example.demo.entity.Course" column="cid"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

添加配置

     <mapping resource="Student.xml"></mapping>
     <mapping resource="Course.xml"></mapping>

使用

    Course c1 = new Course();
    Course c2 = new Course();
    Course c3 = new Course();
    c1.setName("c1");
    c2.setName("c2");
    c3.setName("c3");

    Student s1 = new Student();
    Student s2 = new Student();

    s1.setName("s1");
    s2.setName("s2");


    Set<Course> sc1 = new HashSet<>();
    sc1.add(c1);
    sc1.add(c2);
    sc1.add(c3);


    s1.setCourses(sc1);
    s2.setCourses(sc1);


    session.save(c1);
    session.save(c2);
    session.save(c3);
    session.save(s1);
    session.save(s2);