第一、ORM介绍
ORM对象-关系映射,是随着面向对象的软件开发方法发展而产生的。用来把对象模型表示的对象映射到基本SQL的关系模型数据库结构中。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作实体对象的属性和方法。ORM技术是在对象和关系之间提供了一条桥梁。简单的说就是把程序中的实体类和数据库表建立起来对应关系。
第二、Hibernate概述
Hibernate是一个轻量级,企业级,开源的ORM持久层框架。是可以操作数据库的框架。它就是一个架构。通常情况下软件工程的持久层解决方案,一个为主一个为辅。两者并存(写SQL语句和不写SQL语句的)。
轻量级:指的是使用时依赖的资源很少。(目前我们使用的阶段,只依赖log4j,c3p0连接池)。
企业级:指的是在企业级应用中使用的比较多。
开源的:开放源代码。
ORM的操作方式:建立对象关系映射,实现操作实体类就相当于操作数据库表。
第三、基本入门配置
1、建立一个maven工程,通过pom.xml引入jar包
<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>com.shi</groupId>
<artifactId>Hibernate01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<hibernate.version>5.2.17.Final</hibernate.version>
<mysql-connector-java.version>5.1.12</mysql-connector-java.version>
<dom4j.version>1.6.1</dom4j.version>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.5</slf4j.version>
</properties>
<dependencies>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- hibernate-c3p0 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>
<!-- mysql conncetor -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<!-- dom4j and xml -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>${dom4j.version}</version>
</dependency>
<!-- logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<!-- log4j & slf4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
</project>
2、在默认位置新建配置文件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>
<!--
配置SessionFactory
SessionFactory的作用就是用于创建Session对象的
Session对象就是Hibernate中操作数据库的核心对象
第一部分:连接数据库的信息
第二部分:hibernate的可选配置
第三部分:映射文件的位置
-->
<session-factory>
<!-- 第一部分:连接数据库的信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 第二部分:hibernate的可选配置 -->
<!-- print all generated SQL to the console -->
<property name="hibernate.show_sql">true</property>
<!-- format SQL in log and console -->
<property name="hibernate.format_sql">true</property>
<!-- 设置Hibernate连接池提供商 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 第三部分:映射文件的位置 -->
<mapping resource="com/demo/dto/Teacher.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3、新建工具类com.demo.util.HibernateUtil.java
package com.demo.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Hibernate工具类
* @author shixiangcheng
* 2020-06-20
*/
public class HibernateUtil {
private static SessionFactory factory;
static {
try {
//1.解析主配置文件
Configuration cfg=new Configuration();//它只是创建,并不能加载xml配置文件
cfg.configure();//加载默认位置和名称的配置文件(默认位置:类的根路径.默认名称:hibernate.cfg.xml)
//2.根据配置文件创建SessionFactory(线程安全,同步锁)
//使用原则:一个应用应该只有一个SessionFactory,在应用加载时创建,应用卸载时销毁
factory=cfg.buildSessionFactory();
}catch(ExceptionInInitializerError e) {
throw new ExceptionInInitializerError("初始化SessionFactory失败,请检查配置文件!");
}
}
public static Session openSession() {
return factory.openSession();
}
}
4、新建实体类com.demo.dto.Teacher.java
package com.demo.dto;
import java.io.Serializable;
/**
* 实体类
* @author shixiangcheng
* 2020-06-20
*/
public class Teacher implements Serializable {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "[id="+this.getId()+",name="+this.getName()+"]";
}
}
及对应的映射文件com.demo.dto.Teacher.hbm.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 package="com.demo.dto">
<class name="Teacher" table="t_teacher">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
</class>
</hibernate-mapping>
5、表结构
6、新建测试类com.demo.Test.java
package com.demo;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.demo.dto.Teacher;
import com.demo.util.HibernateUtil;
/**
* 测试类
* @author shixiangcheng
* 2020-06-20
*/
public class Test {
public static void main(String[] args) {
//根据SessionFactory创建Session,使用原则:一个线程只能有一个Session对象
Session session=HibernateUtil.openSession();
//开启事务
Transaction tx=session.beginTransaction();
Teacher t=new Teacher();
t.setName("张三");
//执行操作
session.save(t);
//提交事务
tx.commit();
//释放资源
session.close();
}
}
7、运行测试类,表里将会添加一条数据
欢迎大家积极留言交流学习心得