SpringBoot 整合达梦数据库 Demo

news2024/11/28 6:38:47

本文将介绍如何在 Spring Boot 项目中整合达梦数据库,并实现基本的用户管理功能。通过以下步骤,我们将创建一个简单的 RESTful API,以便于用户的增删改查(CRUD)操作。

【点我: 下载整套源码】

1. 创建数据库与数据表

首先,我们需要在达梦数据库中创建一个名为 test_user 的库,并在其中创建一个 user 表。

2. 引入依赖

pom.xml 文件中添加以下依赖,以支持 MyBatis-Plus 和达梦数据库的 JDBC 驱动:

<!-- Mybatis-Plus依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>

<!-- 达梦数据库依赖 -->
<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver6</artifactId>
    <version>8.1.3.162</version>
</dependency>

3. application.yml 配置

接下来,配置 application.yml 文件以设置服务器端口、国际化资源和 MyBatis 相关信息:

server:
  port: 8089


4. application-druid.yml 配置

application-druid.yml 中配置达梦数据库连接信息:

# 配置达梦数据库

5. 创建实体类

在项目中创建 User 实体类,用于映射数据库中的 user 表:

@Data
public class User {

    /** 主键 **/
    private Integer id;

    /** 用户名 **/
    private String name;

    /** 年龄 **/
    private Integer age;

    /** 创建时间 **/
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新时间 **/
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}

6. 创建 Controller

创建一个 UserController 类,处理用户相关的请求:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    /**
     * 列表
     * @param user
     * @return 用户列表
     */
    @GetMapping("/list")
    public List<User> list(User user) {
        return userService.list(user);
    }

    /**
     * 新增
     * @param user
     * @return 操作结果
     */
    @PostMapping
    public String insert(@RequestBody User user) {
        return userService.insert(user);
    }
}

7. 创建 Service

实现 IUserService 接口,创建 UserServiceImpl 类来处理业务逻辑:

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 列表
     * @param user
     * @return 用户列表
     */
    @Override
    public List<User> list(User user) {
        return userMapper.selectUserInfoList(user);
    }

    /**
     * 新增用户
     * @param user
     * @return 操作结果
     */
    @Override
    public String insert(User user) {
        user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        userMapper.insertUser(user);
        return "操作成功";
    }
}

8. 创建 Mapper

创建 UserMapper 接口,定义数据库操作的方法:

@Mapper
public interface UserMapper {

    public User selectZqBookInfoById(Long id);

    public List<User> selectUserInfoList(User userInfo);

    public int insertUser(User userInfo);

    public int updateUser(User userInfo);

    public int deleteUserById(Long id);
}

9. 创建 SQL 映射文件

resources/mapper 目录下创建 UserMapper.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.example.dm_demo.mapper.UserMapper">
    
    <resultMap type="com.example.dm_demo.domain.User" id="UserInfoResult">
        <result property="id" column="id" />
        <result property="name" column="name" />
        <result property="age" column="age" />
        <result property="createTime" column="create_time" />
        <result property="updateTime" column="update_time" />
    </resultMap>

    <sql id="selectUserInfoVo">
        select * from "user"
    </sql>

    <select id="selectUserInfoList" parameterType="com.example.dm_demo.domain.User" resultMap="UserInfoResult">
        <include refid="selectUserInfoVo"/>
        <where>
            <if test="age != null and age != ''"> and age = #{age}</if>
            <if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
        </where>
        order by create_time desc
    </select>
    
    <insert id="insertUser" parameterType="com.example.dm_demo.domain.User">
        insert into "user"
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="age != null">age,</if>
            <if test="name != null">name,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateTime != null">update_time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="age != null">#{age},</if>
            <if test="name != null">#{name},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateTime != null">#{updateTime},</if>
        </trim>
    </insert>

    <update id="updateUser" parameterType="com.example.dm_demo.domain.User">
        update "user"
        <trim prefix="SET" suffixOverrides=",">
            <if test="age != null">age = #{age},</if>
            <if test="name != null">name = #{name},</if>
        </trim>
        where id = #{id}
    </update>

    <delete id="deleteUserById" parameterType="Long">
        delete from "user" where id = #{id}
    </delete>

    <delete id="deleteUserByIds" parameterType="String">
        delete from "user" where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>

