📅  最后修改于: 2023-12-03 14:41:43.476000             🧑  作者: Mango
Hibernate是一个流行的ORM框架,它提供了将Java对象映射到关系数据库中的机制。Hibernate通过XML文件的层次结构定义映射规则,并自动将对象的状态转化为数据库操作。在本文中,我们将介绍如何使用Hibernate通过XML文件的层次结构来定义数据库中的每个表。
建立Java类,这些类对应于数据库表。这些Java类必须包含getter和setter方法。
建立一个名为hibernate.cfg.xml
的文件,它存储Hibernate的配置信息和数据库连接信息。以下是示例代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydatabase</property>
<property name="hibernate.connection.username">myuser</property>
<property name="hibernate.connection.password">mypassword</property>
<property name="show_sql">true</property>
<mapping resource="com/mycompany/myapp/mapping/MyClass.hbm.xml"/>
</session-factory>
</hibernate-configuration>
其中,hibernate.dialect
是指定数据库方言,hibernate.connection.driver_class
是指定数据库的驱动程序,hibernate.connection.url
是指定数据库连接的URL,hibernate.connection.username
和hibernate.connection.password
是指定数据库登录的用户名和密码。show_sql
属性指示Hibernate是否显示生成的SQL语句。最后一个节点mapping
指定了Java类和Hibernate XML映射文件的路径。
MyClass
,那么你需要创建一个名为MyClass.hbm.xml
的文件。以下是示例代码:<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.mycompany.myapp.MyClass" table="my_class">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="description"/>
</class>
</hibernate-mapping>
该文件指定了与类对应的表的名称和标识符的生成方式。在本例中,使用"native"生成方式,Hibernate将根据底层数据库的支持(比如MySQL的Auto Increment)自动决定如何生成标识符。紧跟着<id>
标签的是唯一的属性名,它表示表中的主键。<property>
标签用于指定对象的每个属性,并将其映射到表的相应列。在本例中,MyClass
对象具有id
、name
和description
属性。
Configuration config = new Configuration();
config.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
在上面的代码中,Configuration
类是Hibernate配置的主要入口点。通过configure()
方法加载Hibernate的配置文件hibernate.cfg.xml
。buildSessionFactory()
方法通过Hibernate配置信息创建SessionFactory对象。
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
MyClass myClass = new MyClass();
myClass.setName("my name");
myClass.setDescription("my description");
session.save(myClass);
transaction.commit();
session.close();
在上面的代码中,我们创建了一个Hibernate Session对象。使用Transaction
类启动一个新事务,保存Java对象到数据库。最后,通过session.close()
方法关闭Session对象。
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
MyClass myClass = (MyClass) session.get(MyClass.class, id);
transaction.commit();
session.close();
在上面的代码中,我们通过session.get()
方法根据提供的对象id加载数据库中的Java对象。
通过使用Hibernate的XML映射文件,我们可以很容易地将Java对象映射到数据库中。对于每个Java类,只需要创建一个对应的Hibernate XML映射文件,并指定表和列的名称和属性的数据类型。Hibernate会自动完成对数据库的操作,这样程序员可以更加专注于业务逻辑而无需直接处理SQL语句。