本文致力于解决 hibernate 与 DM 的适配,需要说明的是,依赖仅只有 hibernate,暂不涉及 springboot。
向 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 表,同时,里面会有一条数据,如下图所示
更新刚插入的那条数据,代码如下:
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 岁,如下图所示
查询刚刚修改过的数据,代码如下:
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;
}
删除掉插入的数据,代码如下:
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,工作空余时间会解答。
文章
阅读量
获赞