MyBatis 學習(三)之 MyBatis 全局配置文件

目錄

1 MyBatis 全局配置文件

2 properties 元素

3 setting 設置

4?typeAlianses 別名處理器

5?typeHandler 類型處理器

6 objectFacotry 對象工廠(了解)

7 plugins 插件(了解)

8 environments 運行環境

9?databaseIdProvider 數據庫廠商(了解)

10 mapper 加載 SQL 映射文件

11 參考文檔


1 MyBatis 全局配置文件

MyBatais 全局配置文件所有配置項如下所示,配置項只能按照如下順序進行設置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!--配置--><properties/> <!--屬性--><settings/> <!--全局配置參數--><typeAliases/> <!--類型別名--><typeHandlers/> <!--類型處理器--><objectFactory/><!--對象工廠--><plugins/><!--創建--><environments default=""><!--環境配置--><environment id=""><!--環境變量--><transactionManager type=""/><!--事務管理器--><dataSource type=""/><!--數據源--></environment></environments><databaseIdProvider type=""/><!--數據庫廠商標識--><mappers/><!--映射器-->
</configuration>

2 properties 元素

mysql.properties 配置文件

url=jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
name=root
password=123456
driver=com.mysql.cj.jdbc.Driver

通過 properties 元素導入 mysql.properties 配置文件,會在當前配置文件所在目錄下查找 mysql.properties 配置文件

<properties resource="mysql.properties" />

此外,也可以用 properties 元素的 url 屬性來指定屬性文件的 URL

<!-- 指定一個網絡上的屬性文件 -->
<properties url="http://example.com/jdbc.properties" /><!-- 指定一個位于本地文件系統中的屬性文件 -->
<properties url="file:///path/to/config.properties" />

如果屬性在不只一個地方進行了配置,那么 MyBatis 將按照如下順序來加載:

  • 在 properties 元素體內指定的屬性首先被讀取
<properties><!--property子元素定義--><property name="database.driver" value="com.mysql.cj.jdbc.Driver"/><property name="database.url" value="jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/><property name="database.username" value="root"/><property name="database.password" value="123456"/>
</properties>
  • 然后根據 properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據 url 屬性指定的路徑讀取屬性文件,并覆蓋已讀取的同名屬性
  • 最后讀取作為方法參數傳遞的屬性,并覆蓋已讀取的同名屬性
// 加載數據庫配置文件
is = Resources.getResourceAsStream("msyql.properties");
Properties properties = new Properties();
properties.load(is);// 獲取加密信息
String username= properties.getProperty("database.username");
String password= properties.getProperty("database.password");// 解密用戶名和密碼,并重置屬性
properties.setProperty("database.username", CyperTool.decodeByBase64(username));
properties.setProperty("database.password", CyperTool.decodeByBase64(password));

3 setting 設置

????????setting 設置是 MyBatis 中極為重要的調整設置,它們會改變 MyBatis 的運行時行為。但是大部分情況下使用默認值便可以運行,所以在大部分情況下不需要大量配置,只需要修改一些常用的規則即可。常用規則有自動映射、駝峰命名映射、級聯規則、是否啟動緩存、執行器類型等。

