SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍


文件目录
1.0 Mybatis 概述
2.0 数据库连接池
2.1 数据库连接池的主要作用包括
2.2 如何切换数据库连接池?
3.0 配置环境
4.0 Lombok 工具包
4.1 如何导入到项目中呢?
5.0 application 属性文件数据库连接的信息与 pom XML文件的依赖
1.0 Mybatis 概述
MyBatis 是一个持久层框架,它简化了数据库操作和 SQL 语句的处理。MyBatis 通过 XML 或注解的方式配置 SQL 语句,将 Java 对象和数据库表进行映射,提供了一种方便的方式来进行数据库操作。
MyBatis 是基于 JDBC 的持久层框架,它封装了 JDBC 的操作,简化了数据库访问的过程。
Mybatis 与 JDBC 的关系:
1)SQL 语句处理:JDBC 需要在 Java 代码中编写 SQL 语句并进行参数设置,而 MyBatis 可以通过 XML 或注解的方式配置 SQL 语句,将 SQL 语句与 Java 代码分离,提高了代码的可维护性和可读性。
2)数据库连接管理:JDBC 需要手动管理数据库连接的打开和关闭,而 MyBatis 可以通过配置文件自动管理数据库连接的打开和关闭,减少了开发人员的工作量。
3)数据映射:JDBC 需要手动将查询结果映射为 Java 对象,而 MyBatis 提供了强大的映射功能,可以自动将查询结果映射为 Java 对象,简化了数据的处理和转换。
4)缓存机制:JDBC 没有缓存机制,每次查询都需要访问数据库,而 MyBatis 提供了缓存机制,可以缓存查询结果,减少数据库访问次数,提高性能。
2.0 数据库连接池
数据库连接池是一种管理数据库连接的技术,它可以在应用程序启动时创建一定数量的数据库连接,并在需要时将这些连接分配给应用程序使用。使用数据库连接池可以减少数据库连接的创建和销毁次数,提高数据库操作的性能和效率。
常见的四个数据库连接池:DBCP、C3P0、Hikari、Druid。
HikariCP:是一个高性能、轻量级的 JDBC 数据库连接池,被认为是目前性能最好的连接池之一。HikariCP 具有快速的启动时间、低资源消耗和优秀的性能表现,适合用于高并发、性能要求较高的项目。在 Springboot 项目中默认自带的连接池。
Druid:是阿里巴巴开源的一个 JDBC 连接池和监控组件,集成了连接池、SQL 解析、SQL 监控等功能。Druid 具有强大的监控和管理功能,支持防火墙、密码加密、SQL 注入等安全特性,被广泛应用于企业级项目中。
2.1 数据库连接池的主要作用包括
1)资源重用:数据库连接池可以重用已经创建的数据库连接,减少了连接的创建和销毁开销,提高了系统的性能。
2)连接管理:数据库连接池可以管理连接的分配和释放,确保连接的有效性和可靠性。
3)连接池大小控制:数据库连接池可以根据应用程序的需求动态调整连接池的大小,避免连接过多或过少的情况发生。
4)连接超时处理:数据库连接池可以设置连接的超时时间,当连接空闲时间超过设定的时间时,连接将被释放,避免连接过期或长时间占用的情况发生。
2.2 如何切换数据库连接池?
1)先引入相关依赖。比如,切换成 Druid 数据库连接池,需要先导入该数据库连接池的依赖。
<!--Druid依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency>
2)在Springboot 项目中 resources 包下的 applocation.properties 属性文件中配置数据库的连接信息。
spring.datasource.drive-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/db01?characterEncoding=utf-8&useSSL=true spring.datasource.username=root spring.datasource.password=123456
3)运行结果,只要程序需要连接数据库,那么数据库连接池就会分配给当前程序。
3.0 配置环境
创建一个新的 Springboot 工程,选择引入对应的起步依赖(mybatis、mysql 驱动)和 application.properties 属性文件中引入数据库连接信息。
1)引入 mybatis 依赖
<!--mybatis的起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency>
2)引入 mysql 驱动包依赖
<!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
3)application.properties 属性文件中配置数据库连接的信息
spring.datasource.drive-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/db01?characterEncoding=utf-8&useSSL=true spring.datasource.username=root spring.datasource.password=123456需要注意的是,这里的密码和数据库名都是自定义的,不是完全相同的,要依据你当前要操作的数据库名和你当前的数据库密码。
4)额外的配置,如控制日志打印在控制台上,配置 pplication.properties 属性文件即可。
#将日志打印在控制台上 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
4.0 Lombok 工具包
Lombok 是一个用于简化 Java 代码开发的工具包,它通过添加注解来减少样板代码的编写,提高代码的简洁性和可读性。使用 Lombok 可以减少一些常见的代码模板,如 getter 和 setter 方法、构造函数、equals 和 hashCode 方法等,从而简化 Java 开发过程。
提供的注解为:
1)@Getter/@Setter:为所有的属性提供 get/set 方法。
2)@ToString:会给类自动生成易读阅读的 ToString 方法。
3)@EqualsAndHashCode:根据类所拥有的非静态字段自动重写 equals 方法和 hasCode 方法。
4)@Data:提供了更综合的生成代码功能(包括:@Getter、@Setter、@ToString、@EqualsAndHashCode)
5)@NoArgsConstructor:为实体类生成无参的构造器方法。
6)@AllArgsConstructor:为实体类生成除了 static 修饰的字段之外带有各参数的构造器方法。
代码演示:
没有使用 Lombok 的实体类:
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Objects;public class Emp {private int id;private String username;private String password;private String name;private int gender;private int job;private LocalDate entrydate;private int deptId;private LocalDateTime createTime;private LocalDateTime updateTime;public Emp() {}public Emp(int id, String username, String password, String name, int gender, int job, LocalDate entrydate, int deptId, LocalDateTime createTime, LocalDateTime updateTime) {this.id = id;this.username = username;this.password = password;this.name = name;this.gender = gender;this.job = job;this.entrydate = entrydate;this.deptId = deptId;this.createTime = createTime;this.updateTime = updateTime;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Emp emp = (Emp) o;return id == emp.id && gender == emp.gender && job == emp.job && deptId == emp.deptId && Objects.equals(username, emp.username) && Objects.equals(password, emp.password) && Objects.equals(name, emp.name) && Objects.equals(entrydate, emp.entrydate) && Objects.equals(createTime, emp.createTime) && Objects.equals(updateTime, emp.updateTime);}@Overridepublic int hashCode() {return Objects.hash(id, username, password, name, gender, job, entrydate, deptId, createTime, updateTime);}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getGender() {return gender;}public void setGender(int gender) {this.gender = gender;}public int getJob() {return job;}public void setJob(int job) {this.job = job;}public LocalDate getEntrydate() {return entrydate;}public void setEntrydate(LocalDate entrydate) {this.entrydate = entrydate;}public int getDeptId() {return deptId;}public void setDeptId(int deptId) {this.deptId = deptId;}public LocalDateTime getCreateTime() {return createTime;}public void setCreateTime(LocalDateTime createTime) {this.createTime = createTime;}public LocalDateTime getUpdateTime() {return updateTime;}public void setUpdateTime(LocalDateTime updateTime) {this.updateTime = updateTime;}@Overridepublic String toString() {return "Emp{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", name='" + name + '\'' +", gender=" + gender +", job=" + job +", entrydate=" + entrydate +", deptId=" + deptId +", createTime=" + createTime +", updateTime=" + updateTime +'}';} }看起来非常非常的臃肿,代码量还不少。
现在使用 Lombok 工具包进行代码演示:
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.time.LocalDate; import java.time.LocalDateTime;@Data @NoArgsConstructor @AllArgsConstructor public class Emp {private int id;private String username;private String password;private String name;private int gender;private int job;private LocalDate entrydate;private int deptId;private LocalDateTime createTime;private LocalDateTime updateTime;}看起来非常的整洁,代码量不多。
4.1 如何导入到项目中呢?
引入 Lombok 的相关依赖即可。
Lombok 的依赖:
<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
5.0 application 属性文件数据库连接的信息与 pom XML文件的依赖
属性文件:
spring.datasource.drive-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/db01?characterEncoding=utf-8&useSSL=true spring.datasource.username=root spring.datasource.password=123456#将日志打印在控制台上 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl#开启 mybatis 的驼峰命名自动映射开关 mybatis.configuration.map-underscore-to-camel-case=true
XML 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>code_24_5_20_2</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>code_24_5_20_2</name><url>http://maven.apache.org</url><!--1、spring-boot-starter-parent自动引入springboot中最基础的组件,所有springboot项目都要依赖它进行构建--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.4</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--2、引入springboot依赖,spring-boot-starter-web表示在项目中增加支持javaweb的功能,版本信息已经在parent中定义--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!--mybatis的起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--Druid依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency></dependencies><!--3、定义springboot的打包方式,spring-boot-maven-plugin可以在打包时自动将所有类和资源打包成一个独立可运行的jar包--><build><!--打包指定名称--><finalName>projectName</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

