Hibernate概述
- Hibernate框架应用在JavaEE三层结构中的DAO层框架:即持久层框架
- 在DAO层里面对数据库CRUD操作:使用Hibernate实现CRUD操作:Hibernate底层代码就是JDBC:Hibernate对JDBC进行封装
- 使用Hibernate好处:不需要写复杂的JDBC代码了,且不需要写SQL语句了
- Hibernate是开源轻量级的持久层框架:不需要依赖其他jar包即可使用
ORM思想
- Hibernate使用ORM思想对数据库进行CRUD操作
- ORM:Object Relational Mapping:对象关系映射:让实体类和数据表中的记录一一对应
(1)让实体类首先和数据表对应
(2)让实体类成员变量(实例成员变量)和表里面字段对应 - ORM框架操作数据进行CRUD操作:不需要直接操作数据表,而操作表对应的实体类对象
- 实体类是数据表之间的关联是通过配置文件来建立的
搭建Hibernate开发环境
package com.ycom.hibernate.entity;
public class User {
private int uid;
private String username;
private String password;
private String address;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
第三步:映射关系配置:配置实体类与数据表间的一一对应的关系:使用映射配置文件实现映射关系
(1) 创建XML格式的映射配置文件:映射配置文件名称和位置没有固定要求!建议:在实体类所在包里面创建,名称为:实体类名称.hbm.xml,例如:User.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>
<class name="com.ycom.hibernate.entity.User" table="t_user">
<id name="uid" column="uid">
<generator class="native"></generator>
</id>
<property name="username" column="username"></property>
<property name="password" column="pwd"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
Hibernate的配置文件
- Hibernate的配置文件的目的是为了解耦
- Hibernate的配置文件主要有两大类:核心配置文件 + 映射配置文件
核心配置文件
- 核心配置文件名称和位置是固定的
(1)位置:src目录下
(2)名称:hibernate.cfg.xml - 在核心配置文件中有三类配置:数据库信息、Hibernate信息、映入映射配置文件
- 第一部分:配置数据库信息:必须的
- 第二部分:配置Hibernate信息:可选的
- 第三部分:把映射配置文件放到核心配置文件中:必须的
<?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>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/ycom/hibernate/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
映射配置文件
- 映射配置文件名称和位置没有固定要求
- 映射配置文件中,标签name属性值写与实体类相关的内容
(1)class标签的name属性值是实体类的权限定类名
(2)id标签和property标签的name属性写实体类的属性名(实体类中的属性与成员变量不是一回事:属性不一定非得有成员变量与之对应)
- id标签和property标签,column属性是可以省略的:column属性省略,那么column属性值就与name属性值相同
- property标签中的type属性:指定Hibernate在生成表时指定字段的类型:一般情况下都是使用自动对应类型:所以type属性一般不用
Hibernate入门案例
- Hibernate操作的基本步骤:
(1)第一步:加载Hibernate核心配置文件
(2)第二步:创建SessionFactory对象
(3)第三步:创建Session对象
(4)第四步:开启事务
(5)第五步:对数据库进行CRUD操作
(6)第六步:关闭事务:提交事务或回滚事务
(7)第七步:释放资源
实现插入操作
package com.ycom.hibernate.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.ycom.hibernate.entity.User;
public class HibernateTest {
@Test
public void testInsert() {
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
user.setUsername("kitty");
user.setPassword("123456");
user.setAddress("USA");
session.save(user);
tx.commit();
session.close();
sessionFactory.close();
}
}
Hibernate核心API
- Hibernate核心类:
(1)Configuration
(2)SessionFactory
(3)Session
(4)Transaction
Configuration
Configuration cfg = new Configuration();
cfg.configure();
- 到src目录下找到名称为hibernate.cfg.xml的配置文件,创建对象,把核心配置文件放到对象里面
SessionFactory(☆☆☆☆☆)
- 使用Configuration对象创建SessionFactory对象:在创建SessionFactory对象的过程中所做的事情:
(1) 根据核心配置文件中的数据库配置部分、Hibernate信息部分以及映射配置文件部分,根据映射关系进行数据表的创建:但是前提,必须在核心配置文件中有如下的配置
<property name="hibernate.hbm2ddl.auto">update</property>
(2) 在创建SessionFactory过程中,如果在核心配置文件中配置了创建表的属性,那么会创建表,这个过程是特别消耗资源的:所以 在Hibernate操作中,建议一个项目一般只创建一个SessionFactory对象:可以考虑单例设计模式
package com.ycom.hibernate.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static final Configuration cfg;
private static final SessionFactory sessionFactoty;
static {
cfg = new Configuration();
cfg.configure();
sessionFactoty = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactoty;
}
}
Session(☆☆☆☆☆)
- Session类似于JDBC中的Connection
- 调用Session类中的不同方法实现对数据库的CRUD操作
(1)添加:save()方法
(2)删除:delete()方法
(3)修改:update()方法
(4)查询:根据id查询的get()方法 - Session对象必须是多例对象,即单线程对象:Session对象不同共用,只能自己使用
Transaction
Transaction tx = session.beginTransaction();