<settings><!--緩存配置的全局開關:如果這里設置成false,那么即便在映射器中配置開啟也無濟于事 --><setting name="cacheEnabled" value="true" /><!--延時加載的全局開關 --><setting name="lazyLoadingEnabled" value="false" />
</settings>
屬性名含義簡介有效值默認值
cacheEnabled是否使用緩存是整個工程中所有映射器配置緩存的開關,即是一個全局緩存開關true | falsetrue
lazyLoadingEnabled是否開啟延遲加載控制全局是否使用延遲加載。當有特殊關聯關系需要單獨配置時,可以使用 fetchType 屬性來覆蓋此配置true | falsefalse
aggressiveLazyLoading是否按需加載屬性開啟時,不論調用什么方法加載某個對象,都會加載該對象的所有屬性,關閉后只會按需加載true | falsefalse
multipleResultSetsEnabled是否允許單一語句返回多結果集即 Mapper 配置中一個單一的 sql 配置是否能夠返回多個結果集true | falsetrue
useColumnLabel使用列標簽代替列名設置是否使用列標簽代替列名true | falsetrue
useGenerateKeys是否支持 JDBC 自動生成主鍵設置之后,將會強制使用自動生成主鍵的策略true | falsefalse
autoMappingBehavior指定 MyBatis 自動映射字段或屬性的方式有三種方式,NONE 時將取消自動映射;PARTIAL 時只會自動映射沒有定義結果集的結果映射;FULL 時會映射任意復雜的結果集NONE, PARTIAL, FULLPARTIAL
autoMappingUnknownColumnBehavior設置當自動映射時發現未知列的動作有三種動作,NONE 時不做任何操作;WARNING 時會輸出提醒日志;FALLING 時會拋出 SqlSessionException 異常表示映射失敗NONE, WARNING, FALLINGNONE
defaultExecutorType設置默認的執行器有三種執行器,SIMPLE 為普通執行器;REUSE 執行器會重用處理語句;BATCH 執行器將重用語句并執行批量更新SIMPLE, REUSE, BATCHSIMPLE
defaultStatementTimeout設置超時時間該超時時間即數據驅動連接數據庫時,等待數據庫回應的最大秒數任意正整數
defaultFetchSize設置驅動的結果集為了防止從數據庫查詢出來的結果過多,而導致內存溢出,可以通過設置 fetchSize 參數來控制結果集的數量任意正整數
safeRowBoundsEnabled允許在嵌套語句中使用分頁,RowBound,即行內嵌套語句如果允許在 sql 的行內嵌套語句中使用分頁,就設置該值為 falsetrue | falsefalse
safeResultHandlerEnabled允許在嵌套語句中使用分頁,ResultHandler,即結果及處理如果允許對 sql 的結果集使用分頁,就設置該值為 falsetrue | falsetrue
mapUnderscoreToCamelCase是否開啟駝峰命名規則映射表名數據庫中的字段名稱與工程中 Java 實體內的映射是否采用駝峰命名規則校驗true | falsefalse
localCacheScopeMyBatis 利用本地緩存機制防止循環引用和加速重復嵌套查詢默認值為 SESSION,這種情況下會緩存一個會話中執行的所有查詢。若設置為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共享數據SESSION | STATEMENTSESSION
jdbcTypeForNullJDBC 類型的默認設置當沒有參數提供特定的 JDBC 類型時,為空值指定 JDBC 類型。某些驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER常用 NUL、VARCHAR、OTHEROTHER
lazyLoadTriggeerMethods指定哪個對象的方法觸發一次延遲加載配置需要觸發延遲加載的方法的名字,該方法就會觸發一次延遲加載一個逗號分隔的方法名稱列表

equals, clone,

hashCode, toString

defaultScriptingLanguage動態 sql 默認語言指定動態 sql 生成的默認語言一個類型的的別名或者一個類的全類名

org.apache.ibatis.

scripting.xmltargs.

XMLLanguageDriver

callSettersOnNulls是否在空值情況下調用 Set 方法指定當結果集中的值為 null 時是否調用映射對像的 setter (map 對象為 put)方法,這對于有 Map.keySet() 依賴或 null 值初始化是有用的。注意基本類型不能設置為 nulltrue | falsefalse
returnInstanceForEmptyRow返回空實體集對象當返回行的所有列都是空時,MyBatis 默認返回 null。當開啟這個設置時,MyBatis 會返回一個空實例。此外,從 MyBatis 3.4.2 開始,它也適用于嵌套的結果集true | falsefalse
logImpl日志實現指定 MyBatis 所用日志的具體實現,為指定時將自動查找SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
proxyFactory代理工廠指定 MyBatis 創建具有延遲加載能力的對象所用到的代理工具CGLIB | JAVASSISTJAVASSIST
vfsImplvfs 實現指定 vfs 的實現自定義 VFS 實現類的全類名,以逗號分割
useActualParamName使用方法簽名允許使用方法簽名中的名稱作為語句參數名稱。要使用該特性,工程必須采用 Java8 編譯,并且加上 -parameters 選項(從 MyBatis 3.4.1 版本開始)true | false

false

configurationFactory配置工廠指定提供配置實例的類。返回的配置實例用于加載反序列化的懶加載參數。這個類必須有一個簽名的靜態配置 getconfiguration() 方法(從 MyBatis 3.2.3 版本開始)一個類型別名或者一個類的全類名

