一文看懂SpringBoot操纵数据库
1.前言
很多同学进入公司就开始参与项目开发,大多数情况是对某个项目进行维护或者需求迭代,能够从0到1参与到项目中的机会很少,因此并没有多少机会了解某些技术的运行机制。换句话说,有的面试官在面试的时候就会探讨深层的技术问题,而不是关心你知道什么业务,怎么用技术去实现业务。
今天要讲的就是SpringBoot操纵数据库,这个大家做得比较多的就是去写一个Dao的类,然后在mapper.xml文件里面写SQL,最后封装成Service供Controller调。如果让你去搭建好这个项目的基础框架,你该怎么做呢,我们今天就来看看。
2.Spring架构
下面这张图是我最喜欢看的一张图,也是对Spring体系结构描述最准确的一张图,大家学习Spring了解最多的可能是IOC、DI、AOP这些名词,其实Spring还有一个很强大的组件就是Spring Data。

如果是只用Spring,则需要采用下面依赖,就可以进行数据库的访问了:
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId></dependency>
3.SpringBoot操纵数据库
现在的项目一般都是基于SpringBoot的,我们只需通过下面的依赖即可访问数据源:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
点进这个依赖进去看,会发现它又依赖于:
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>3.4.2</version><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.4.RELEASE</version><scope>compile</scope></dependency>
我们知道了SpringBoot的默认连接池用的HikariCP。因为我们连接的是mysql数据库,因此除了依赖spring-boot-starter-jdbc,还需要依赖:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
下面在数据库建一张student的表(这个不需要讲如何建吧,如果需要欢迎留言),然后写一个controller类如下:
@RestController
public class StudentController {@AutowiredJdbcTemplate jdbcTemplate;@GetMapping("/students")public List<Map<String,Object>> userList(){String sql = "select * from student";List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);return maps;}
}
启动SpringBoot,如何建一个SpringBoot项目如果不会可以参考我的文章:
在浏览器中输入:http://localhost:8080/students
结果就来了,如何结果没出来的欢迎留言,我会及时解答。这个时候看控制台的输出,会发现是使用的HikariPool
2023-04-13 22:47:56.526 INFO 22916 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2023-04-13 22:47:58.365 INFO 22916 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
4.配置数据库连接池Druid
不用SpringBoot自带的连接池,使用阿里巴巴的Druid连接池,添加pom依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version>
</dependency>
在application.yml里面增加数据源类型:
type: com.alibaba.druid.pool.DruidDataSource
重新启动服务,调用上面的接口:
2023-04-13 22:57:26.563 INFO 18764 --- [nio-8080-exec-1] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
5.使用MyBatis
好的数据访问离不开优秀的持久层框架,这时就要用MyBatis,用了它不仅可以将SQL和Java代码分离,还能非常方便的讲Java实体与数据库数据做映射。添加pom依赖:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version>
</dependency>
写一个实体类接收数据,字段和数据库里一致即可,这里就不贴代码了。再写一个接口:
@Mapper
public interface StudentDao {List<Student> getAll();
}
在mapper.xml文件里写:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.dao.StudentDao"><select id="getAll" resultType="com.example.entity.Student">select * from student</select>
</mapper>
最后在controller里写:
@GetMapping("/studentList")public List<Student> studentList(){List<Student> list = studentDao.getAll();return list;}
总结
今天一步步从架构谈起,讲到如何去使用更优秀的连接池以及持久层框架去做数据存储,希望能让大家更清楚这里面的原理。
相关文章:
一文看懂SpringBoot操纵数据库
1.前言 很多同学进入公司就开始参与项目开发,大多数情况是对某个项目进行维护或者需求迭代,能够从0到1参与到项目中的机会很少,因此并没有多少机会了解某些技术的运行机制。换句话说,有的面试官在面试的时候就会探讨深层的技术问题…...
科普:java与C++的区别
Java与C是两种广泛使用的编程语言,它们在某些方面存在不同之处。本文将详细介绍Java与C的区别。 一、C与Java的历史 C语言是由Bjarne Stroustrup在20世纪80年代初期开发的一种面向对象编程语言,它是C语言的扩展。Java语言是由Sun Microsystems公司于20…...
突发!ChatGPT疯了!
数据智能产业创新服务媒体——聚焦数智 改变商业今天,笔者正常登录ChatGPT,试图调戏一下他。但是,突然震惊的发现,ChatGPT居然疯了。之所以说他是疯了,而不是崩溃了,是因为他还能回复我,但回…...
docker-compose容器编排使用详解+示例
文章目录一、docker-compose概述1、产生的背景2、核心概念3、使用的三个步骤4、常用命令二、下载安装1、官方文档2、下载3、卸载三、使用compose1、前置知识,将一个springboot项目打包为镜像2、编写docker-compose.yml文件3、启动docker-compose4、停止一、docker-c…...
可用的rtsp ,rtmp地址以及使用VLC和ffmpeg 播放视频流
可用的 rtmp地址: rtmp://ns8.indexforce.com/home/mystream 可用的 rtsp地址: rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4 可搭配VLC播放器使用,以及虚幻4 流媒体使用,实现直播效果 1.使用VLC 播放:https://www.vi…...
Python机器学习:朴素贝叶斯
前两天不知道把书放哪去了,就停更了一下,昨天晚上发现被我放在书包夹层里面了,所以今天继续开始学习。 首先明确一下啊,朴素贝叶斯是什么:朴素贝叶斯分类器是一种有监督的统计学过滤器,在垃圾邮件过滤、信…...
几个最基本软件的环境变量配置
在Windows中配置环境变量位置: 控制面板->系统和安全->系统。可以点击:“此电脑”->“属性”直接进入。 点击“高级系统设置”->【环境变量】。在这里可以看见用户变量和系统变量,如果你这台机器不是你一个人使用设置为用户变量…...
物业企业如何加快向现代服务业转型
近年来,随着人民生活水平的提高,人们对住宅质量提出更高的要求,在此前提下,全国各地涌现出了一些运用现代的计算机、控制与通信技术建设的智能化住宅小区。但是许多智能化住宅小区都存在建好了智能硬件环境却没有智能化的软件在上…...
java ssm人力资源系统Y3程序
1.系统登录:系统登录是员工访问系统的路口,设计了系统登录界面,包括员工名、密码和验证码,然后对登录进来的员工判断身份信息,判断是管理员还是普通员工。 2.系统员工管理:不管是超级…...
leetcode重点题目分类别记录(三)动态规划深入与素数理论
文章目录动态规划背包问题01背包抽象出求解目标尝试进程子问题拆分基本情况根据拆分过程定义dp数组与转移方程遍历顺序与状态压缩模板归纳题目应用变种提升组合问题多维01背包有特殊限制的01背包完全背包打家劫舍股票系列子序列类数位dp动态规划 背包问题 01背包 有C0-Cx件物…...
面试篇-学习Java多线程编程必备:深入理解volatile与synchronized
1. 概述 1.1 Volatile概述 Volatile是Java中的一种轻量级同步机制,用于保证变量的可见性和禁止指令重排。当一个变量被声明为Volatile类型时,任何修改该变量的操作都会立即被所有线程看到。也就是说,Volatile修饰的变量在每次修改时都会强制…...
后端系列文章
后端系列文章目录 缘由:无聊了,写点博客玩玩 注:该系列文章纯属个人见解,漏洞百出,大家看个乐就行了,别当真! 私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多&…...
C++之AVL树
文章目录前言一、概念二、AVL树结点的定义三、AVL树的插入四、AVL树的旋转1.右单旋的情况以及具体操作抽象图h 0h 1h 2代码实现2.左单旋的情况以及具体操作抽象图代码实现3.右左双旋的情况以及具体操作抽象图h 0h 1h 23.左右双旋的情况以及具体操作抽象图5.总结6.完整实现…...
【ROS2指南-2】入门 turtlesim 和 rqt
目标:安装并使用 turtlesim 包和 rqt 工具为即将到来的教程做准备。 教程级别:初学者 时间: 15分钟 内容 背景 先决条件 任务 1 安装turtlesim 2 启动turtlesim 3 使用turtlesim 4 安装rqt 5 使用 rqt 6 重新映射 7 关闭turtlesim …...
Python 进阶指南(编程轻松进阶):四、起个好名字
原文:http://inventwithpython.com/beyond/chapter4.html 计算机科学中最困难的两个问题是命名事物、缓存失效引起错误."这个经典的笑话,出自利昂班布里克之手,并基于菲尔卡尔顿的一句话,包含了一个真理的核心:很…...
STL容器适配器之<priority_queue>
文章目录测试环境priority_queue介绍头文件模块类定义对象构造元素访问元素插入和删除容器大小迭代器其他函数测试环境 系统:ubuntu 22.04.2 LTS 64位 gcc版本:11.3.0 编辑器:vsCode 1.76.2 priority_queue介绍 容器适配器。支持在末端插入…...
线程——线程同步
案例:卖票 需求:某电影院目前正在上映国产大片,共有100张票,而它有三个窗口卖票,请设计一个程序模拟该电影院卖票 思路: 定义一个类SellTicket实现Runnable接口,里面定义一个成员变量ÿ…...
安卓录屏使用VirtualDisplay虚拟屏幕;MediaRecorder,媒体录影机;
1.跟截屏一样,判断权限,然后在onActivityResult里面给mediaProjection赋能; 2.初始化录像机: //初始化Recorder录像机 fun initRecorderStart() { //新建Recorder val displayMetrics DisplayMetrics() val width displayMetri…...
Java FileChannel文件的读写实例
一、概述: 文件通道FileChannel是用于读取,写入,文件的通道。FileChannel只能被InputStream、OutputStream、RandomAccessFile创建。使用fileChannel.transferTo()可以极大的提高文件的复制效率,他们读和写直接建立了通道&#x…...
2023 年男生还推荐报计算机专业吗?
计算机专业确实是一个非常热门的专业,就业前景也很广阔。 但是,近些年随着各个大学对计算机专业及其相关专业疯狂扩招,而且每年的毕业人口都在增多,行业是根本容纳不下的,就业竞争力度也急剧上升。因此,选…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...
