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>

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

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

相关文章

Transformer详解(3)-多头自注意力机制

attention multi-head attention pytorch代码实现 import math import torch from torch import nn import torch.nn.functional as Fclass MultiHeadAttention(nn.Module):def __init__(self, heads8, d_model128, droput0.1):super().__init__()self.d_model d_model # 12…

力扣HOT100 - 31. 下一个排列

解题思路&#xff1a; 数字是逐步增大的 步骤如下&#xff1a; class Solution {public void nextPermutation(int[] nums) {int i nums.length - 2;while (i > 0 && nums[i] > nums[i 1]) i--;if (i > 0) {int j nums.length - 1;while (j > 0 &&…

Tina-Linux -- 5. 网络通信(有线网络,无线网络,SSH链接)

有线网络 bash 指令 ifconfig eth0 192.168.2.222 netmask 255.255.255.0 up route add default gw 192.168.2.1开机自启 修改网络设置文件 /etc/init.d/S40network #!/bin/sh # # Start the network.... ## Debian ifupdown needs the /run/network lock directory mkdir …

视频码流分析工具

一、VQ Analyzer 在线使用说明&#xff1a; https://vicuesoft.com/vq-analyzer/userguide/ ref&#xff1a; Video Analyzer and Streaming Tester Software – VQ Analyzer HEVC 分析工具 - 懒人李冰 推荐一个开源且跨平台的免费码流分析软件YUView - 知乎

企业管理咨询在当前市场环境下的基本现状

随着全球经济的深度融合和数字化转型的加速推进&#xff0c;企业对于高效、专业的管理咨询服务的需求日益旺盛。那么&#xff0c;企业管理咨询在当前市场环境下究竟呈现出了怎样的基本现状呢&#xff1f; 首先&#xff0c;从市场规模来看&#xff0c;企业管理咨询行业正在持续扩…

寻找峰值 ---- 二分查找

题目链接 题目: 分析: 因为题目中要找的是任意一个峰值即可, 所以和<山脉数组的峰值索引>这道题差不多因为峰值左右都小于峰值, 所以具有"二段性", 可以使用二分查找算法如果nums[mid] < nums[mid 1], mid一定不是峰值, 所以left mid 1如果nums[mid] &…

自主创新助力科技强军,麒麟信安闪耀第九届军博会

由中国指挥与控制学会主办的中国指挥控制大会暨第九届北京军博会于5月17日-19日在北京国家会议中心盛大开展&#xff0c;政府、军队、武警、公安、交通、人防、航天、航空、兵器、船舶、电科集团等从事国防军工技术与产业领域的30000多名代表到场参加。 麒麟信安作为国产化方案…

重学java 42.多线程 等待唤醒机制案例分析

Strength is built under a heavy load,I am expecting to pick up all of my loads and travel on. —— 24.5.24 章节重点 1.会用wait和notify两个方法 2.会使用Lock锁对象 3.会利用Cal1able接口实现多线程 4.会使用线程池完成多线程 等待唤醒案例分析&#xff08;线程之间的…

C++ TCP发送Socket数据

DEVC需要加入ws2_32库 #include <iostream> #include <winsock2.h>#pragma comment(lib, "ws2_32.lib")void sendData(const char* ip, int port, const char* data) {WSADATA wsaData;SOCKET sockfd;struct sockaddr_in server_addr;// 初始化Winsock…

Qt moc系统的黑魔法?

Qt的元对象系统&#xff08;Meta-Object System&#xff09;是Qt框架的核心功能之一&#xff0c;为C语言增加了一些动态特性&#xff0c;借助元对象系统Qt可以实现以下功能 信号与槽机制&#xff08;Signals and Slots&#xff09;运行时类型信息&#xff08;Run-Time Type In…

【高频】从输入URL到页面展示到底发生了什么?

