Hibernate:快速入门
前言:
hibernate是一个ORM框架,与mybatis相似,但它是全自动的,也就是说,开发人员无在关注sql了,优点就是统一了sql接口,无需在因为数据库方言(数据库类型:mysql/oracle),而花费经历去了解,
缺点就是每次事务的执行都需建立一个sqlsession,并发量没有mybatis高,sql不灵活
一.单表基本操作
1.导入相关依赖(pom)
<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.22version> dependency> <dependency> <groupId>org.hibernategroupId> <artifactId>hibernate-coreartifactId> <version>5.4.10.Finalversion> dependency> <dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <version>1.18.16version> dependency>
2.创建Hibernate配置文件(hibernate.cfg.xml)
注意:hibernate.cfg.xml,核心配置文件,只能叫这个名
<?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">rootproperty> <property name="connection.password">123456property> <property name="connection.driver_class">com.mysql.cj.jdbc.Driverproperty> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useSSL=true&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8property> <property name="hibernate.c3p0.acquire_increment">10property> <property name="hibernate.c3p0.idle_test_period">1000property> <property name="hibernate.c3p0.timeout">5000property> <property name="hibernate.c3p0.max_size">30property> <property name="hibernate.c3p0.min_size">5property> <property name="hibernate.c3p0.max_statements">10property> <property name="dialect">org.hibernate.dialect.MySQLDialectproperty> <property name="show_sql">trueproperty> <property name="format_sql">trueproperty> <property name="hibernate.hbm2ddl.auto">updateproperty> <mapping resource="com/king/domain/People.hbm.xml">mapping> session-factory> hibernate-configuration>
3.创建实体类(domain)
package com.king.domain; import lombok.Data; @Data public class People { private Integer id; private String name; private Double money; }
4.创建实体关系映射文件(**.hbm.xml)
<?xml version='1.0' encoding='utf-8'?>
mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<class name="com.king.domain.People" table="people">
class="identity">
class>
5.调用Hibernate API完成操作
public static void main(String[] args) { //创建Configuration Configuration configuration = new Configuration().configure(); //System.out.println(configuration); //获取SessionFactory SessionFactory sessionFactory = configuration.buildSessionFactory(); //获取session Session session = sessionFactory.openSession(); People people = new People(); people.setId(1); people.setName("王"); people.setMoney(100.2); session.save(people); session.beginTransaction().commit(); session.close(); }
小结:1.hibernate.cfg.xml是Hibernate框架的核心配置文件,底层将此文件名写死了,所以是不可修改的
2.在实体类上要声明主键策略
二,级联操作
在级联操作时:无论一对多还是多对一,”一“那个表是主表,”多“那个表是从表
1.一对多
@Data public class Customer { private Integer id; private String name; //辅助字段,一段多关系 private Setorders; }
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> <class name="com.king.domain.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" table="orders"> <key column="cid">key> <one-to-many class="com.king.domain.Orders">one-to-many> set> class> hibernate-mapping>
2.多对一
@Data public class Orders { private Integer id; private String name; private Integer cid; //辅助字段,多对一关系 private Customer customer; }
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> <class name="com.king.domain.Orders" table="orders"> <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> <many-to-one name="customer" class="com.king.domain.Customer" column="cid">many-to-one> class> hibernate-mapping>
3.多对多
多对多的实现就是两个一对多关系的表通过一个中间表(临时表)去建立一个多对多的关系,常用的就是购物车,选课等业务逻辑
两个主表通过一张中间表(从表)建立关联
主表一
对应的配置文件
主表二
对应配置文件
两个主表的中间表就是两个表达从表