一、Sprintboot + JPA + Druid + 达梦数据库(DM7)
(1)在 pom.xml 中引入达梦数据库驱动与达梦Hibernate方言。
首先,你在网上找到的文档基本都是下面这样的,通过外部引用的方式,这种落后的方法该摒弃了。
<!-- 达梦数据库 -->
<dependency>
<groupId>com.dm</groupId>
<artifactId>dmjdbc7</artifactId>
<version>1.7.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Dm7JdbcDriver17.jar</systemPath>
</dependency>
<dependency>
<groupId>com.dm.dialect</groupId>
<artifactId>hibernate4</artifactId>
<version>4.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/DmDialect-for-hibernate4.0.jar</systemPath>
</dependency>
达梦数据的驱动已经上传到maven中央仓库,国内的镜像如阿里也有,直接使用在线引入的方式。
<!--达梦数据库驱动-->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm7JdbcDriver17</artifactId>
<version>7.6.0.165</version>
</dependency>
<!--达梦数据库方言-->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmDialect-for-hibernate4.0</artifactId>
<version>8.1.1.49</version>
</dependency>
数据库驱动版本需要与数据库版本相同,比如DM7就需要对应DM7的驱动,具体的版本号version可以上这个网站查询:https://jar-download.com/artifacts/com.dameng/,如果需要离线引入,也可以在这个网站下载jar包。
(2)在 application.yml 中配置数据库连接信息和druid配置信息
spring:
#数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236/数据库?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
username: 用户名
password: 密码
druid:
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT1FROMDUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
filters: stat,wall,log4j #wall表示排除防火请
logSlowSql: true
#jpa配置
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.DmDialect
(3)创建Entity类
import com.fasterxml.jackson.annotation.JsonFormat;
import com.monster.model.entity.base.BaseEntity;
import com.monster.model.enums.commonEnums.OsTypeEnum;
import com.monster.model.enums.userEnums.VolunteerStatusEnum;
import java.util.Date;
import javax.persistence.*;
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;
import org.locationtech.jts.geom.Geometry;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.format.annotation.DateTimeFormat;
/**
* @author Administrator
*/
@Entity
@Data
@Table(name = "PEOPLE")
public class People {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Integer id;
@Column(name = "NAME")
private String name;
@Column(name = "PHONE")
private String phone;
@Column(name = "PASS")
private String pass;
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
", phone='" + phone + '\'' +
", pass='" + pass + '\'' +
'}';
}
}
(4)创建Repository
import com.monster.model.entity.Test.People;
import com.monster.model.entity.users.User;
import com.monster.repository.base.BaseRepository;
import java.util.List;
import java.util.Map;
import org.springframework.data.jpa.repository.Query;
/**
* @author Administrator
*/
public interface PeopleRepository extends BaseRepository<People>{
@Query(
nativeQuery = true,
value = "select * from TESTER.PEOPLE"
)
List<Map<String, Object>> findAllToMap();
}
(5)创建Junit测试类
import com.monster.repository.Test.PeopleRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @author Administrator
*/
@RunWith(SpringRunner.class)
//启动Spring
@SpringBootTest
public class JpaTest {
@Autowired
private PeopleRepository peopleRepository;
@Test
public void getPeoples() throws Exception {
log.info("***********************************BEGIN**************************************");
peopleRepository.findAll().stream().forEach(people->System.out.println(people.toString()));
log.info("************************************END***************************************");
}
}
(5)从控制台可以看到查询成功并打印了数据库用户信息。

二、Sprintboot + Mybatis + Druid + 达梦数据库(DM7)
(1)在 pom.xml 中引入达梦数据库驱动与达梦Hibernate方言。
<!--达梦数据库驱动-->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm7JdbcDriver17</artifactId>
<version>7.6.0.165</version>
</dependency>
<!--达梦数据库方言-->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmDialect-for-hibernate4.0</artifactId>
<version>8.1.1.49</version>
</dependency>
数据库驱动版本需要与数据库版本相同,比如DM7就需要对应DM7的驱动,具体的版本号version可以上这个网站查询:https://jar-download.com/artifacts/com.dameng/,如果需要离线引入,也可以在这个网站下载jar包。
(2)在 application.yml 中配置数据库连接信息和druid配置信息
spring:
#数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236/数据库?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
username: 用户名
password: 密码
druid:
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT1FROMDUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
filters: stat,wall,log4j #wall表示排除防火请
logSlowSql: true
#mybatis配置(注意,mybatis的配置不在sprinng层级下面,而是同级)
mybatis:
configuration:
logImpl: org.apache.ibatis.logging.stdout.StdOutImpl #开启mybatis sql 控制台打印
typeAliasesPackage: com.monster.model.entityVo #返回结果映射的VO包路径
mapperLocations: classpath:mapper/**/*.xml #mapper文件扫描路径
(3)创建对应的 EntityVo 类
import lombok.Data;
@Data
public class PeopleVo {
private Integer ID;
private String NAME;
private String PHONE;
private String PASS;
@Override
public String toString() {
return "PeopleVo{" +
"ID=" + ID +
", NAME='" + NAME + '\'' +
", PHONE='" + PHONE + '\'' +
", PASS='" + PASS + '\'' +
'}';
}
}
(4)创建对应的 Mapper 类
import com.monster.model.entityVo.test.PeopleVo;
import java.util.List;
import org.springframework.stereotype.Component;
@Component
public interface PeopleMapper {
/**
* 查询所有用户
*/
List<PeopleVo> findAll();
}
(5)创建对应的 Mapper.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.monster.mapper.test.PeopleMapper">
<select id="findAll" resultType="com.monster.model.entityVo.test.PeopleVo">
select * from "TESTER"."PEOPLE"
</select>
</mapper>
(6)创建测试类
import com.monster.mapper.test.PeopleMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@MapperScan("com.monster.mapper")
public class MybatisTest {
@Autowired
private PeopleMapper peopleMapper;
@Test
public void getPeoples() {
log.info("***********************************BEGIN**************************************");
peopleMapper.findAll().stream().forEach(peopleVo->System.out.println(peopleVo.toString()));
log.info("************************************END***************************************");
}
}
(7)查询用户数据成功,控制台输出用户信息。

三、集成过程中可能出现的问题
(1)JPA集成过程中可能会出现异常:
未知的列名 unknown column
原因:表字段使用了小写
解决办法:所有表字段请使用大写
(2)Mybatis集成过程中可能会出现如下异常:
Caused by: dm.jdbc.driver.DMException: 初始化SSL环境失败
at dm.jdbc.driver.DBError.throwException(DBError.java:630) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.b(DBAccess.java:1078) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.s(DBAccess.java:158) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.driver.DmdbConnection.openConnection(DmdbConnection.java:660) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.driver.DmDriver.do_connect(DmDriver.java:183) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.driver.DmDriver.connect(DmDriver.java:458) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.1.20.jar:1.1.20]
at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218) ~[druid-1.1.20.jar:1.1.20]
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.1.20.jar:1.1.20]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1645) ~[druid-1.1.20.jar:1.1.20]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1709) ~[druid-1.1.20.jar:1.1.20]
at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:932) ~[druid-1.1.20.jar:1.1.20]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1922) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1864) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
... 72 common frames omitted
原因:数据库开启了ssl验证
解决办法:在达梦数据库中运行以下代码关闭SSL验证并重启:
sp_set_para_value(2,'ENABLE_ENCRYPT',0);




