对象关系映射(Object Relational Mapping,简称 ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
一,ORM概念
简单的说, ORM 是通过使用描述对象和数据库之间映射的元数据,将 java 程序中的对象自动持久化到关系数据库中。
二,实例
hibernate的部署:
1、导入hibernate的jar包
2、创建Hibernate的配置文件 hibernate.cfg.xml
3、创建JavaBean(POjo)的映射文件 User.hbm.xml
4、在配置文件中添加映射文件的配置
5、声明Hibernate工具类
i)提取共用性的代码,即获取SessionFactory
ii)保存SessionFactory只会被创建一次
6、声明测试类
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.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- SQL 方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- hibernate中session对象的管理模式 -->
<property name="current_session_context_class">thread</property>
<!-- hibernate中sql语句的设置(是否在控制台输出SQL语句) -->
<property name="show_sql">true</property>
<!-- database自动创建 -->
<property name="hbm2ddl.auto">update</property>
<!-- 映射文件的配置 -->
<mapping resource="com/bean/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
User.hbm.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>
<!-- 映射User类 -->
<!--
class标签:
name :类名(包括包路径)
table :对应的数据库中表名
-->
<class name="com.bean.User" table="user">
<!-- 在每一个class标签内,都必须有一个id子标签 -->
<!-- 用来映射表中的主键,即:在hibernate中,每一个表必须有一个主键 -->
<!--
name:javaBean类中用于映射表中主键的属性
column :表中主键的名称
-->
<id name="uid" column="Uid"></id>
<!-- 映射普通的列 -->
<property name="name" column="Name"></property>
<property name="age" column="Age"></property>
</class>
</hibernate-mapping>
Test.java
package com.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
//1,解析配置文件
Configuration config = new Configuration();
//参数为空时默认解析 hibernate.cfg.xml
Configuration conf = config.configure("hibernate.cfg.xml");
//2,获取sessionFactory
SessionFactory sessionfactory = conf.buildSessionFactory();
//3,根据sessionFactory获取session对象
Session session = sessionfactory.openSession();
//4,查询user表 HQL语句
//这里的User是bean,小写user会报错
Query query = session.createQuery("from User");
List list = query.list();
System.out.println(list);
//5,关闭资源
session.close();
}
}
SessionFactory非常消耗资源,在整个应用中,建议只获取一次,不要频换的关闭、打开,使用单例模式进行优化
1,静态的 私有的 自身类的属性
2,私有的构造方法
3,公共的 静态的 获得实例的方法
无论产生多少个对象,我们只实例化一次,这样的设计在设计模式上称为单态设计模式
* 单态设计模式的意义:
实际上这种模式非常常用,windows操作系统中就使用了此设计模式,windows中用一个回收站:
除了桌面以外,其他的每个硬盘中都有一个回收站,其他的回收站和其他硬盘的每个回收站都是同一个,
也就是所整个操作系统中有且只有一个回收站,各个地方只是引用此实例。
HbmUtil.java
package com.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HbmUtil {
//单例模式三步骤
//1,静态的 私有的 自身类的属性
private static SessionFactory sessionfactory = buildSessionFactory();
//2,私有的构造方法
private HbmUtil(){}
//3,公共的 静态的 获得实例的方法
public static SessionFactory buildSessionFactory(){
//解析文件
Configuration config = new Configuration();
//指定解析文件
Configuration conf = config.configure("hibernate.cfg.xml");
//获取sessionFactory
return conf.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionfactory;
}
}
package com.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.util.HbmUtil;
public class Test {
public static void main(String[] args) {
SessionFactory sessionfactory = HbmUtil.getSessionFactory();
Session session = sessionfactory.openSession();
//4,查询user表 HQL语句
//这里的User是bean,小写user会报错
Query query = session.createQuery("from User");
List list = query.list();
System.out.println(list);
//5,关闭资源
session.close();
}
}
三, 运行过程
1) 应用程序先调用 Configuration 类,该类读取 Hibernate 配置文件及映射文件中的信息,并用这些信息生成一个 SessionFactory 对象
2) 从 SessionFactory 对象生成一个 Session 对象
3) 用 Session 对象生成 Transaction 对象
4) 可 通 过 Session 对 象 的 get(),load(),save(),update(),delete() 和saveOrUpdate()等方法对 POJO 类进行加载、保存、更新、删除、等操作;
5) 在查询的情况下,可通过 Session 对象生成一个 Query 对象,然后利用 Query 对象执行查询操作;如果没有异常,Transaction 对象将提交这些操作到数据库中。