springboot依赖之JDBC API手写sql 管理数据库

news2024/9/20 8:00:39

JDBC API

  • 依赖名称: JDBC API

  • 功能描述: Database Connectivity API that defines how a client may connect and query a database.

  • 数据库连接 API,定义客户端如何连接和查询数据库。

    JDBC API 是 Java 标准库的一部分,提供低级别的数据库访问。需要手动管理数据库连接、事务、SQL 语句和结果集。适合需要细粒度控制的场景。

在 IntelliJ IDEA 中创建 Spring Boot 项目并使用 JDBC API 进行数据库操作,可以按照以下步骤操作:

<dependency>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-starter-jdbc</artifactId>
	        </dependency>

源码已开源,可以免费下载
码云gitee: https://gitee.com/CoderChange/springboot-all-dependencies

1. 创建 Spring Boot 项目

  1. 打开 IntelliJ IDEA 并点击 “New Project”

  2. 选择 “Spring Initializr”,然后点击 “Next”

  3. 填写项目的基本信息

    • Group: com.dependencies
    • Artifact: spring-jdbc
    • Name: spring-jdbc
    • Description: spring-jdbc project for Spring Boot
    • Package name: com.dependencies
    • Packaging: Jar
    • Java: 17
  4. 选择依赖

    • Spring Web
    • Spring JDBC
    • MySQL Driver(使用 MySQL 数据库)
  5. 点击 “Next”,然后点击 “Finish”,等待 IDEA 下载依赖并初始化项目。
    在这里插入图片描述

2. 添加 MySQL 依赖

pom.xml 中确保包含 MySQL 依赖:

<properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3. 配置数据库连接

src/main/resources/application.properties 文件中添加 MySQL 数据库连接信息:

# MySQL Database configuration
spring.datasource.url=jdbc:mysql://localhost:3306/spring-dependencies?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver

请根据实际情况修改 spring.datasource.urlspring.datasource.usernamespring.datasource.password

4. 创建数据库表

在 MySQL 中创建一个名为 spring-dependencies 的数据库,并创建一个示例表:

CREATE DATABASE spring-dependencies;

