如何在國外做網(wǎng)站競(jìng)價(jià)賬戶托管公司哪家好
🔥博客主頁:?【小扳_-CSDN博客】
?感謝大家點(diǎn)贊👍收藏?評(píng)論?
文件目錄
????????1.0 Mybatis 概述
? ? ? ? 2.0 數(shù)據(jù)庫連接池
????????2.1 數(shù)據(jù)庫連接池的主要作用包括
????????2.2 如何切換數(shù)據(jù)庫連接池?
? ? ? ? 3.0 配置環(huán)境
? ? ? ? 4.0 Lombok 工具包
? ? ? ? 4.1 如何導(dǎo)入到項(xiàng)目中呢?
? ? ? ? 5.0 application 屬性文件數(shù)據(jù)庫連接的信息與 pom XML文件的依賴
????????1.0 Mybatis 概述
????????MyBatis 是一個(gè)持久層框架,它簡(jiǎn)化了數(shù)據(jù)庫操作和 SQL 語句的處理。MyBatis 通過 XML 或注解的方式配置 SQL 語句,將 Java 對(duì)象和數(shù)據(jù)庫表進(jìn)行映射,提供了一種方便的方式來進(jìn)行數(shù)據(jù)庫操作。
????????MyBatis 是基于 JDBC 的持久層框架,它封裝了 JDBC 的操作,簡(jiǎn)化了數(shù)據(jù)庫訪問的過程。
Mybatis 與 JDBC 的關(guān)系:
? ? ? ? 1)SQL 語句處理:JDBC 需要在 Java 代碼中編寫 SQL 語句并進(jìn)行參數(shù)設(shè)置,而 MyBatis 可以通過 XML 或注解的方式配置 SQL 語句,將 SQL 語句與 Java 代碼分離,提高了代碼的可維護(hù)性和可讀性。
? ? ? ? 2)數(shù)據(jù)庫連接管理:JDBC 需要手動(dòng)管理數(shù)據(jù)庫連接的打開和關(guān)閉,而 MyBatis 可以通過配置文件自動(dòng)管理數(shù)據(jù)庫連接的打開和關(guān)閉,減少了開發(fā)人員的工作量。
? ? ? ? 3)數(shù)據(jù)映射:JDBC 需要手動(dòng)將查詢結(jié)果映射為 Java 對(duì)象,而 MyBatis 提供了強(qiáng)大的映射功能,可以自動(dòng)將查詢結(jié)果映射為 Java 對(duì)象,簡(jiǎn)化了數(shù)據(jù)的處理和轉(zhuǎn)換。
? ? ? ? 4)緩存機(jī)制:JDBC 沒有緩存機(jī)制,每次查詢都需要訪問數(shù)據(jù)庫,而 MyBatis 提供了緩存機(jī)制,可以緩存查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),提高性能。
? ? ? ? 2.0 數(shù)據(jù)庫連接池
????????數(shù)據(jù)庫連接池是一種管理數(shù)據(jù)庫連接的技術(shù),它可以在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接,并在需要時(shí)將這些連接分配給應(yīng)用程序使用。使用數(shù)據(jù)庫連接池可以減少數(shù)據(jù)庫連接的創(chuàng)建和銷毀次數(shù),提高數(shù)據(jù)庫操作的性能和效率。
? ? ? ? 常見的四個(gè)數(shù)據(jù)庫連接池:DBCP、C3P0、Hikari、Druid。
????????HikariCP:是一個(gè)高性能、輕量級(jí)的 JDBC 數(shù)據(jù)庫連接池,被認(rèn)為是目前性能最好的連接池之一。HikariCP 具有快速的啟動(dòng)時(shí)間、低資源消耗和優(yōu)秀的性能表現(xiàn),適合用于高并發(fā)、性能要求較高的項(xiàng)目。在 Springboot 項(xiàng)目中默認(rèn)自帶的連接池。
????????Druid:是阿里巴巴開源的一個(gè) JDBC 連接池和監(jiān)控組件,集成了連接池、SQL 解析、SQL 監(jiān)控等功能。Druid 具有強(qiáng)大的監(jiān)控和管理功能,支持防火墻、密碼加密、SQL 注入等安全特性,被廣泛應(yīng)用于企業(yè)級(jí)項(xiàng)目中。
? ? ? ? 2.1 數(shù)據(jù)庫連接池的主要作用包括
? ? ? ? 1)資源重用:數(shù)據(jù)庫連接池可以重用已經(jīng)創(chuàng)建的數(shù)據(jù)庫連接,減少了連接的創(chuàng)建和銷毀開銷,提高了系統(tǒng)的性能。
? ? ? ? 2)連接管理:數(shù)據(jù)庫連接池可以管理連接的分配和釋放,確保連接的有效性和可靠性。
? ? ? ? 3)連接池大小控制:數(shù)據(jù)庫連接池可以根據(jù)應(yīng)用程序的需求動(dòng)態(tài)調(diào)整連接池的大小,避免連接過多或過少的情況發(fā)生。
? ? ? ? 4)連接超時(shí)處理:數(shù)據(jù)庫連接池可以設(shè)置連接的超時(shí)時(shí)間,當(dāng)連接空閑時(shí)間超過設(shè)定的時(shí)間時(shí),連接將被釋放,避免連接過期或長時(shí)間占用的情況發(fā)生。
? ? ? ? 2.2 如何切換數(shù)據(jù)庫連接池?
? ? ? ? 1)先引入相關(guān)依賴。比如,切換成 Druid 數(shù)據(jù)庫連接池,需要先導(dǎo)入該數(shù)據(jù)庫連接池的依賴。
<!--Druid依賴--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency>
? ? ? ? 2)在Springboot 項(xiàng)目中 resources 包下的 applocation.properties 屬性文件中配置數(shù)據(jù)庫的連接信息。
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)運(yùn)行結(jié)果,只要程序需要連接數(shù)據(jù)庫,那么數(shù)據(jù)庫連接池就會(huì)分配給當(dāng)前程序。
?
? ? ? ? 3.0 配置環(huán)境
? ? ? ? 創(chuàng)建一個(gè)新的 Springboot 工程,選擇引入對(duì)應(yīng)的起步依賴(mybatis、mysql 驅(qū)動(dòng))和 application.properties 屬性文件中引入數(shù)據(jù)庫連接信息。
? ? ? ? 1)引入 mybatis 依賴
<!--mybatis的起步依賴--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency>
? ? ? ? 2)引入 mysql 驅(qū)動(dòng)包依賴
<!--mysql驅(qū)動(dòng)包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
? ? ? ? 3)application.properties 屬性文件中配置數(shù)據(jù)庫連接的信息
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
? ? ? ? 需要注意的是,這里的密碼和數(shù)據(jù)庫名都是自定義的,不是完全相同的,要依據(jù)你當(dāng)前要操作的數(shù)據(jù)庫名和你當(dāng)前的數(shù)據(jù)庫密碼。
? ? ? ? 4)額外的配置,如控制日志打印在控制臺(tái)上,配置?pplication.properties 屬性文件即可。
#將日志打印在控制臺(tái)上 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
?
? ? ? ? 4.0 Lombok 工具包
????????Lombok 是一個(gè)用于簡(jiǎn)化 Java 代碼開發(fā)的工具包,它通過添加注解來減少樣板代碼的編寫,提高代碼的簡(jiǎn)潔性和可讀性。使用 Lombok 可以減少一些常見的代碼模板,如 getter 和 setter 方法、構(gòu)造函數(shù)、equals 和 hashCode 方法等,從而簡(jiǎn)化 Java 開發(fā)過程。
提供的注解為:
? ? ? ? 1)@Getter/@Setter:為所有的屬性提供 get/set 方法。
? ? ? ? 2)@ToString:會(huì)給類自動(dòng)生成易讀閱讀的 ToString 方法。
? ? ? ? 3)@EqualsAndHashCode:根據(jù)類所擁有的非靜態(tài)字段自動(dòng)重寫 equals 方法和 hasCode 方法。
? ? ? ? 4)@Data:提供了更綜合的生成代碼功能(包括:@Getter、@Setter、@ToString、@EqualsAndHashCode)
? ? ? ? 5)@NoArgsConstructor:為實(shí)體類生成無參的構(gòu)造器方法。
? ? ? ? 6)@AllArgsConstructor:為實(shí)體類生成除了 static 修飾的字段之外帶有各參數(shù)的構(gòu)造器方法。
代碼演示:
沒有使用 Lombok 的實(shí)體類:
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 +'}';} }
? ? ? ? 看起來非常非常的臃腫,代碼量還不少。
現(xiàn)在使用 Lombok 工具包進(jìn)行代碼演示:
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 如何導(dǎo)入到項(xiàng)目中呢?
? ? ? ? 引入 Lombok 的相關(guān)依賴即可。
Lombok 的依賴:
<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
? ? ? ? 5.0 application 屬性文件數(shù)據(jù)庫連接的信息與 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#將日志打印在控制臺(tái)上 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl#開啟 mybatis 的駝峰命名自動(dòng)映射開關(guān) 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自動(dòng)引入springboot中最基礎(chǔ)的組件,所有springboot項(xiàng)目都要依賴它進(jìn)行構(gòu)建--><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表示在項(xiàng)目中增加支持javaweb的功能,版本信息已經(jīng)在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驅(qū)動(dòng)包--><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可以在打包時(shí)自動(dòng)將所有類和資源打包成一個(gè)獨(dú)立可運(yùn)行的jar包--><build><!--打包指定名稱--><finalName>projectName</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>