Hibernate基础详解(Hibernate入门到精通:基础概念全解析)
原创
一、Hibernate简介
Hibernate是一个开源的对象关系映射(ORM)框架,它对JDBC进行了封装,将Java对象映射到数据库中的表,使数据库的操作更加单纯和直观。Hibernate的出现极大地简化了Java持久化层的开发工作。
二、Hibernate核心概念
Hibernate的核心概念首要包括以下几个部分:
- 持久化对象(Persistent Object)
- 会话(Session)
- 事务(Transaction)
- 缓存(Cache)
三、Hibernate的安装与配置
要使用Hibernate,首先需要下载Hibernate的jar包,并将其添加到项目的classpath中。此外,还需要配置Hibernate的配置文件。
1. 下载Hibernate
从Hibernate的官方网站(https://hibernate.org/orm/)下载所需的版本。
2. 配置Hibernate
Hibernate的配置文件为hibernate.cfg.xml,该文件位于项目的src目录下。以下是一个基本的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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/example/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
四、Hibernate映射
Hibernate映射是将Java对象与数据库表进行相关性的过程。映射可以通过XML文件或注解来实现。
1. XML映射
XML映射文件通常以.hbm.xml为后缀。以下是一个单纯的User类的映射文件示例:
<?xml version='1.0' encoding='utf-8'?>
<!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.domain.User" table="users">
<id name="id" column="user_id">
<generator class="native"/>
</id>
<property name="username" column="username" type="string"/>
<property name="password" column="password" type="string"/>
</class>
</hibernate-mapping>
2. 注解映射
注解映射是使用Java注解来定义对象关系映射。以下是一个使用注解的User类示例:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "users")
public class User {
@Id
private Long id;
private String username;
private String password;
// 省略getter和setter方法
}
五、Hibernate核心API
Hibernate的核心API首要包括以下几个类:
- Configuration:配置Hibernate,并创建SessionFactory。
- SessionFactory:创建Session。
- Session:执行CRUD操作。
- Transaction:管理事务。
- Criteria:构建查询。
1. Configuration
Configuration类用于配置Hibernate,并创建SessionFactory。以下是一个示例:
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
SessionFactory sessionFactory = configuration.buildSessionFactory();
2. SessionFactory
SessionFactory是线程保险的,它用于创建Session。以下是一个示例:
Session session = sessionFactory.openSession();
3. Session
Session是Hibernate操作数据库的核心接口,以下是一个使用Session进行保存操作的示例:
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = new User();
user.setUsername("admin");
user.setPassword("password");
session.save(user);
transaction.commit();
session.close();
4. Transaction
Transaction用于管理事务,以下是一个示例:
Transaction transaction = session.beginTransaction();
// 执行数据库操作
transaction.commit();
5. Criteria
Criteria用于构建查询,以下是一个使用Criteria查询User对象的示例:
Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(User.class);
List<User> users = criteria.list();
session.close();
六、Hibernate缓存
Hibernate缓存分为一级缓存和二级缓存。一级缓存是Session级别的缓存,默认开启。二级缓存是SessionFactory级别的缓存,需要手动配置。
1. 一级缓存
一级缓存是内置的,无需配置。当我们在一个Session中查询某个对象时,Hibernate会将其缓存起来。如果在同一个Session中再次查询该对象,Hibernate会直接从缓存中获取,而不是再次查询数据库。
2. 二级缓存
二级缓存是跨Session的缓存,需要配置。以下是一个开启二级缓存的示例:
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
七、Hibernate与Spring集成
Hibernate可以与Spring框架集成,通过Spring来管理Hibernate的Session。以下是一个单纯的集成示例:
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.example.domain"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
八、总结
Hibernate作为一个成熟的ORM框架,极大地简化了Java持久化层的开发。通过本文的介绍,我们了解了Hibernate的基础概念、安装与配置、映射、核心API、缓存以及与Spring的集成。掌握这些知识,可以让我们更好地使用Hibernate进行Java持久化层的开发。