javamagicsun 2020-04-11
Hibernate是开发者社区比较流行的持久化框架
它不仅提供了基本的对象关系映射,还提供了作为ORM工具所应有的复杂功能
比如:缓存、延迟加载、预先抓取和分布式缓存
使用Hibernate的主要接口是org.hibernate.Session
Session接口提供了基本的数据访问功能
如保存、更新、删除以及从数据库中加载对象的功能
获取Hibernaate Session对象的标准方式是借助于Hibernate的Session Factory接口的实现类
除了一些其它的任务,SessionFactory主要负责Hibernate Session的打开、关闭以及管理
OK,那么我们开始创建一个最简单的例子来学习Hibernate
环境:IDEA 2019 3.3、Maven、Mysql
借助IDEA先创建一个maven的quick start工程
然后最终的得到的完整的项目结构为:
** *.xml文件直接通过new->file的方式建立 **
<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>
所谓的持久化类,即是需要将该类的对象存储到数据库中
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; } }
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>
*.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>
在Hibernate中,不需要自己手动在数据库中生成持久化的表
因为在hibernate.cfg.xml配置文件中,我们设置了<property name="hbm2ddl.auto">update</property>
而update意味着:如果表结构不一致,就创建或更新
所以,我们可以不创建数据库表,等着Hibernate给我们创建
// 加载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();