MyBatis配置文件中最常用的設(shè)置
MyBatis配置優(yōu)化
mybatis的配置中引用外部的propertis配置文件
1. 創(chuàng)建外部配置文件
比如 db.properties:
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mydb?useSSL=false jdbc.username=root jdbc.password=123456
2. 在mybatis-config.xml中引入:
<?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 文件 -->
<properties resource="db.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>? resource="db.properties" 表示從 classpath 根路徑加載(如 src/main/resources/db.properties)
?? 注意事項(xiàng)
- 不要把密碼明文寫在代碼里
生產(chǎn)環(huán)境應(yīng)使用配置中心(如 Apollo、Nacos)或 K8s Secret,而不是本地.properties。
MyBatis 自動(dòng)集成,無(wú)需手動(dòng)配mybatis-config.xml。
?? 記?。号渲猛庵?= 環(huán)境解耦 = 上線不改代碼 = DevOps 友好
xml文件標(biāo)簽的順序
在 MyBatis 的 mybatis-config.xml(主配置文件)中,標(biāo)簽是有嚴(yán)格順序要求的;而在 Mapper XML(如 UserMapper.xml)中,除了 <resultMap> 等定義類標(biāo)簽建議放前面外,SQL 標(biāo)簽(<select>、<insert> 等)本身沒有順序限制。
[!NOTE] 補(bǔ)充
很多主流框架的 XML 都有順序要求,因?yàn)樗鼈兌蓟?DTD 或 XSD 定義了嚴(yán)格的結(jié)構(gòu)。如 Spring XML 配置(applicationContext.xml)—— 有順序!
MyBatis 別名
兩種用法:
- 單個(gè)注冊(cè)(適合少量類)
<typeAlias type="com.example.User" alias="User"/>
```
→ Mapper 中可用 `resultType="User"`
2. **包掃描(推薦)**
```xml
<package name="com.example.model"/>
```
→ 自動(dòng)注冊(cè)別名(默認(rèn)類名首字母小寫,如 `user`);加 `@Alias("User")` 可自定義。
? 作用:省去全限定類名,簡(jiǎn)化 Mapper XML。
### **最常用**的 Java 類型的**默認(rèn)別名(type alias)**:
|別名(小寫)|對(duì)應(yīng) Java 類型|
|---|---|
|`string`|`java.lang.String`|
|`int` / `_int`|`int`(基本類型)|
|`integer` / `_integer`|`java.lang.Integer`|
|`long` / `_long`|`long`|
|`double` / `_double`|`double`|
|`boolean` / `_boolean`|`boolean`|
|`map`|`java.util.HashMap`|
|`list`|`java.util.ArrayList`|
|`date`|`java.util.Date`|
|`object`|`java.lang.Object`|
> ? **帶下劃線(如 `_int`)表示基本類型,不帶下劃線(如 `int`)實(shí)際映射到包裝類(`Integer`)** —— 這是 MyBatis 的約定。
### 示例:
```xml
<select id="getName" resultType="string">
SELECT name FROM user WHERE id = #{id}
</select>
<select id="getIds" resultType="_int">
SELECT id FROM user
</select>?? 記?。洪_發(fā)中優(yōu)先用包裝類別名(如 integer),避免基本類型 null 問題。這些別名全局可用,不用額外配置。
配置文件中最常用和最重要的設(shè)置
以下是必須掌握的 6 個(gè)核心配置(按優(yōu)先級(jí)排序):
? 1.mapUnderscoreToCamelCase(強(qiáng)烈推薦開啟)
<setting name="mapUnderscoreToCamelCase" value="true"/>
- 作用:自動(dòng)將數(shù)據(jù)庫(kù)下劃線字段(如
user_name)映射到 Java 駝峰屬性(userName)。 - 不設(shè)的后果:需手動(dòng)寫
<resultMap>,代碼爆炸。
? 2.logImpl(開發(fā)必備)
<setting name="logImpl" value="SLF4J"/>
- 作用:指定日志框架(SLF4J、LOG4J 等),方便查看 SQL 執(zhí)行。
- 不設(shè)的后果:看不到執(zhí)行的 SQL,調(diào)試?yán)щy。
? 3.cacheEnabled(默認(rèn) true,通常不動(dòng))
<setting name="cacheEnabled" value="true"/>
- 作用:開啟二級(jí)緩存(Mapper 級(jí)別)。
- 注意:生產(chǎn)環(huán)境慎用,容易因緩存不一致引發(fā) Bug;多數(shù)團(tuán)隊(duì)用 Redis 替代。
? 4.lazyLoadingEnabled+aggressiveLazyLoading
<setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/>
- 作用:開啟懶加載(關(guān)聯(lián)對(duì)象按需查詢)。
aggressiveLazyLoading=false:只在訪問具體屬性時(shí)才加載(推薦)。
? 5.useGeneratedKeys(常在 XML 中局部設(shè),全局也可)
<setting name="useGeneratedKeys" value="true"/>
- 作用:插入后自動(dòng)回填數(shù)據(jù)庫(kù)自增主鍵(配合
keyProperty)。 - 更常見做法:在
<insert>標(biāo)簽里單獨(dú)設(shè)置(更精準(zhǔn))。
? 6.defaultExecutorType(批量操作時(shí)注意)
<setting name="defaultExecutorType" value="REUSE"/> <!-- 或 BATCH -->
- 默認(rèn)是
SIMPLE BATCH:用于大批量插入/更新(配合SqlSession手動(dòng)提交)。
?? 避坑建議:
- 不要亂開二級(jí)緩存(
cacheEnabled雖默認(rèn)開,但實(shí)際常禁用)。 - 務(wù)必開
mapUnderscoreToCamelCase—— 這是 MyBatis 最香的功能之一。 - 日志實(shí)現(xiàn)(
logImpl)要和項(xiàng)目日志體系一致(Spring Boot 默認(rèn)集成好,可不設(shè))。
?? 極簡(jiǎn)推薦配置(90% 場(chǎng)景夠用):
<settings> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="logImpl" value="SLF4J"/> </settings>
其他設(shè)置按需調(diào)整,**先掌握這兩個(gè)。
Mapper(映射器)
三種常用方式,按推薦度排序如下:
? 方式一:通過(guò) Mapper 接口注冊(cè)(最推薦)
<mappers> <package name="com.example.mapper"/> </mappers>
- 要求:XML 文件名和接口名一致,且在同一包下(如
UserMapper.java+UserMapper.xml)。 - 優(yōu)點(diǎn):批量注冊(cè),簡(jiǎn)潔;配合 Spring Boot 自動(dòng)掃描更高效。
- 適用:主流開發(fā)方式(接口 + XML)。
? 方式二:通過(guò) XML 文件路徑注冊(cè)
<mappers> <mapper resource="mappers/UserMapper.xml"/> </mappers>
- 說(shuō)明:
resource從 classpath 根路徑開始寫。 - 適用:純 MyBatis 項(xiàng)目,或 XML 與接口不在同包時(shí)。
? 方式三:通過(guò) Mapper 接口全限定類名注冊(cè)(不推薦)
<mappers> <mapper class="com.example.mapper.UserMapper"/> </mappers>
- 要求:SQL 必須用 注解 寫在接口里(如
@Select),不能搭配 XML(除非 XML 路徑也正確且同名)。 - 適用:簡(jiǎn)單 SQL 用注解的場(chǎng)景。
?? 注意:
- 方式一(
<package>)是大廠最常用,尤其配合 Maven/Gradle 標(biāo)準(zhǔn)目錄結(jié)構(gòu)。 - 如果同時(shí)用 XML 和接口,必須保證命名和路徑匹配,否則報(bào)錯(cuò)“找不到 mapper”。
- 在 Spring / Spring Boot 中,通常用
@MapperScan("com.example.mapper"),無(wú)需在mybatis-config.xml里配<mappers>。
?? 一句話總結(jié):
優(yōu)先用
<package>掃描接口包;純 XML 用resource;注解 Mapper 用class。
到此這篇關(guān)于MyBatis配置文件的文章就介紹到這了,更多相關(guān)mybatis配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一起來(lái)學(xué)習(xí)JAVA的運(yùn)算符
這篇文章主要為大家詳細(xì)介紹了JAVA的運(yùn)算符,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
IDEA報(bào)錯(cuò)之前言中不允許有內(nèi)容問題及解決
當(dāng)使用IntelliJ IDEA時(shí),可能會(huì)遇到報(bào)錯(cuò)信息“前言中不允許有內(nèi)容”,這通常是由于XML文件是以帶有BOM頭的UTF-8格式保存的,導(dǎo)致IDE的解析出錯(cuò),解決辦法是在IDEA中調(diào)整文件編碼設(shè)置為無(wú)BOM的UTF-8,然后用文本編輯器(如Notepad++)2024-10-10
Java IO學(xué)習(xí)之緩沖輸入流(BufferedInputStream)
這篇文章主要介紹了Java IO學(xué)習(xí)之緩沖輸入流(BufferedInputStream)的相關(guān)資料,需要的朋友可以參考下2017-02-02
Spring Bean初始化及銷毀多種實(shí)現(xiàn)方式
這篇文章主要介紹了Spring Bean初始化及銷毀多種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)對(duì)比
本文給大家介紹如何通過(guò)IQuery和IUpdate定義強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句,給大家分享Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)講解,感興趣的朋友一起看看吧2021-08-08

