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.pswp.cn/diannao/14647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14647.shtml
英文地址,請注明出處:http://en.pswp.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…

比較含退格的字符串-力扣

做這道題時出現了許多問題 第一次做題思路是使用雙指針去解決&#xff0c;快慢指針遇到字母則前進&#xff0c;遇到 # 則慢指針退1&#xff0c;最開始并未考慮到 slowindex < 0 ,從而導致越界。第二個問題在于&#xff0c;在最后判斷兩個字符串是否相同時&#xff0c;最初使…

力扣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 &&…

Linux中“用戶管理”

我們linux中是靠用戶登陸的&#xff0c;每一個用戶都是唯一的&#xff0c;不可重復的&#xff0c;也是標識2計算機上的資源歸屬&#xff0c;那么它Linux中關聯什么作用我們詳細了解一下&#xff1a; 一、了解用戶 &#xff08;1&#xff09;保存用戶的位置 保存賬號和密碼的數…

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;企業管理咨詢行業正在持續擴…

網絡設備的優勢

網絡設備在構建和維護高效、安全、可靠的網絡環境中發揮著至關重要的作用。它們的功能多樣&#xff0c;涉及數據傳輸、連接、安全、管理等多個方面。接下來&#xff0c;我們將深入探討幾種常見網絡設備的優勢及其應用場景。 交換機&#xff08;Switch&#xff09; 交換機主要…

尋找峰值 ---- 二分查找

題目鏈接 題目: 分析: 因為題目中要找的是任意一個峰值即可, 所以和<山脈數組的峰值索引>這道題差不多因為峰值左右都小于峰值, 所以具有"二段性", 可以使用二分查找算法如果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…

XML Schema 字符串數據類型及約束詳解

字符串數據類型用于包含字符字符串的值。字符串數據類型可以包含字符、換行符、回車符和制表符。 以下是模式中字符串聲明的示例&#xff1a; <xs:element name"customer" type"xs:string"/>您文檔中的一個元素可能如下所示&#xff1a; <custo…

maven--解決Idea沒有拉取SNAPSHOT的問題

原文網址&#xff1a;maven--解決Idea沒有拉取SNAPSHOT的問題_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹Idea解決maven沒有拉取SNAPSHOT的問題。 問題描述 項目依賴了以-SNAPSHOT結尾的包&#xff0c;它更新了。Idea點了重新導入后沒有拉取到最新的包&#xff1a; 解決方案…

什么是分賬系統呢?云分帳系統的實現功能有哪些?

隨著電商平臺的發展&#xff0c;越來越多的商家開始通過在線平臺進行銷售&#xff0c;平臺業務場景的逐漸復雜&#xff0c;多渠道收款、多方分賬。在些場景下如何解決這些問題成為電商平臺急需解決的核心問題。 為了解決這些問題&#xff0c;電商平臺可以引入分賬系統即可輕松解…

從“圖形可視化”到“圖生代碼”,低代碼平臺的新挑戰

前言&#xff1a; 低代碼平臺最大的一個特點就是可視化&#xff0c;將代碼采用可視化的方式展示管理。一時間擁有圖形化界面的各類系統都掛上了低代碼的標簽。但更多的代碼從業者在使用中卻發現&#xff0c;在眾多的低代碼平臺中都是“別人家的代碼”其可視化主要是別人家的代…

如何解決vcruntime140.dll丟失問題,詳細介紹5種靠譜的解決方法

vcruntime140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;它為使用Visual C編譯器開發的應用程序提供必要的運行時環境。該DLL文件包含了大量應用程序運行時需要調用的庫函數&#xff0c;這些函數是實現C標準庫、異常處理機制、RTTI&#xff08;運行…

圖搜索算法教程(個人總結版)

圖搜索算法是一類用于遍歷或搜索圖結構的算法&#xff0c;廣泛應用于網絡分析、路徑規劃、人工智能等領域。常見的圖搜索算法包括深度優先搜索&#xff08;DFS&#xff09;、廣度優先搜索&#xff08;BFS&#xff09;、Dijkstra算法、A*算法等。本文將詳細介紹這些圖搜索算法的…