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);