4?typeAlianses 別名處理器

typeAliases 可以給類設置別名,這樣當我們需要使用類時,可以不用每次都寫那么復雜的全類名 (com.pojo.User)

<!--設置別名-->
<typeAliases><!--對類單獨進行別名設置  --><typeAlias alias="user" type="com.pojo.User"></typeAlias><typeAlias alias="student" type="com.pojo.Student"></typeAlias>
</typeAliases>

批量給類設置別名,為包中的每一個類設置別名,設置規則是:獲取類名稱,將其第一個字母變為小寫

<!--設置別名-->
<typeAliases><!-- 對包進行掃描,可以批量進行別名設置,設置規則是:獲取類名稱,將其第一個字母變為小寫 --><package name="com.pojo1"/><package name="com.pojo2"/><package name="com.pojo3"/>
</typeAliases>

通過 @Alias 注解設置別名

@Alias("user")
public class User {省略......
}

需要注意的是,MyBatis 已經為某些類定義了別名,此外,別名對大小寫不敏感。對此,為某些類定義別名時,不能占用已有別名

5?typeHandler 類型處理器

????????在 typeHandler 類型處理器中,包含?javaType 和 jdbcType 兩種類型,其中 javaType 用來定義 Java 類型,jdbcType 用來定義數據庫類型,而 typeHandler 的作用就是對 javaType 和 jdbcType 兩種類型進行轉換,如下圖所示:

下圖是 MyBatis 已經定義好的部分類型處理器,當然,我們也可以自定義類型處理器,此處不做介紹

6 objectFacotry 對象工廠(了解)

????????objectFacotry 表示為對象工廠。對象工廠我們只需了解即可,因為到時候與 Spring 整合后,都會由 Spring 來管理。我們知道,在 JDBC 中查詢的結果會保存在一個結果集中,而 MyBatis 也是這樣,它會使用其定義的對象工廠 DefaultObjectFactory 來將查詢的結果保存在結果集中。

7 plugins 插件(了解)

???????plugins?插件是 MyBatis 提供的一個非常強大的機制。通過插件,我們可以在不修改 MyBatis?核心代碼的情況下,對其核心行為進行修改。利用動態代理機制,插件能夠介入到四大對象(Mapper Interface、Mapped Statement、Parameter Map 和 ResultSet Handler)的任何一個方法的執行過程中。

8 environments 運行環境

????????environments 標簽用于指定當前運行環境,在 MyBatis 中可以配置多種環境,比如開發、測試和生產環境。每種環境使用一個 environment 標簽進行配置并指定唯一標識符,可以通過 environments 標簽中的 default 屬性指定一個環境的標識符來快速的切換環境,environment? 標簽里面分為兩個可配置的標簽:事務管理 (transactionManager)、數據源 (DataSource)。而在我們的日常開發中,這些都會交給 Spring 來管理,不用在全局配置中編寫。

transactionManager

????????transactionManager 配置事務管理器類型,type = JDBC |?MANAGED | 自定義(type=全類名或別名)

  • JDBC 使用 JdbcTransactionFactory 工廠生成的 JdbcTransaction 對象實現,以 JDBC 的方式進行數據庫的提交、回滾等操作,它依賴于從數據源得到的連接來管理事務范圍
  • MANAGED 使用 ManagedTransactionFactory 工廠生成的 ManagedTransaction 對象實現,它的提交和回滾不需要任何操作,而是把事務交給容器進行處理,默認情況下會關閉連接,如果不希望默認關閉,只要將其中的 closeConnection 屬性設置為 false 即可
  • 自定義的事務管理類型需要實現 TransactionFactory 接口

DataSource

????????在 MyBatis 中,數據庫是通過 PooledDataSourceFactory、UnpooledDataSourceFactory 和 JndiDataSourceFactory 三個工廠類來提供,前兩者分別產生 PooledDataSource 和 UnpooledDataSource 類對象,第三個則會根據 JNDI 的信息獲得外部容器實現的數據庫連接對象,總之,它們最后都會生成一個實現了 DataSource 接口的數據庫連接對象。

type =?UNPOOLED | POOLED | JNDI | 自定義

UNPOOLED

