📜  Hibernate – 使用 XML 文件的每个层次结构的表(1)

📅  最后修改于: 2023-12-03 14:41:43.476000             🧑  作者: Mango

Hibernate – 使用 XML 文件的每个层次结构的表

Hibernate是一个流行的ORM框架,它提供了将Java对象映射到关系数据库中的机制。Hibernate通过XML文件的层次结构定义映射规则,并自动将对象的状态转化为数据库操作。在本文中,我们将介绍如何使用Hibernate通过XML文件的层次结构来定义数据库中的每个表。

步骤
  1. 建立Java类,这些类对应于数据库表。这些Java类必须包含getter和setter方法。

  2. 建立一个名为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.usernamehibernate.connection.password是指定数据库登录的用户名和密码。show_sql属性指示Hibernate是否显示生成的SQL语句。最后一个节点mapping指定了Java类和Hibernate XML映射文件的路径。

  1. 在Java类所在的同一目录下,创建与Java类的名称相同的XML映射文件。例如,如果你有一个Java类叫做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对象具有idnamedescription属性。

  1. 建立Hibernate SessionFactory:
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.xmlbuildSessionFactory()方法通过Hibernate配置信息创建SessionFactory对象。

  1. 创建和保存对象到数据库:
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对象。

  1. 加载对象:
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语句。