Hibernate核心组件主要有8大核心组件,包含:配置文件、持久化、映射文件等,下面分别详解。
1.Hiberbate配置文件
主要用来配置数据库连接参数,它有两种格式:hibernate.properties和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="dialect"> org.hibernate.dialect.MySQL5Dialect </property> <!-- 链接数据库url --> <property name="connection.url"> <![CDATA[jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf-8]]> </property> <!-- 连接数据库的用户名 --> <property name="connection.username"> root </property> <!-- 数据库的密码 --> <property name="connection.password"> 123456 </property> <!-- 数据库驱动 --> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- 显示sql语句 --> <property name="show_sql"> true </property> <!-- 格式化sql语句 --> <property name="format_sql">true</property> <!-- 映射文件配置 --> <mapping resource="com/mikechen/domain/User.hbm.xml" /> </session-factory> </hibernate-configuration>
hibernate.cfg.xml主要用于:配置数据库连接、事务管理、Hibernate 本身的配置信息。
2.持久化对象(PO)
在Hibernate应用中,一个数据表对应一个持久化对象PO。
比如User持久化对象就对应User表,如下所示:
package com.mikechen.domain; public class User { private Integer id; // 唯一标识id private String name; // 姓名 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
3.映射文件
用来把PO与数据库中的数据表映射起来,比如我把刚才的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> <!-- name代表的是类名,table代表的是表名 --> <class name="com.mikechen.domain.User" table="user"> <!-- name代表的是User类中的id属性,column代表的是user表中的主键id --> <id name="id" column="id"> <!-- 主键生成策略 --> <generator class="native" /> </id> <!-- 其他属性使用property标签映射 --> <property name="name" column="name" type="java.lang.String" /> </class> </hibernate-mapping>
这样我就把User实体类与user表关联一起了。
4.Configuration类
用来读取Hibernate配置文件和映射文件,并创建SessionFcatory对象。
如下所示:
// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 Configuration config = new Configuration().configure();
5.SessionFactory接口
SessionFactory接口产生Session实例的工厂,负责Session实例的创建,可通过Configuration创建SessionFactory。
如下所示:
// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 Configuration config = new Configuration().configure(); // 2.获取SessionFactory SessionFactory sessionFactory = config.buildSessionFactory();
6.Session接口
用来操作PO,它有get() save() update() delete()等方法,用来对PO进行加载、保存、更新及删除等操作,是hibernate的核心接口。
如下所示:
// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 Configuration config = new Configuration().configure(); // 2.获取SessionFactory SessionFactory sessionFactory = config.buildSessionFactory(); // 3.得到一个Session Session session = sessionFactory.openSession();
7.Transaction接口
用来管理Hibernate事物,主要方法有commit()和rollback(),可从Session的beginTransaction()方法生成。
如下所示:
// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 Configuration config = new Configuration().configure(); // 2.获取SessionFactory SessionFactory sessionFactory = config.buildSessionFactory(); // 3.得到一个Session Session session = sessionFactory.openSession(); // 4.开启事务 Transaction transaction = session.beginTransaction(); // 5.执行持久化操作 User user = new User(); user.setName("mikechen"); // 将对象保存到表中 session.save(user); // 6.提交事务 transaction.commit(); // 7.关闭资源 session.close(); sessionFactory.close();
8.Query接口
Query负责执行各种数据库查询,它可以使用HQL语言对PO进行查询操作。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》