????????UNPOOLED 采用非數據庫池的管理方式,每次請求都會新建一個連接,所以性能不是很高,使用這種數據源的時候,UNPOOLED 類型的數據源可以配置以下屬性:

  • driver:數據庫驅動名
  • url:數據庫連接 URL
  • username:用戶名
  • password:密碼
  • defaultTransactionIsolationLevel:默認的事務隔離級別,如果要傳遞屬性給驅動,則屬性的前綴為 driver

POOLED

????????POOLED 采用連接池的概念將數據庫鏈接對象 Connection 組織起來,可以在初始化時創建多個連接,使用時直接從連接池獲取,避免了重復創建連接所需的初始化和認證時間,從而提升了效率,所以這種方式比較適合對性能要求高的應用中。除了 UNPOOLED 中的配置屬性之外,還有以下幾個修改連接池的配置:

  • poolMaximumActiveConnections:用于設置連接池中允許的最大活躍連接數。超過這個數量的連接將會被阻塞,直到有連接被釋放為止,默認值為 10

  • poolMaxmumIdleConnections:用于設置連接池中允許的最大空閑連接數。當連接池中的連接數量超過這個值時,多余的連接將會被釋放,默認值為 5

  • poolMaxmumCheckoutTime:用于設置連接在連接池中的最大使用時間。超過這個時間的連接將會被強制回收,默認值為 20000 毫秒(即 20 秒)

  • poolTimeToWait:用于設置從連接池中獲取連接時的最大等待時間。如果在這個時間內無法獲取到連接,將會拋出超時異常,默認值為 20000 毫秒(即 20 秒)

JNDI

????????數據源 JNDI 的實現是為了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個 JNDI 上下文的引用。這種數據源只需配置兩個屬性:

  • initial_context:用來在 InitialContext 中尋找上下文。可選,如果忽略,data_source 屬性將會直接從 InitialContext 中尋找
  • data_source:引用數據源實例位置上下文的路徑。當提供 initial_context 配置時,data_source 會在其返回的上下文進行查找,否則直接從 InitialContext 中查找

9?databaseIdProvider 數據庫廠商(了解)

????????databaseIdProvider 元素主要是為了支持不同廠商的數據庫,這個元素不常用。

<!--數據庫廠商標示 -->
<databaseIdProvider type="DB_VENDOR"><property name="Oracle" value="oracle"/><property name="MySQL" value="mysql"/><property name="DB2" value="d2"/>
</databaseIdProvider>

以下是?databaseIdProvider 中的屬性介紹:

  • Type:DB_VENDOR,使用 MyBatis 提供的 VendorDatabaseIdProvider 解析數據庫廠商標識。也可以實現 DatabaseIdProvider 接口來自定義
  • Property-name:數據庫廠商標識
  • Property-value:為數據庫廠商標識起一個別名,方便 SQL 語句使用 databaseId 屬性引用

設置了以上配置,我們就可以在自己的 sql 語句中使用屬性 databaseId 來標示數據庫類型

<!-- 查詢所有用戶 -->
<select id="selectAllUser" resultType="com.entity.User" databaseId="oracle">select * from t_user
</select>

10 mapper 加載 SQL 映射文件

mapper 用來加載配置的 SQL 映射文件,它有以下四種加載方式:

  • 用文件路徑引入
  • 使用 URL 方式引入
  • 用類注冊引入
  • 用包名引入(推薦)
<mappers><!-- 用文件路徑引入,這種方式是相對路徑,相對于項目目錄下 --><mapper resource="com/mapper/UserMapper.xml" /><!-- 使用 URL 方式引入,這種方式是絕對路徑,就是從我們的磁盤讀取映射文件,一般不會使用這種方式 --><mapper url="D:/xxx/com/mapper/UserMapper.xml" /><!-- 用類注冊引入,若使用這種方式,Mapper接口的名稱必須與映射文件的名稱相同,并且要在同一個包名下,否則會找不到。如:UserMapper.java(接口)—UserMapper.xml(映射文件) --><mapper class="com.mapper.UserMapper" /><!-- 用包名引入(推薦),這種方式的要求同樣是Mapper接口和Mapper的映射文件的名稱要相同,并且要放在相同的包名下,否則會導致找不到 --><package name="com.mapper"/>
</mappers>

