赞
踩
引言:相信很多人和我一样,在平常的学习中使用的数据库系统都是MySql或者Oracle,笔者最近突然对国产数据库产生了兴趣,想试试能不能通过我们常用的Spring boot与Mybatis框架访问达梦数据库。说干就干!
工欲善其事必先利其器,想要进行开发,首先工具是必不可少的。
编辑器:我自己比较喜欢使用IDEA,这里我就用IDEA作为一个示范
数据库系统:这里我使用的是DM8,DM8是达梦公司的新一代大型通用关系型数据库,大家感兴趣的话可以去达梦公司的官网下载。
jar包:这里我们需要准备达梦数据库的两个Jar包,分别是达梦数据库的驱动和方言依赖包,获取的方式我会在后面展示。
这一部分是给没有使用IDEA创建过Spring boot项目的新人的一些简单教程,大佬就可以直接略过了(其实这个文章就是给新人看的......)
1、Spring boot项目的创建
1)新建工程:
2)选择Spring Initializr,一般情况下我们可以选择通过图中https://start.spring.io这个网站来创建工程:
3)项目的构建和依赖的导入,我们要用到Mybatis,因此在依赖中需要选择Mybatis Framework
4)、构建完毕之后按ctrl+回车,我们会得到一个压缩包,解压后用IDEA打开,就是我们刚刚构建好的工程了。
2、数据库的准备和实例创建
打开官网上下载好的DM8镜像文件,一步步执行安装,安装完毕之后点击达梦数据库配置助手创建一个实例(图1),按引导教程一步步走,设置端口号(图2)设置你的口令和用户名(图3)(默认为SYSDBA),最后点击完成。
图1 图3
图2 图4
3、打开DM管理工具,输入你刚才设置的端口号,用户名和口令登录
到这里工程就创建完毕了,后面我们进行一个小小的项目开发,创建一个Student表,实现增删改查的功能,下面我们来看看pom配置文件和代码怎么写。
1、建表: 首先我们创建这样一个表,包含学生id,学生姓名,学生生日和学生介绍四种属性。建表的SQL语句如下:
设置id为它的主键。
2、pom文件的配置
这个时候回到我们最初的问题,没有JDBC Driver驱动包和方言依赖包。这个问题其实很好解决,DM数据库在安装完成之后可以在你的安装路径下的\deriver\jdbc文件夹中找到对应的驱动包和方言依赖包,之后在你工程的src目录下新建一个lib文件夹将,这两个包拷贝进去就行了,这里我的Java用的是JDK1.8,因此驱动用的是版本最高的DMJdbcDriver18。
驱动包的问题解决了,现在只需要在pom中添加这两个包的依赖就行了。如果你和我前面的配置是相同的,按照我给出的代码,添加依赖就行了。
- <!--DM-->
- <dependency>
- <groupId>com.dm</groupId>
- <artifactId>DmJdbcDriver</artifactId>
- <version>1.8</version>
- <scope>system</scope>
- <systemPath>${project.basedir}/src/lib/DmJdbcDriver18.jar</systemPath>
- </dependency>
-
- <!--dialect-->
- <dependency>
- <groupId>com.dm.dialect</groupId>
- <artifactId>hibernate5</artifactId>
- <version>5.3</version>
- <scope>system</scope>
- <systemPath>${project.basedir}/src/lib/DmDialect-for-hibernate5.3.jar</systemPath>
- </dependency>

