注册
Hibernate 与 DM 的适配
专栏/「求真」/ 文章详情 /

Hibernate 与 DM 的适配

guangluo 2025/02/13 127 4 2
摘要 本文致力于解决 hibernate 与 DM 的适配,需要说明的是,依赖仅只有 hibernate,暂不涉及 springboot

本文致力于解决 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 添加如下依赖包:

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.6.15.Final</version> </dependency> <dependency> <groupId>com.dameng</groupId> <artifactId>DmDialect-for-hibernate5.6</artifactId> <version>8.1.4.6</version> </dependency> <dependency> <groupId>com.dameng</groupId> <artifactId>DmJdbcDriver8</artifactId> <version>8.1.4.6</version> </dependency>

等待 maven 安装完成即可。

新建配置文件

resource 目录下,新增 hibernate.cfg.xml 文件,此为 hibernate 的配置文件:

<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">dm.jdbc.driver.DmDriver</property> <!-- 驱动包类名 --> <property name="connection.url">jdbc:dm://localhost:5236</property> <!-- 数据库连接信息 --> <property name="connection.username">ADAPTATION</property> <!-- 用户名 --> <property name="connection.password">Adaptation@2025</property> <!-- 密码 --> <property name="dialect">org.hibernate.dialect.DmDialect</property> <!-- 方言包类名 --> <property name="hibernate.format_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 自动更新表结构 --> <mapping resource="Person.hbm.xml"/> </session-factory> </hibernate-configuration>

新建实体类

我们新建一个 Person 实体类用于测试使用,代码如下:

@Entity @Data public class Person { @Id private int id; private String name; private int age; }

新建实体类配置文件

同样在 resource 目录,新建 Person.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> <class name="org.adaptation.entity.Person" table="PERSON" schema="ADAPTATION"> <id name="id" column="id"> <generator class="identity" /> <!-- 主键生成方式,在 ddl 语句中,是 identity 方式,但是如果是 mysql 的话,应该要讲表结构改成 auto_increment 方式 --> </id> <property name="name" column="name" type="java.lang.String"/> <property name="age" column="age" type="java.lang.Integer" /> </class> </hibernate-mapping>

至此,hibernate 的配置就完成了,接下来写一下 curd 的代码。

新增数据

目前,只新增一条数据作为测试,代码如下:

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 表,同时,里面会有一条数据,如下图所示

image20250213150851266.png

修改数据

更新刚插入的那条数据,代码如下:

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 岁,如下图所示

image20250213151126394.png

查询数据

查询刚刚修改过的数据,代码如下:

public List<Person> queryItems() { Configuration configuration = new Configuration().configure(); SessionFactory sessionFactory = configuration.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); List<Person> persons = session.createQuery("from Person").list(); transaction.commit(); session.close(); sessionFactory.close(); for (Person person : persons) { System.out.println(person); } return persons; }

image20250213151331168.png

删除数据

删除掉插入的数据,代码如下:

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(); }

数据被删除,如下图所示

image20250213151516900.png

此篇文章只证明 hibernate 可以适配 DM 以及给各位适配 DM 提供思路。

如果项目中使用了其他依赖导致无法启动项目,可以详细排查一下其他依赖,会不会有兼容性的问题。

详细代码可见:https://gitee.com/dm-adaptation/hibernate-demo

如果遇到 hibernate 适配 DM 遇到问题,可以提 issue,工作空余时间会解答。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服