11 參考文檔

尚硅谷文檔

MyBatis 配置 setting 詳解

Mybatis3詳解(三)----Mybatis全局配置文件詳解 - 唐浩榮 - 博客園 (cnblogs.com)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712490.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712490.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

今日arXiv最熱大模型論文:點擊即可播放!港中文發布大模型寫歌神器!

一首歌&#xff0c;包含作詞作曲兩個部分。擅長作詞or作曲就已經很牛了。比如方文山是周杰倫的御用作詞人&#xff0c;而周杰倫寫過很多耳熟能詳的曲子。而兼具作詞作曲才華的全能創作人卻是難得一見。 最近港中文發布了一款歌曲創作大模型SongComposer&#xff0c;作詞作曲都…

自測-1 打印沙漏

文章預覽&#xff1a; 題目算法代碼 題目 算法 以前做過這個&#xff0c;那次是c語言寫的&#xff0c;一點一點處理一層一層完成&#xff0c;這次我換了一種語言用了另一種思想使用遞歸去寫&#xff0c;還是我們要先求出應該有多少層這個很容易&#xff0c;中間輸出部分我們算…

常見查找算法Java實現

順序&#xff08;線性&#xff09;查找二分查找/折半查找插值查找斐波那契查找 線性查找 判斷數列是否包含要求&#xff0c;如果找到了&#xff0c;就提示找到了&#xff0c;并給出下標值 // 線性查找 public static ArrayList<Integer> seqSearch(int[] arr, int value…

解決 npm install 報錯的問題

在使用 npm 安裝依賴包時&#xff0c;有時候會遇到各種報錯問題&#xff0c;以下是一些常見的報錯及解決方法&#xff1a; 1. ENOENT: no such file or directory 如果出現類似 ENOENT: no such file or directory 的報錯&#xff0c;可能是因為某些文件或目錄缺失或路徑錯誤…

動態規劃課堂3-----簡單多狀態問題(買賣股票最佳時機)

目錄 引入&#xff1a; 例題1&#xff1a;按摩師&#xff08;打家劫舍I&#xff09; 例題2&#xff1a;打家劫舍II 例題3&#xff1a;刪除并獲得點數 例題4&#xff1a;粉刷房子 例題5&#xff1a;買賣股票的最佳時機含冷凍 結語&#xff1a; 引入&#xff1a; 相信看到…

深度學習 精選筆記(8)梯度消失和梯度爆炸

學習參考&#xff1a; 動手學深度學習2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、請聯系侵刪。 ②已寫完的筆記文章會不定時一直修訂修改(刪、改、增)&#xff0c;以達到集多方教程的精華于一文的目的。 ③非常推薦上面&#xff08;學習參考&#x…

帶你快速初步了解Python列表

1.列表 列表主要是用來存儲多個數據&#xff0c;是有序的集合 2.創建列表 """ 語法&#xff1a;變量名 [數據1,數據2,數據3......] 注意&#xff1a;列表中的數據類型可以是各種不同的數據類型 """ 創建空列表 list1 [] print(list1) …

Gitlab: 私有化部署

目錄 1. 說明 2. 資源要求 3. 安裝 4. 配置實踐 4.1 服務器 4.2 人員與項目 4.2 部署準備 4.2.1 訪問變量及用戶賬號設置 4.2.2 Runner設置 4.2.3 要點 5. 應用項目 CI/CD 6. 參考 1. 說明 gitlab是一個強大且免費的代碼管理/部署工具&#xff0c;能統一集成代碼倉…

AngularJS入門

1. AngularJS簡介 AngularJS是一個JavaScript框架,用js編寫的庫 <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script> <!-- 放在<body> 元素的底部。提高網頁加載速度 -->1.1. AngularJS 擴展了 HTML …

Freesia項目目錄結構

目錄結構 前端目錄&#xff1a; &#xff08;目錄結構來自layui-vue-admin&#xff09; src文件下 api&#xff08;前端請求后端服務的路由&#xff09;assert&#xff08;一些內置或必要的資源文件&#xff09;layouts&#xff08;全局框架樣式組件&#xff09;router&…

Unity(第十九部)射線