3、工程结构如下图所示,StudentMapper就是Mybatis的Mapper映射文件
4、 注意application.properties文件中DM数据库驱动名的书写方式,username和password一定要和刚才我们创建的实例相同。这里笔者的配置方式作为初学者的一个参考。
- #DM
- spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
- spring.datasource.url =jdbc:dm://localhost:5336
- spring.datasource.username=SYSDBA
- spring.datasource.password=SYSDBA
-
- mybatis.mapper-locations=classpath:mapper/*Mapper.xml
- mybatis.type-aliases-package=com.example.DM.entity
- server.port=8080
- spring.thymeleaf.cache=false
- spring.thymeleaf.mode=HTML
- spring.thymeleaf.encoding=UTF-8
- spring.thymeleaf.prefix=classpath:/templates/
- spring.thymeleaf.suffix=.html

5、Mybatis映射文件的名字空间一定要和dao层的接口对应,resultMap要和entity的student类以及数据库中的表对应
- <?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.example.DM.dao.StudentDao">
-
- <resultMap id="BaseStudentMap" type="com.example.DM.entity.Student">
- <result column="id" property="id" jdbcType="INTEGER"/>
- <result column="name" property="name" jdbcType="VARCHAR"/>
- <result column="birthday" property="birthday" jdbcType="DATE"/>
- <result column="notes" property="notes" jdbcType="CLOB" />
- </resultMap>
- </mapper>
6、Mapper文件中的增删改查操作
- <select id="getAll" parameterType="com.example.DM.entity.Student" resultMap="BaseStudentMap">
- SELECT *
- FROM
- student
- </select>
- <update id="update" parameterType="com.example.DM.entity.Student">
- UPDATE
- student
- SET
- name=#{name},
- birthday=#{birthday},
- notes=#{notes}
- WHERE
- id=#{id}
- </update>
- <delete id="delete" parameterType="com.example.DM.entity.Student">
- DELETE
- FROM student
- WHERE id=#{id}
- </delete>
- <insert id="insert" parameterType="com.example.DM.entity.Student" >
- Insert into
- student
- values(#{id},#{name},#{birthday},#{notes})
- </insert>

7、StudentDao中每个接口的名字对应Mapper文件中每一个SQL脚本的id
- package com.example.DM.dao
- import com.example.DM.entity.Student;
- import org.springframework.stereotype.Repository;
- import java.util.List;
-
- @Repository
- public interface StudentDao {
-
- List<Student> getAll();
- int update(Student student);
- int delete(Student student);
- int insert(Student student);
- }
8、service层执行具体的操作,目的是将数据返回给controller层
- package com.example.DM.service;
-
- import com.example.DM.dao.StudentDao;
- import com.example.DM.entity.Student;
- import org.springframework.stereotype.Service;
-
- import javax.annotation.Resource;
- import java.util.List;
-
- @Service
- public class StudentService {
- @Resource
- StudentDao studentDao;
-
-
- public List<Student> getAll(){
- //System.out.println("getall");
- List<Student> list =studentDao.getAll();
- System.out.println(list.size());
- return list;
- }
-
- public int update(Student student){
- studentDao.update(student);
- return 1;
- }
-
- public int delete(Student student){
- studentDao.delete(student);
- return 1;
- }
-
- public int insert(Student student){
- studentDao.insert(student);
- return 1;
- }
-
- }

9、controller层负责接收前端的请求并交给service层处理
- package com.example.DM.controller;
-
- import com.example.DM.entity.Student;
- import com.example.DM.service.StudentService;
- import com.example.DM.util.Result;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- import javax.annotation.Resource;
- import java.util.List;
-
- @RestController
- @RequestMapping("/student")
- public class StudentController {
- @Resource
- private StudentService studentService;
-
-
- @RequestMapping("/all")
- public Result all(){
- Result result = new Result();
- System.out.println("start");
- List<Student> allStudent = studentService.getAll();
- // for(int i=0;i<allStudent.size();i++){
- // System.out.println(allStudent.get(i).toString());
- // }
- result.setStatus(1);
- result.getResultMap().put("data",allStudent);
- return result;
- }
-
- @RequestMapping("/opt")
- public Result opt(Student student){
- Result result = new Result();
- studentService.update(student);
- result.setStatus(1);
- return result;
- }
-
- @RequestMapping("/del")
- public Result del(int i){
- Result result = new Result();
- Student student = new Student();
- student.setId(i);
- studentService.delete(student);
- result.setStatus(1);
- return result;
- }
- @RequestMapping("/add")
- public Result add(Student student){
- Result result = new Result();
- studentService.insert(student);
- result.setStatus(1);
- return result;
- }
-
- }

注意:这里的Result是一个自定义类,由一个Map<String, Object>和int值组成,分别存储数据和状态信息返回给前端。
好了,现在代码写完了,我们在前端用一个表格来显示我们得到的数据吧,将刚才controller的all方法的注释去掉,可以看到前端和后端都打印出了数据。
至于修改、删除和添加功能的前端代码,大家可以根据自己的喜好用JavaScript试着实现一下。
此文章中出现的代码和工程构建方式存在不规范和不安全的情况。仅仅用于学习,请尽量不要在实际工作中使用。
想了解更多达梦数据库相关信息,欢迎访问达梦技术社区:https://eco.dameng.com/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。