一、相关衍生面试问题&#xff1a; 浏览器输入美团网站&#xff0c;从回车到浏览器展示经历了哪些过程 &#xff1f; http输入网页之后的流程&#xff1f; 百度搜索页面&#xff0c;从点开搜索框&#xff0c;到显示搜索页面经历了什么&#xff1f; 二、探究各个过程&#x…

maven--解决Idea没有拉取SNAPSHOT的问题

原文网址&#xff1a;maven--解决Idea没有拉取SNAPSHOT的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Idea解决maven没有拉取SNAPSHOT的问题。 问题描述 项目依赖了以-SNAPSHOT结尾的包&#xff0c;它更新了。Idea点了重新导入后没有拉取到最新的包&#xff1a; 解决方案…

从“图形可视化”到“图生代码”,低代码平台的新挑战

前言&#xff1a; 低代码平台最大的一个特点就是可视化&#xff0c;将代码采用可视化的方式展示管理。一时间拥有图形化界面的各类系统都挂上了低代码的标签。但更多的代码从业者在使用中却发现&#xff0c;在众多的低代码平台中都是“别人家的代码”其可视化主要是别人家的代…

如何解决vcruntime140.dll丢失问题,详细介绍5种靠谱的解决方法

vcruntime140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;它为使用Visual C编译器开发的应用程序提供必要的运行时环境。该DLL文件包含了大量应用程序运行时需要调用的库函数&#xff0c;这些函数是实现C标准库、异常处理机制、RTTI&#xff08;运行…

go-zero 实战(5)

引入Prometheus 用 Prometheus 监控应用 1. 用 docker 启动 Prometheus 编辑配置位置&#xff0c;我将 prometheus.yaml 和 targets.json 文件放在了 /opt/prometheus/conf目录下 prometheus.yaml global:scrape_interval: 15s # 抓取间隔evaluation_interval: 15s # 评估…

【代码随想录 二叉树】二叉树前序、中序、后序遍历的迭代遍历

文章目录 1. 二叉树前序遍历&#xff08;迭代法&#xff09;2. 二叉树后序遍历&#xff08;迭代法&#xff09;3. 二叉树中序遍历&#xff08;迭代法&#xff09; 1. 二叉树前序遍历&#xff08;迭代法&#xff09; 题目连接 &#x1f34e;因为处理顺序和访问顺序是一致的。所…

类和对象的基本概念

类和对象的基本概念 C和C中struct区别类的封装封装访问权限总结struct和class的区别 将成员变量设置为private C和C中struct区别 C语言struct只有变量C语言struct 既有变量&#xff0c;也有函数 类的封装 封装 把变量&#xff08;属性&#xff09;和函数&#xff08;操作&a…

交换机部分综合实验

实验要求 1.内网IP地址使用172.16.0.0/16 2.sw1和sW2之间互为备份; 3.VRRP/mstp/vlan/eth-trunk均使用; 4.所有pc均通过DHcP获取Ip地址; 5.ISP只配置IP地址; 6.所有电脑可以正常访问IsP路由器环回 实验拓扑 实验思路 1.给交换机创建vlan&#xff0c;并将接口划入vlan 2.在SW1和…

Unity Render Streaming 云渲染 外网访问

初版&#xff1a; 日期&#xff1a;2024.5.20 前言&#xff1a;临时思路整理&#xff0c;后期会详细补充 环境&#xff1a; 1. 阿里云服务器 需要安装好nodejs 、npm 2. windows电脑&#xff0c;需安装好 nodejs 、npm 3.Unity 2021.3.15f1 4.Unity Render Streaming …

乡村振兴的农业供给侧结构性改革:优化农业产业结构,提升农产品质量,满足市场需求,实现美丽乡村产业振兴

一、引言 乡村振兴战略是我国当前及未来一段时间内的重大战略部署&#xff0c;旨在推动农业农村现代化&#xff0c;实现城乡融合发展。在乡村振兴战略中&#xff0c;农业供给侧结构性改革是核心任务之一。通过优化农业产业结构、提升农产品质量、满足市场需求&#xff0c;不仅…