在Unity中&#xff0c;射線檢測通常用于碰撞檢測&#xff0c;比如&#xff1a;在游戲中&#xff0c;開槍射擊時&#xff0c;需要判斷擊中的物體、子彈擊中的位置&#xff1b;用鼠標來控制物體的移動&#xff1b;用鼠標拾取某個物體。 射線&#xff0c;顧名思義&#xff0c;在數…

【轉載】深度學習筆記——詳解損失函數

原文鏈接: https://blog.csdn.net/weixin_53765658/article/details/136360033 CSDN賬號: Purepisces github賬號: purepisces 希望大家可以Star Machine Learning Blog https://github.com/purepisces/Wenqing-Machine_Learning_Blog 損失函數 根據您使用的神經網絡類型和數…

第四十七回 一丈青單捉王矮虎 宋公明二打祝家莊-強大而靈活的python裝飾器

四面全是埋伏&#xff0c;宋江和眾人一直繞圈跑不出去。正在慌亂之時&#xff0c;石秀及時趕到&#xff0c;教大家碰到白楊樹就轉彎走。走了一段時間&#xff0c;發現圍的人越來越多&#xff0c;原來祝家莊以燈籠指揮號令。花榮一箭射下來紅燈龍&#xff0c;伏兵自己就亂起來了…

Northwestern University-844計算機科學與技術/軟件工程-復試注意事項【考研復習】

本文提到的西北大學是位于密歇根湖泊畔的西北大學。西北大學&#xff08;英語&#xff1a;Northwestern University&#xff0c;簡稱&#xff1a;NU&#xff09;是美國的一所著名私立研究型大學。它由九人于1851年創立&#xff0c;目標是建立一所為西北領地地區的人服務的大學。…

【力扣白嫖日記】550.游戲玩法分析IV

前言 練習sql語句&#xff0c;所有題目來自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免費數據庫練習題。 今日題目&#xff1a; 550.游戲玩法分析IV 表&#xff1a;Activity 列名類型player_idintdevice_idintevent_datedategames_played…

從 iOS 設備恢復數據的 20 個iOS 數據恢復工具

作為 iPhone、iPad 或 iPod 用戶&#xff0c;您可能普遍擔心自己可能會丟失存儲在珍貴 iOS 設備中的所有寶貴數據。數據丟失的原因多種多樣&#xff0c;這里列出了一些常見原因&#xff1a; 1. iOS 軟件更新 2. 恢復出廠設置 3. 越獄 4. 誤操作刪除數據 5. iOS 設備崩潰 …

C++筆記(五)--- 虛函數(virtual)

目錄 虛函數介紹 虛函數、覆蓋和重載區別 虛函數介紹 C的虛函數是多態性的表現 1.構造函數不能為虛函數2.子類繼承時虛函數仍為虛函數3.虛函數類外實現時&#xff0c;不需要加virtual4.有虛函數的類&#xff0c;析構函數一定要寫成虛函數&#xff08;否則可能會造成內存泄漏&…

【代碼隨想錄python筆記整理】第十六課 · 出現頻率最高的字母

前言:本筆記僅僅只是對內容的整理和自行消化,并不是完整內容,如有侵權,聯系立刪。 一、哈希表初步 在之前的學習中,我們使用數組、字符串、鏈表等等,假如需要找到某個節點,則都要從頭開始,逐一比較,直到找到為止。為了能夠直接通過要查找的記錄找到其存儲位置,我們選…

設備像素、css像素、設備獨立像素、dpr、ppi 之間的區別

設備像素、CSS 像素、設備獨立像素 (DIP)、設備像素比 (DPR) 和每英寸像素密度 (PPI) 是與屏幕分辨率和顯示質量相關的概念。它們之間的區別如下&#xff1a; 設備像素&#xff1a;設備像素是物理屏幕上的最小可見單元&#xff0c;用于實際渲染圖像或文本。它表示硬件像素點的數…

、JMETER與它的組件們

os進程取樣器 這個取樣器可以讓jmeter直接調用python寫的測試數據 這樣就可以調用python寫的測試數據給到jmeter進行調用 注意&#xff1a;1建議python返回轉json格式dumps一下&#xff1b;2py文件中需要把結果打印出來&#xff0c;可以不用函數直接編寫 傳到jmeter之后可以用…