USE spring-dependencies;

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '姓名',
  `email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '邮箱',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';

在这里插入图片描述

5. 编写 JDBC 代码

创建实体类

创建一个简单的用户实体类 User

package com.dependencies.springjdbc.model;

/**
 * @author zhizhou   2024/7/29 23:23
 */
public class User {
    
    private int id;
    private String name;
    private String email;
   
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getEmail() {
        return email;
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
}
创建 DAO 类

创建一个数据访问对象(DAO)类 UserDao,使用 JDBC 进行数据库操作:

package com.dependencies.springjdbc.dao;

import com.dependencies.springjdbc.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * @author zhizhou   2024/7/29 23:23
 */
@Repository
public class UserDao {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    private static final class UserMapper implements RowMapper<User> {
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setEmail(rs.getString("email"));
            return user;
        }
    }
    
    public List<User> findAll() {
        return jdbcTemplate.query("SELECT * FROM users", new UserMapper());
    }
    
    public User findById(int id) {
        return jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?", new UserMapper(), new Object[]{id});
    }
    
    public int save(User user) {
        return jdbcTemplate.update("INSERT INTO users (name, email) VALUES (?, ?)",
                user.getName(), user.getEmail());
    }
    
    public int update(User user) {
        return jdbcTemplate.update("UPDATE users SET name = ?, email = ? WHERE id = ?",
                user.getName(), user.getEmail(), user.getId());
    }
    
    public int deleteById(int id) {
        return jdbcTemplate.update("DELETE FROM users WHERE id = ?", id);
    }
}
创建服务类

创建一个服务类 UserService,编写封装简单的业务逻辑:

package com.dependencies.springjdbc.service;

import com.dependencies.springjdbc.dao.UserDao;
import com.dependencies.springjdbc.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zhizhou   2024/7/29 23:29
 */
@Service
public class UserService {
    
    @Autowired
    private UserDao userDao;
    
    public List<User> findAll() {
        return userDao.findAll();
    }
    
    public User findById(int id) {
        return userDao.findById(id);
    }
    
    public int save(User user) {
        return userDao.save(user);
    }
    
    public int update(User user) {
        return userDao.update(user);
    }
    
    public int deleteById(int id) {
        return userDao.deleteById(id);
    }
}
创建控制器类

创建一个简单的控制器类 UserController,处理 用户相关的HTTP 请求:

package com.dependencies.springjdbc.controller;

import com.dependencies.springjdbc.model.User;
import com.dependencies.springjdbc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author zhizhou   2024/7/29 23:22
 */

@RestController
@RequestMapping("/users")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping
    public List<User> findAll() {
        return userService.findAll();
    }
    
    @GetMapping("/{id}")
    public ResponseEntity<User> findById(@PathVariable int id) {
        User user = userService.findById(id);
        if (user != null) {
            return ResponseEntity.ok(user);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
    
    @PostMapping
    public ResponseEntity<String> save(@RequestBody User user) {
        int result = userService.save(user);
        if (result == 1) {
            return ResponseEntity.ok("用户信息创建成功");
        } else {
            return ResponseEntity.status(500).body("用户信息更新失败");
        }
    }
    
    @PutMapping("/{id}")
    public ResponseEntity<String> update(@PathVariable int id, @RequestBody User user) {
        user.setId(id);
        int result = userService.update(user);
        if (result == 1) {
            return ResponseEntity.ok("用户信息更新成功");
        } else {
            return ResponseEntity.status(500).body("用户信息更新失败");
        }
    }
    
    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteById(@PathVariable int id) {
        int result = userService.deleteById(id);
        if (result == 1) {
            return ResponseEntity.ok("用户信息删除成功");
        } else {
            return ResponseEntity.status(500).body("用户信息删除失败");
        }
    }
}

6. 启动项目

在 IntelliJ IDEA 中,右键点击主类,选择 “Run”“Debug”。项目启动后,使用 Postman 或 curl 进行 HTTP 请求测试,验证各个 CRUD 操作。

示例请求

创建用户
curl -X POST "http://localhost:8080/users" -H "Content-Type: application/json" -d '{"name": "一周一志程序员", "email": "123456@gmail.com"}'
获取所有用户信息列表
curl -X GET "http://localhost:8080/users"
根据 ID 获取用户信息
curl -X GET "http://localhost:8080/users/1"
更新用户信息
curl -X PUT "http://localhost:8080/users/1" -H "Content-Type: application/json" -d '{"name": "一周一志程序员", "email": "654321@qq.com"}'
删除用户信息
curl -X DELETE "http://localhost:8080/users/1"

在这里插入图片描述

通过上述步骤,我们可以在 IDEA 中成功创建一个 Spring Boot 项目,并且使用 JDBC API 进行数据库操作。

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

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

相关文章

基于SpringBoot+Vue的超市进销存系统(带1w+文档)

基于SpringBootVue的超市进销存系统(带1w文档) 基于SpringBootVue的超市进销存系统(带1w文档) 本系统提供给管理员对首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、 商品信息管理、采购信息管理、入库信息管理、出库信息管理、销售…

一次通过PMP考试的学习经验分享

很开心的收到PMI发来的邮件&#xff0c;祝贺我通过了PMP考试。应助教老师的邀请&#xff0c;简单说下我的一些学习备考经验&#xff0c;希望能给即将参加考试的大家带来一些收获。 第一&#xff0c;听基础课&#xff0c;截图做笔记 课程时间对我来说&#xff0c;还是蛮长的。…

MQA(Multi-Query Attention)详解

论文名称&#xff1a;Fast Transformer Decoding: One Write-Head is All You Need 论文地址&#xff1a;https://arxiv.org/abs/1911.02150v1 MQA(Multi-Query Attention)是Google团队在2019年提出的&#xff0c;是MHA (Multi-head Attention&#xff0c;多头注意力机制)的一…

微信运营新助手:自动回复神器,让沟通更高效!

在现代职场中&#xff0c;效率是成功的关键。然而&#xff0c;我们经常会面对大量重复且繁琐的日常任务&#xff0c;消耗宝贵的时间和精力。 今天&#xff0c;我想向大家分享一个强大的微信自动回复神器&#xff0c;它将帮助你高效管理沟通&#xff0c;提升工作效率。 1、自动…

GraphHopper:开源路线规划引擎

在当今信息爆炸的时代&#xff0c;我们越来越依赖于智能路线规划来帮助我们节省时间、提高效率。GraphHopper作为一款开源的路线规划引擎&#xff0c;为我们提供了一个强大而灵活的工具&#xff0c;让我们可以在自己的应用程序中实现高效的路径计算。 什么是GraphHopper&#…

电脑录屏怎么录?2024四大工具助你轻松录制每一刻!

无论是教学演示、游戏直播&#xff0c;还是工作汇报&#xff0c;一款好用的录屏软件都能帮助我们轻松完成任务。那么&#xff0c;电脑录屏怎么录呢&#xff1f;今天为大家推荐几款实用的电脑录屏工具&#xff0c;让你轻松成为录屏达人&#xff01; Foxit REC&#xff1a;专业与…

Linux进程控制——进程程序替换、bash的模拟实现

文章目录 exec系列函数execlexeclp和execle execv系列函数bash的模拟实现实现思路完整代码其他问题 在学习进程的时候&#xff0c;我们想fork一个子进程&#xff0c;然后就可以给他布置任务了 但是如果我们分成两个人开发&#xff0c;父子进程分别负责不同的任务&#xff0c;等…

揭秘智能工牌:如何成为房企销售团队的数字化转型加速器

在这个竞争激烈的市场环境中&#xff0c;房企想要脱颖而出&#xff0c;不仅需要优质的产品和服务&#xff0c;更需要高效的销售团队。而销售团队的能力提升&#xff0c;离不开精细化管理和科技的赋能。DuDuTalk智能语音工牌&#xff0c;正是这样一款融合了AI技术与销售实战智慧…

无人机之森林防火篇

无人机在森林火灾中的应用是一个快速发展的领域&#xff0c;它们在火灾预防、监测、救援和灾后评估等方面发挥着重要作用。 一、无人机在森林火灾监测中的应用 在森林火灾的监测方面&#xff0c;无人机凭借其高空、高速、长时间巡查的优势&#xff0c;能够全面覆盖监测区域&am…

体育器材管理系统(完整开发文档)

1.1研究背景及意义 研究背景&#xff1a; 体育器材是高校体育教学和课外体育活动的重要物质基础&#xff0c;其使用和管理对于保障教学质量、提高学生体育素质具有重要意义。随着高校体育教学和课外活动的不断发展&#xff0c;体育器材的种类和数量不断增加&#xff0c;传统的…

Linux进程(一)

目录 一.进程的介绍1.引出进程2.进程的介绍 二.创建进程1.创建进程的原理2.什么是fork函数(1).通过手册查看fork 3.例子 一.进程的介绍 1.引出进程 Google Chrome 是一个进程 Google Chrome 底下的选项是多个线程 通过top命令可以查看正在运行的进程 2.进程的介绍 课本概念 …

F5云安全防护能力如何?一文为你解惑

伴随云计算的快速发展&#xff0c;云安全已成为实施云战略的重要保障。来自F5 SOAS报告的调查显示&#xff0c;近三分之二的企业将使用AI和机器学习划入优先事项&#xff0c;并把云安全列为最关键的应用场景。作为一家提供多云应用安全和应用交付的公司&#xff0c;F5的云安全防…

python实现微信聊天图片DAT文件还原

完整代码如下&#xff1a; from glob import glob import os from tqdm import tqdmdef get_sign(dat_r):signatures [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x46), (0xff, 0xd8, 0xff)]mats [".png", ".gif", ".jpg"]for now in dat_r:for j, x…

嵌入式行业,中年危机是否存在?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 肯定有&#xff0c;你看到的…

嵌入式人工智能(40-基于树莓派4B的水滴传感器和火焰传感器)

虽然这两个传感器水火不容&#xff0c;我还是把他们放到一起了。本文是有线传感器的最后一个部分了。后面如果还有文章介绍有线传感器&#xff0c;也是补充学习其他内容不得已而为之。如果不是&#xff0c;就当我没说&#xff0c;哈哈。 1、水滴传感器 水滴传感器又称雨滴传感…

实现字母的大小写转换。多组输入输出(c语言)

1.我们先输入字母&#xff08;用getchar的函数&#xff09;&#xff0c;判断是不是字母&#xff0c;我们可以用a<tmp<z或者A<tmp<Z,注意&#xff1a;小写转换大写用tmp-32&#xff0c;大写转换小写用tmp32.. #include<stdio.h> int main() {int a 0;while …

以太坊交易手续费计算

Gas 中译是&#xff1a;瓦斯、汽油&#xff0c;代表一种可燃气体。 这形象地比喻以太坊的交易手续费计算模式&#xff0c;不同于比特币中直接支付比特币作为转账手续费&#xff0c; 以太坊视为一个去中心化的计算网络&#xff0c;当你发送Token、执行合约、转移以太币或者在此区…

东巴古籍——纳西族古老文字的见证

关注我们 - 数字罗塞塔计划 - 华夏大地上的每个民族都有各自独特的文化传承&#xff0c;在前面的文章中&#xff0c;我们已经介绍过中国档案文献遗产名录中收录的永州女书和水族水书&#xff08;详细参见《永州女书——世上唯一专属于女性的文字》、《水书——破解象形文字含义…

二叉树LeetCode热题

94.二叉树的中序遍历 题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 输入&#xff1a;root [1,null,2,3]输出&#xff1a;[1,3,2] 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …

一文搞懂大模型在多GPU环境的分布式训练!

随着大模型时代的到来&#xff0c;模型参数量、训练数据量、计算量等各方面急剧增长。大模型训练面临新的挑战&#xff1a; 显存挑战&#xff1a;例如&#xff0c;175B的GPT-3模型需要175B*4bytes即700GB模型参数空间&#xff0c;而常见的GPU显存如A100是80G显存&#xff0c;这…