# hibernate-demo
**Repository Path**: dm-adaptation/hibernate-demo
## Basic Information
- **Project Name**: hibernate-demo
- **Description**: hibernate 适配 dm 的代码,根据标签来区分不同版本的 hibernate
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-02-11
- **Last Updated**: 2025-02-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Hibernate 与 DM 的适配
本文致力于解决 hibernate 与 DM 的适配,需要说明的是,依赖仅只有 hibernate,暂不涉及 springboot。
## 环境准备
* jdk:openjdk 1.8;
* hibernate:5.6.15.Final;
* dm:8.1.4.6;
* dm-jdbc-driver: 8.1.4.6;
## 依赖准备
向 `pom.xml` 添加如下依赖包:
```xml
org.hibernate
hibernate-core
5.6.15.Final
com.dameng
DmDialect-for-hibernate5.6
8.1.4.6
com.dameng
DmJdbcDriver8
8.1.4.6
```
等待 maven 安装完成即可。
## 新建配置文件
在 `resource` 目录下,新增 `hibernate.cfg.xml` 文件,此为 hibernate 的配置文件:
```xml
dm.jdbc.driver.DmDriver
jdbc:dm://localhost:5236
ADAPTATION
Adaptation@2025
org.hibernate.dialect.DmDialect
true
update
```
## 新建实体类
我们新建一个 `Person` 实体类用于测试使用,代码如下:
```java
@Entity
@Data
public class Person {
@Id
private int id;
private String name;
private int age;
}
```
## 新建实体类配置文件
同样在 `resource` 目录,新建 `Person.hbm.xml` 配置文件,代码如下:
```xml
```
至此,hibernate 的配置就完成了,接下来写一下 curd 的代码。
## 新增数据
目前,只新增一条数据作为测试,代码如下:
```java
public void insertItem() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
person.setName("guangluo");
person.setAge(25);
session.save(person);
transaction.commit();
session.close();
sessionFactory.close();
}
```
这时,数据库中的 ADAPTATION 模式下,会新增一张 PERSON 表,同时,里面会有一条数据。
## 修改数据
更新刚插入的那条数据,代码如下:
```java
public void updateItem() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = session.get(Person.class, 1);
person.setName("guangluo");
person.setAge(37);
session.update(person);
transaction.commit();
session.close();
sessionFactory.close();
}
```
年龄将更改为 37 岁。
## 查询数据
查询刚刚修改过的数据,代码如下:
```java
public List queryItems() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
List persons = session.createQuery("from Person").list();
transaction.commit();
session.close();
sessionFactory.close();
for (Person person : persons) {
System.out.println(person);
}
return persons;
}
```
## 删除数据
删除掉插入的数据,代码如下:
```java
public void deleteItem() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = session.get(Person.class, 1);
session.delete(person);
transaction.commit();
session.close();
sessionFactory.close();
}
```
数据被删除,如下图所示。
此篇文章只证明 hibernate 可以适配 DM 以及给各位适配 DM 提供思路。
如果项目中使用了其他依赖导致无法启动项目,可以详细排查一下其他依赖,会不会有兼容性的问题。
> 详细代码可见:https://gitee.com/dm-adaptation/hibernate-demo
>
> 如果遇到 hibernate 适配 DM 遇到问题,可以提 issue,工作空余时间会解答。