Hibernate是Java平台上的一个对象/关系映射框架,常用于在Java应用程序中访问和管理数据库。在Hibernate中,我们需要使用映射文件将Java对象与数据库表进行映射。其中,hbm.xml文件作为Hibernate映射文件的一种形式,是一种XML格式的文件,这个文件用来描述Java对象与数据库表之间的映射关系。本文将详细讲解如何使用hbm.xml配置映射关系解析:
前置要求
在讲解具体配置过程前,我们需要先了解以下几个概念:
- 实体类:指Java中的Entity,即与数据库表对应的Java类。
- 属性:指Java中的变量,即实体类中的字段,用来描述对象的特征。
- 映射:指实体类与数据库表之间的对应关系,也就是如何将一个类映射到数据库。
步骤
第一步:创建实体类
我们需要定义一个Java类,这个类中定义了需要映射到数据库的属性。比如我们定义一个User类:
public class User {
private Long id;
private String name;
private Integer age;
// 省略 getter 和 setter 方法
}
第二步:创建hbm.xml文件
我们需要创建一个User.hbm.xml文件,并将映射信息写入该文件。文件的位置和文件名必须与实体类的名称和包路径一致。示例文件如下:
<?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 package="com.example.entity">
<class name="User" table="user">
<id name="id" type="java.lang.Long" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
</class>
</hibernate-mapping>
解释:
- package属性:定义实体类所在的包路径。
- class标签:定义实体类的映射信息。
- name属性:指实体类的类名。
- table属性:指实体类对应的库表名。
- id标签:定义id属性的映射信息。
- generator标签:定义主键生成策略。
- property标签:定义属性的映射信息。
- name属性:指实体类中的属性名。
- column属性:指属性对应的库表列名。
- type属性:指属性的数据类型。
第三步:加载hbm.xml文件
在Java代码中加载hbm.xml文件,并获取SessionFactory对象。示例代码如下:
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
其中,cfg.configure()方法会自动寻找并加载classpath中的hibernate.cfg.xml配置文件,该文件中会指定所有需要加载的hbm.xml文件。也可以通过cfg.addFile("User.hbm.xml")方法手动添加。
第四步:使用Session进行CRUD操作
获取Session对象后,就可以进行CRUD操作了。示例代码如下:
// 新增用户
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
user.setName("张三");
user.setAge(20);
session.save(user);
tx.commit();
session.close();
// 查询用户
session = sessionFactory.openSession();
List<User> userList = session.createQuery("from User").list();
session.close();
// 修改用户
session = sessionFactory.openSession();
tx = session.beginTransaction();
user = (User) session.get(User.class, 1L);
user.setName("李四");
session.update(user);
tx.commit();
session.close();
// 删除用户
session = sessionFactory.openSession();
tx = session.beginTransaction();
user = (User) session.get(User.class, 1L);
session.delete(user);
tx.commit();
session.close();
示例
下面给出两个具体的示例。
示例一:定义一个Customer实体类
package com.example.entity;
public class Customer {
private Long id;
private String name;
private Integer age;
// 省略 getter 和 setter 方法
}
示例一:创建Customer.hbm.xml文件
<?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 package="com.example.entity">
<class name="Customer" table="customer">
<id name="id" type="java.lang.Long" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
</class>
</hibernate-mapping>
示例二:定义一个Order实体类
package com.example.entity;
import java.util.Date;
public class Order {
private Long id;
private Customer customer;
private Date createTime;
// 省略 getter 和 setter 方法
}
示例二:创建Order.hbm.xml文件
<?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 package="com.example.entity">
<class name="Order" table="orders">
<id name="id" type="java.lang.Long" column="id">
<generator class="native"/>
</id>
<many-to-one name="customer" column="customer_id" class="com.example.entity.Customer"/>
<property name="createTime" column="create_time" type="java.util.Date"/>
</class>
</hibernate-mapping>
总结
本文详细讲解了使用hbm.xml配置Hibernate映射关系的过程。主要分为4个步骤:创建实体类、创建hbm.xml文件、加载hbm.xml文件以及使用Session进行CRUD操作。其中,hbm.xml文件用于描述实体类与数据库表之间的映射关系。本文还提供了两个示例,供读者参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Hibernate使用hbm.xml配置映射关系解析 - Python技术站