10. 新增用户测试

可以使用 POST 请求向接口 http://127.0.0.1:8089/user 提交以下 JSON 数据以新增用户:

{
    "name": "陈小说",
    "age": 22
}

11. 列表用户测试

使用 GET 请求获取用户列表,访问接口 http://127.0.0.1:8089/user/list,应该会得到如下响应:

[
    {
        "id": 10,
        "name": "陈小说",
        "age": 22,
        "createTime": "2024-11-02 14:33:38",
        "updateTime": "2024-11-02 14:33:38"
    }
]

12. 查看数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2235508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高校实验室安全巡检系统设计与实现(源码+定制+开发)高校实验室巡检系统、实验室安全管理平台、实验室安全监控系统、智能实验室巡查系统、高校实验室风险管理

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【系统集成项目管理工程师教程】第4章 信息系统架构

教程内容总结&#xff0c;供参考&#xff0c;有错误请指正&#xff0c;友好交流。 4.架构基础 4.1.1指导思想 4.1.2设计原则 原则内容&#xff1a;包括坚持以人为本、创新引领、问题导向、整体协同、安全可控、科学实施等&#xff0c;这些原则应基于组织的信念和价值观&…

如何学习C++游戏开发

学习C游戏开发是一个涉及多个领域的复杂过程&#xff0c;包括编程、游戏设计、图形学等。 1. **学习C基础**&#xff1a; - 掌握C的基本语法和面向对象编程。 - 学习C标准库&#xff0c;特别是STL&#xff08;标准模板库&#xff09;。 2. **理解游戏开发概念**&#xf…

Socket 和 WebSocket 的应用

Socket&#xff08;套接字&#xff09;是计算机网络中的一个抽象层&#xff0c;它允许应用程序通过网络进行通信。套接字用于跨网络的不同主机上的应用程序之间的数据交换。在互联网中&#xff0c;套接字通常基于 TCP&#xff08;传输控制协议&#xff09;或 UDP&#xff08;用…

mac 本地docker-mysql主从复制部署

mac 本地docker-mysql主从复制部署,服务器同理 1.本地docker启动两个mysql服务.端口号不一样 没有选择挂载到宿主机.只做测试用. 只是端口号不一样容器删掉.就没有数据了. 生产测试,需要挂在 master docker run -d --name mysql-slave -p 3308:3306 \ -e MYSQL_ROOT_PASSWORD…

HTML学习笔记十三

系列笔记目录 第一章 HTML的概述 第二章 URL简介 第三章 网页元素的属性 第四章 html字符编码 第五章 网页的语义结构 第六章 文本标签 第七章 列表标签 第八章 图像标签 第九章 链接标签 第十章 多媒体标签 第十一章 iframe 第十二章 表格标签 第十三章 表单标签 表单标签 系列…

在鱼皮的模拟面试里面学习有感

文章目录 1.上半场1.1.引言1.2.鱼皮的建议 2.下半场2.1中间问题 3.我的总结3.1我的体会3.2我的计划 1.上半场 今天的直播&#xff0c;第一次全程的跟下来&#xff1a;也算是放松一下~~ 1.1.引言 上半场是后来总结的&#xff0c;听的时候没有随手记录&#xff1a; 1&#xf…

思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!

文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 前言 今天我们要聊聊如何通过cpolar内网穿透技术&#xff0c;把国产笔…

前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)

一、相对定位 使用相对定位的盒子会相对于自身原本的位置&#xff0c;通过偏移指定的距离&#xff0c;到达新的位置。盒子的本体仍处于文档流中。使用相对定位&#xff0c;除了要将 position 属性值设置为 relative 外&#xff0c;还需要指定一定的偏移量。其中&#xff0c;水…

AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和工作学习方法 AJ-Report是一个基于Java的开源报表工具&#xff0c;它集成了ECharts、Ant Design Vue等前端技术&#xff0c;致力于为企业提供一站式的数据可视化解决方案…

【深度学习】InstantIR:图片高清化修复

InstantIR——借助即时生成参考的盲图像修复新方法 作者:Jen-Yuan Huang 等 近年来,随着深度学习和计算机视觉技术的飞速发展,图像修复技术取得了令人瞩目的进步。然而,对于未知或复杂退化的图像进行修复,仍然是一个充满挑战的任务。针对这一难题,研究者们提出了 Insta…

MySQL utf8mb3 和 utf8mb4引发的问题

问题描述 Cause: java.sql.SQLException: Incorrect string value: \xF4\x8F\xBB\xBF-b... for column sddd_aaa_ark at row 1 sddd_aaa_ark 存储中文字符时&#xff0c;出现上述问题 原因分析 sddd_aaa_ark在数据库中结构是 utf8字符的最大字节数是3 byte&#xff0c;但是某些…

日语学习的难易程度

日语学习的难易程度是一个相对主观的问题&#xff0c;它受到多种因素的影响&#xff0c;包括个人的语言学习能力、学习方法、学习时间、学习资源的可获得性以及个人对日语文化的兴趣和投入程度等。以下是对日语学习难易程度的一些分析&#xff1a; 优点与易学之处 文字系统&am…

Win10 连接到 Ubuntu 黑屏无法连接 使用Rustdesk显示 No Displays 没有显示器

Win10 连接到 Ubuntu 黑屏无法连接 使用Rustdesk显示 No Displays 没有显示器 解决办法安装虚拟显示器 安装xorg虚拟显示器 $ sudo apt install xserver-xorg-video-dummy # 提示错误依赖使用下面这个试试 $ sudo apt-get install xserver-xorg-video-dummy --fix-missing配…

Ubuntu安装Python并配置pip阿里镜像教程 - 幽络源

背景 因为要部署yolov8项目到ubuntu系统&#xff0c;但是yolov8要求python版本必须大于3.10&#xff0c;因此ubuntu20.04自带的python3.8不可用&#xff0c;需自行安装python&#xff0c;本教程使用python源码编译式安装python3.12.3&#xff0c;原因是apt下载python无法指定目…

uniapp组件实现省市区三级联动选择

1.导入插件 先将uni-data-picker组件导入我们的HBuilder项目中&#xff0c;在DCloud插件市场搜索uni-data-picker 点击下载插件并导入到我们的项目中 2.组件调用 curLocation &#xff1a;获取到的当前位置&#xff08;省市区&#xff09; <uni-data-picker v-slot:defa…

力扣:94--中序遍历二叉树

树 – 二叉树 完全二叉树&#xff1a; 完全二叉树可以用数组完美匹配位置&#xff08;先序存储&#xff1a;根左右&#xff09;&#xff0c; 推论一 &#xff1a; 位置为k的节点&#xff0c;左孩子&#xff1a;2*k 1 &#xff0c;右孩子 &#xff1a; 2 * &#xff08;k 1&…

「C/C++」C/C++STL篇 之 数组赋值给std::vector多种方法

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

关于 Qt+Osg中使用背景图HUD受到后绘制几何图形顶点颜色影响 的解决方法

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/143607816 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、Op…

使用python向钉钉群聊发送消息

使用python向钉钉群聊发送消息 一、在钉钉群中新建机器人二、使用代码发送消息 一、在钉钉群中新建机器人 在群设置中添加机器人 选择自定义 勾选对应的安全设置 完成后会展示webhook&#xff0c;将地址复制出来&#xff0c;并记录&#xff0c;后面会用到 二、使用代码发送消…