Hibernate
Hibernate是开发者社区比较流行的持久化框架
它不仅提供了基本的对象关系映射,还提供了作为ORM工具所应有的复杂功能
比如:缓存、延迟加载、预先抓取和分布式缓存
使用Hibernate的主要接口是org.hibernate.Session
Session接口提供了基本的数据访问功能
如保存、更新、删除以及从数据库中加载对象的功能
获取Hibernaate Session对象的标准方式是借助于Hibernate的Session Factory接口的实现类
除了一些其它的任务,SessionFactory主要负责Hibernate Session的打开、关闭以及管理
OK,那么我们开始创建一个最简单的例子来学习Hibernate
环境:IDEA 2019 3.3、Maven、Mysql
1.工程建立
借助IDEA先创建一个maven的quick start工程
然后最终的得到的完整的项目结构为:
** *.xml文件直接通过new->file的方式建立 **
2.导入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.9.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
3.持久化类的建立
所谓的持久化类,即是需要将该类的对象存储到数据库中
package org.example;
public class User {
private String id;
private String username;
private int password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
}
4.hibernate.cfg.xml
hibernate.cfg.xml配置文件是Hibernate的全局配置文件
它主要包含了与数据库连接的基本信息
hibernate.cfg.xml的配置内容如下:
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库连接的基本信息-->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate?serverTimezone=UTC</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="connection.characterEncoding">utf8</property>
<!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--是否在后台显示Hibernate用到的SQL语句-->
<property name="show_sql">true</property>
<!--将SQL脚本进行格式化后再输出-->
<property name="format_sql">true</property>
<!--指定自动生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property>
<!--
create: 先删表,再建表。
create-drop: 启动时建表,退出前删表。
update: 如果表结构不一致,就创建或更新。
validate: 启动时验证表结构,如果不致就抛异常。
-->
<!--映射文件,可指定多个-->
<mapping resource="mapping/User.hbm.xml"/>
<!--一个持久化的类对应一个映射文件-->
</session-factory>
</hibernate-configuration>
5. User.hbm.xml
*.hbm.xml配置文件包含了Hibernate的基本映射信息
即每一个需要持久化的类与其对应的数据库表之间的关联信息
在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xml的mapping节点
加载到Configuration和SessionFactory实例
<?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="org.example.User" table="user" schema="hibernate">
<id name="id" column="id"/>
<property name="username" column="username"/>
<property name="password" column="password"/>
</class>
</hibernate-mapping>
6.数据库表的生成
在Hibernate中,不需要自己手动在数据库中生成持久化的表
因为在hibernate.cfg.xml配置文件中,我们设置了
<property name="hbm2ddl.auto">update</property>
而update意味着:如果表结构不一致,就创建或更新
所以,我们可以不创建数据库表,等着Hibernate给我们创建
7.测试
// 加载Hibernate默认配置文件
Configuration configuration = new Configuration().configure();
// 用Configuration创建SessionFactory
SessionFactory factory = configuration.buildSessionFactory();
// 创建Session
Session session = factory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction();
// 实例化持久化类
User user = new User();
user.setId("3");
user.setUsername("you");
user.setPassword(123456);
session.persist(user);
//session.delete(user);
//session.update(user);
// 提交事务
transaction.commit();
// 关闭Session,释放资源
session.close();
factory.close();
Mybatis
Hibernate和Mybatis的区别
原文地址:https://www.cnblogs.com/ASE265/p/12682809.html