相关文章:
SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文件目录 1.0 Mybatis 概述 2.0 数据库连接池 2.1 数据库连接池的主要作用包括 2.2 如何切换数据库连接池? 3.0 配置环境 4.0 Lombok 工具包 4.1 如何导入到项目中呢…...
JAVA开发 基于最长公共子序列来计算两个字符串之间的重复率
计算两个字符串之间的重复率 最长公共子序列实现代码 最长公共子序列 基于最长公共子序列(Longest Common Subsequence, LCS)的重复率的中心逻辑是首先找到两个或多个序列中同时出现的、不一定连续但保持相对顺序的最长子序列,然后计算这个最…...
Android HAL到Framework
一、为什么需要Framwork? Framework实际上是⼀个应⽤程序的框架,提供了很多服务: 1、丰富⽽⼜可扩展的视图(Views), 可以⽤来构建应⽤程序,它包括列表(lists),⽹格&am…...
Python数据可视化(七)
绘制 3D 图形 到目前为止,我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面,我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…...
StringMVC
目录 一,MVC定义 二,SpringMVC的基本使用 2.1建立连接 - RequestMapping("/...") 编辑 2.2请求 1.传递单个参数 2.传递多个参数 3.传递对象 4.参数重命名 5.传递数组 6. 传递集合 7.传递JSON数据 8. 获取url中数据 9. 传递文…...
前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】
前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】 基本概念与作用viewBoxwidth和height 代码示例与实践基础示例动态调整示例 不同角度的使用思路保持比例缩放自动适应容器 实际问题与解决方案结语与讨论 在前…...
Java-Zookeeper
zookeeper是什么 一个分布式、开源的分布式应用程序协调服务,具有配置维护、域名服务、分布式同步、组服务等 zookeeper有哪些功能 功能简介集群管理监控节点状态、运行请求等主节点选举主节点挂掉之后会执行新主选举分布式锁zookeeper提供两种锁:独占…...
Godot游戏引擎有哪些优势
哈喽呀,大家好呀,淼淼又来和大家见面啦,众所周知在当今游戏开发领域,各种游戏引擎如雨后春笋般涌现,为开发者提供了丰富的选择。而在这些众多的选择中,Godot游戏引擎以其独特的特性和开放源代码的优势&…...
一张图看懂大模型性价比:能力、价格、并发量全面PK
最近,国内云厂商的大模型掀起一场降价风暴。火山引擎、阿里云、百度云等纷纷宣布降价,部分模型价格降幅据称高达99%,甚至还有些模型直接免费。 五花八门的降价话术,一眼望去遍地黄金。但事实真的如此吗?今天我们就拨开…...
设计井字棋游戏(一)
创建游戏登录注册窗口 用户名admin 密码admin(可自行改变) 主页面 1. 导包 import pickle:导入 pickle 模块,这是一个 Python 的内置模块,用于将 Python 对象序列化和反序列化。序列化是指将对象转换为字节流&am…...
华为手机卡顿(仅针对于部分人来说,我也不清楚是否真的有用)
关机! 之前一段时间手机变得特别卡顿,然后网上搜了一堆教程一点用没有,结果因为昨天下午在考试所以把手机关机了一个多小时,再打开之后手机就变得很流畅,原因不详,但效果显著,如有需要可尝试一…...
7、按钮无法点击
不能点击,打开f12,删除disabled...
开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)
本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。 文章管理页面用于显示、检索、新建、编辑、删除文章数据,以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面,以支撑新建和编辑文章数据。…...
第七节 ConfigurationClassParser 源码分析
tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…...
零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
目录 DAY42 1049.最后一块石头的重量II 解题思路&代码 494.目标和 解题思路&代码 474.一和零 解题思路&代码 DAY42 1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度:中等 有一堆石头,每块石头的重量都是正整…...
2024-5-24 石群电路-15
2024-5-24,星期五,22:15,天气:晴,心情:晴。今天最后一天上班,终于要放返校假啦,开心!!!!!!不过放假也不能耽误…...
功能测试:核心原理、挑战以及解决之道
在软件开发生命周期中,功能测试占据了至关重要的位置。它是确保软件应用按照既定的要求和规格运行的关键测试阶段。功能测试的目的在于验证软件的功能、行为和用户界面等是否达到了业务需求的标准。本文将深入探讨功能测试的概念,执行过程中可能遇到的挑…...
跨境电商赛道,云手机到底能不能化繁为简?
当下国内电商背景: 从零售额的数据来看:随着互联网的普及和消费者购物习惯的改变,国内电商市场规模持续扩大。据相关数据显示,网络消费亮点纷呈,一季度全国网上零售额达到了3.3万亿元,同比增长12.4%。这表…...
linux:信号深入理解
文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…...
Android系统的/etc/mkshrc文件
/etc/mkshrc 文件是用于配置 mksh(MirBSD Korn Shell)环境的启动脚本。mksh 是 Android 默认使用的 shell,在 shell 启动时会读取并执行这个文件中的配置。以下是关于 /etc/mkshrc 文件的详细信息及其用途。 /etc/mkshrc 文件的作用 环境配…...
快马AI生成高性能JMeter压测脚本的核心原理与实战
1. 这不是“又一个AI写脚本工具”,而是压测工程师终于能睡整觉的转折点快马AI、JMeter、一键生成高性能测试脚本——这三个词凑在一起,很多老压测人第一反应是皱眉:又来个包装成“智能”的模板填充器?我亲手调过37版登录接口的Thi…...
如何做好费用率数据分析?巧用费用率研判企业盈利现状
企业经营发展过程中,盈利水平高低直接决定长远发展实力,而费用率数据是看透企业真实盈利水平最直观、最核心的指标。很多经营者在日常管理中,往往只看重账面营收的增长,却忽略了费用率数据的深层分析与解读,最终出现营…...
(二) 1. Q-learning的遗憾界分析-高效的Q-learning算法
高效的Q-learning算法 1.1. 无模型算法 1.2. UCB算法 1.3. 文献回顾 无模型(Model-free)强化学习算法(如 Q-learning)无需显式地对环境进行建模,而是直接对价值函数或策略进行参数化和更新。与基于模型(Model-based)的方法相比,这类算法通常更简单、更灵活,因此在现代…...
JLink版本不兼容?手把手教你解决APM32F003F6P6在Keil V5.14下的烧写闪退与报错
JLink与Keil版本冲突全解析:APM32F003F6P6烧写难题终极指南 当你深夜加班调试APM32F003F6P6,Keil突然弹出"Error Flash Download failed"然后闪退,JLink软件在你选择芯片型号后直接消失——这种工具链版本冲突带来的"玄学&quo…...
别再折腾超级密码了!2024年电信光猫改桥接,打这个电话最快(附完整话术)
2024年电信光猫改桥接最省心方案:一通电话搞定全流程 去年帮邻居调试网络时,发现一个有趣的现象——十个尝试自己破解光猫超级密码的用户里,有九个会卡在第一步。不是密码失效就是界面改版,最后不得不求助运营商。这让我意识到&am…...
对比直接使用厂商API体验Taotoken在多模型选型上的便利
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商API体验Taotoken在多模型选型上的便利 在开发基于大语言模型的应用时,一个常见的需求是尝试不同的模型…...
Prompt 缓存,一次讲明白
每当一个 AI Agent 往前走一步,它其实都在交一笔税。它会重新读取所有内容。系统提示词。 工具定义。 项目上下文。 三轮前已经加载过的内容。每一轮都重新读一遍。这就是 context tax。对长时间运行的 Agent 工作流来说,它往往是整个 AI 基础设施里最贵…...
SVM实战调参指南:从标准化、核函数到支持向量解读
1. 这不是教科书里的SVM,而是我亲手调过37次参数后才敢写的入门实录Support Vector Machine(SVM)这个词,第一次见是在三年前的某次算法面试里。面试官问:“你说说SVM为什么叫‘支持向量’?”我张了张嘴&…...
吃透Agent Runtime九大核心设计,从基础跑通到工业级稳定落地
在当下人工智能飞速发展的时代,智能Agent已经成为大模型落地应用最主流的形态之一。从日常智能问答,自动化办公脚本,到复杂的项目工程自主开发,业务流程自主运维,各行各业都在尝试借助Agent解放人力成本,提…...
ChatGPT-Web-Midjourney-Proxy 终极备份策略:数据安全与灾难恢复完全指南
ChatGPT-Web-Midjourney-Proxy 终极备份策略:数据安全与灾难恢复完全指南 ChatGPT-Web-Midjourney-Proxy 是一款集成 ChatGPT、Midjourney 和 GPTs 功能的一站式 UI 工具,为用户提供便捷的 AI 交互体验。在日常使用中,数据安全与灾难恢复至关…...


