SpringBoot郵件發(fā)送之文本郵件與HTML郵件的實(shí)現(xiàn)步驟
在SpringBoot 項(xiàng)目中,郵件發(fā)送是不可或缺的基礎(chǔ)功能,廣泛應(yīng)用于用戶注冊(cè)驗(yàn)證、密碼找回、系統(tǒng)告警、訂單通知等核心場(chǎng)景。SpringBoot 提供的 spring-boot-starter-mail 組件,基于 JavaMail 完成了底層協(xié)議封裝與自動(dòng)化配置,無需開發(fā)者手動(dòng)處理 SMTP 連接、編碼適配等繁瑣操作。
一、核心基礎(chǔ)
- 協(xié)議說明:發(fā)送郵件的核心依賴是SMTP 協(xié)議(Simple Mail Transfer Protocol,簡單郵件傳輸協(xié)議),負(fù)責(zé)將郵件從發(fā)件人服務(wù)器傳遞到收件人服務(wù)器。推薦使用加密端口 587(TLS 加密),安全性更高,可有效避免郵件被攔截或篡改;非加密端口 25 因易被垃圾郵件利用,多數(shù)服務(wù)器已屏蔽,不推薦使用。
- 核心組件詳解(Spring 自動(dòng)注入,無需手動(dòng)實(shí)例化):
JavaMailSender:郵件發(fā)送的核心接口,封裝了郵件發(fā)送的所有核心操作(連接服務(wù)器、發(fā)送郵件、關(guān)閉連接等),SpringBoot 會(huì)根據(jù)配置文件自動(dòng)創(chuàng)建實(shí)例。SimpleMailMessage:專門用于發(fā)送純文本郵件的工具類,用法簡潔,僅支持文本內(nèi)容、收件人、主題等基礎(chǔ)配置,不支持樣式、附件。MimeMessageHelper:復(fù)雜郵件的輔助工具類,簡化 HTML 郵件、帶附件郵件、多收件人(抄送/密送)等場(chǎng)景的配置,解決中文亂碼、樣式解析等常見問題。
- 核心應(yīng)用場(chǎng)景:
- 純文本郵件:適用于系統(tǒng)告警、簡單通知(如服務(wù)器異常提醒、操作日志通知),特點(diǎn)是簡潔、發(fā)送速度快,無需復(fù)雜樣式。
- HTML 富文本郵件:適用于用戶交互類場(chǎng)景(如注冊(cè)驗(yàn)證碼、密碼找回、訂單通知、活動(dòng)營銷),支持文字樣式、圖片、鏈接、表格等,提升用戶體驗(yàn),是實(shí)際開發(fā)中最常用的郵件類型。
二、環(huán)境準(zhǔn)備(關(guān)鍵步驟,缺一不可)
發(fā)送郵件前,必須開啟發(fā)件人郵箱的 SMTP 服務(wù),并獲取「授權(quán)碼」—— 授權(quán)碼是第三方應(yīng)用(如 SpringBoot 項(xiàng)目)訪問郵箱的專用密鑰,不同于郵箱登錄密碼,目的是保障郵箱賬號(hào)安全,防止密碼泄露。不同郵箱的開啟方式略有差異,以下是最常用的兩種郵箱操作步驟,詳細(xì)且可直接對(duì)照操作。
1. QQ郵箱
1. 登錄 QQ 郵箱網(wǎng)頁版(https://mail.qq.com/),點(diǎn)擊頂部導(dǎo)航欄的「設(shè)置」,選擇左側(cè)「賬戶」選項(xiàng);
2. 下拉頁面,找到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)」模塊,點(diǎn)擊「開啟POP3/SMTP服務(wù)」;
3. 根據(jù)提示,用綁定 QQ 郵箱的手機(jī)發(fā)送短信驗(yàn)證,驗(yàn)證通過后,系統(tǒng)會(huì)自動(dòng)生成一串授權(quán)碼,復(fù)制并保存(建議存放在配置文件中,丟失可重新生成);
4. 記住 QQ 郵箱的 SMTP 服務(wù)器地址:smtp.qq.com,推薦使用端口:587(TLS 加密),若 587 端口不可用,可切換為 465(SSL 加密)。
2. 163郵箱
1. 登錄 163 郵箱網(wǎng)頁版(https://mail.163.com/),點(diǎn)擊頂部「設(shè)置」,選擇「POP3/SMTP/IMAP」選項(xiàng);
2. 在「SMTP 服務(wù)」模塊,點(diǎn)擊「開啟」,若未設(shè)置過授權(quán)碼,需先設(shè)置授權(quán)碼(建議設(shè)置復(fù)雜密碼,與郵箱登錄密碼區(qū)分開),設(shè)置完成后保存;
3. 163 郵箱的 SMTP 服務(wù)器地址:smtp.163.com,推薦端口:587(TLS 加密),465(SSL 加密)同樣支持,可根據(jù)服務(wù)器環(huán)境選擇。
三、SpringBoot 集成配置
SpringBoot 對(duì)郵件發(fā)送進(jìn)行了自動(dòng)化配置,僅需引入核心依賴、配置相關(guān)參數(shù),即可快速集成,無需編寫額外的配置類(特殊場(chǎng)景除外)。
1. 核心依賴(pom.xml)
僅需引入郵件核心 starter,lombok 用于簡化代碼(可選但推薦,可避免編寫 getter/setter、日志輸出等冗余代碼),無需引入其他額外依賴。
<!-- SpringBoot 郵件發(fā)送核心依賴,自動(dòng)引入 JavaMail 相關(guān)依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 可選:lombok,簡化代碼,無需寫getter/setter、log日志等 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional> <!-- 可選依賴,不影響其他模塊 -->
</dependency>
<!-- 可選:spring-boot-starter-web,用于提供測(cè)試接口,若項(xiàng)目已引入可忽略 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>2. 單郵箱配置(application.yml)
配置發(fā)件人郵箱、授權(quán)碼、SMTP 服務(wù)器地址、編碼格式、超時(shí)時(shí)間等核心參數(shù),注釋清晰,可直接替換為自己的郵箱信息,避免因配置錯(cuò)誤導(dǎo)致發(fā)送失敗。
spring:
mail:
# 發(fā)件人郵箱地址(QQ/163/企業(yè)郵箱均可,需與下方SMTP地址對(duì)應(yīng))
username: 123456@qq.com
# 授權(quán)碼(不是郵箱登錄密碼!是上一步獲取的第三方應(yīng)用授權(quán)碼)
password: abcdefghijklmnop
# SMTP 服務(wù)器地址(對(duì)應(yīng)郵箱,不可寫錯(cuò),QQ郵箱:smtp.qq.com;163郵箱:smtp.163.com)
host: smtp.qq.com
# 編碼格式,固定為 UTF-8,避免郵件標(biāo)題、內(nèi)容出現(xiàn)中文亂碼
default-encoding: UTF-8
# 額外配置:解決超時(shí)、加密、認(rèn)證等問題,生產(chǎn)環(huán)境必配
properties:
mail:
smtp:
# 必須開啟 SMTP 認(rèn)證(true),否則郵箱服務(wù)器會(huì)拒絕發(fā)送請(qǐng)求
auth: true
# 開啟 TLS 加密,提升郵件發(fā)送安全性,避免郵件被攔截
starttls:
enable: true
required: true # 強(qiáng)制使用 TLS 加密
# 郵件發(fā)送端口,推薦 587(TLS),465(SSL)也可,需與加密方式對(duì)應(yīng)
port: 587
# 超時(shí)設(shè)置(單位:毫秒),避免網(wǎng)絡(luò)波動(dòng)、服務(wù)器響應(yīng)慢導(dǎo)致發(fā)送超時(shí)
timeout: 10000 # 郵件發(fā)送超時(shí)時(shí)間
connectiontimeout: 10000 # 連接服務(wù)器超時(shí)時(shí)間
writetimeout: 10000 # 寫入數(shù)據(jù)超時(shí)時(shí)間
# 日志配置(可選,用于排查郵件發(fā)送問題,開發(fā)環(huán)境建議開啟)
logging:
level:
# 開啟 Spring 郵件發(fā)送相關(guān)日志,DEBUG 級(jí)別可查看完整發(fā)送流程
org.springframework.mail: DEBUG
# 開啟自定義郵件相關(guān)日志(替換為自己的包名)
com.example.mail: INFO四、核心代碼
采用「工具類封裝 + 接口測(cè)試」的模式,將郵件發(fā)送邏輯封裝為通用工具類,便于在項(xiàng)目中復(fù)用;提供測(cè)試接口,可快速驗(yàn)證郵件發(fā)送功能,同時(shí)補(bǔ)充異常處理、日志輸出,確保代碼的健壯性。
1. 封裝郵件工具類 MailUtil
整合純文本郵件、HTML 富文本郵件的發(fā)送方法,支持單收件人、多收件人,添加異常捕獲和日志記錄,避免發(fā)送失敗影響主流程;同時(shí)補(bǔ)充代碼注釋,便于后續(xù)維護(hù)和修改。
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
/**
* 郵件發(fā)送工具類(聚焦文本、HTML 兩種常用郵件,適配多場(chǎng)景復(fù)用)
* 注:工具類使用 @Component 注解,交給 Spring 管理,可在 Service、Controller 中直接注入使用
*/
@Slf4j // lombok 注解,自動(dòng)生成 log 日志對(duì)象,無需手動(dòng)創(chuàng)建
@Component
@RequiredArgsConstructor // lombok 注解,自動(dòng)注入構(gòu)造方法,無需寫 @Autowired
public class MailUtil {
// 核心發(fā)送接口,SpringBoot 自動(dòng)根據(jù)配置文件創(chuàng)建實(shí)例,直接注入即可
private final JavaMailSender javaMailSender;
// 從 application.yml 配置文件中讀取發(fā)件人郵箱,無需硬編碼
@Value("${spring.mail.username}")
private String defaultFromMail;
// 1. 發(fā)送純文本郵件(重載方法,支持單收件人、多收件人,適配不同場(chǎng)景)
/**
* 單收件人文本郵件
* @param to 收件人郵箱地址(單個(gè))
* @param subject 郵件主題
* @param content 郵件純文本內(nèi)容
*/
public void sendTextMail(String to, String subject, String content) {
sendTextMail(new String[]{to}, subject, content);
}
/**
* 多收件人文本郵件
* @param to 收件人郵箱地址數(shù)組(多個(gè))
* @param subject 郵件主題
* @param content 郵件純文本內(nèi)容
*/
public void sendTextMail(String[] to, String subject, String content) {
try {
// 創(chuàng)建純文本郵件實(shí)例
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(defaultFromMail); // 設(shè)置發(fā)件人(從配置文件讀取,避免硬編碼)
message.setTo(to); // 設(shè)置收件人(可單個(gè)、可多個(gè))
message.setSubject(subject); // 設(shè)置郵件主題
message.setText(content); // 設(shè)置郵件純文本內(nèi)容
javaMailSender.send(message); // 發(fā)送郵件
log.info("純文本郵件發(fā)送成功,收件人:{},郵件主題:{}", String.join(",", to), subject);
} catch (Exception e) {
// 捕獲所有異常,記錄日志,避免影響主流程
log.error("純文本郵件發(fā)送失敗,收件人:{},郵件主題:{},異常信息:{}",
String.join(",", to), subject, e.getMessage(), e);
// 拋出運(yùn)行時(shí)異常,由調(diào)用方根據(jù)業(yè)務(wù)需求處理(如重試、返回錯(cuò)誤信息)
throw new RuntimeException("文本郵件發(fā)送失敗,請(qǐng)稍后重試", e);
}
}
// 2. 發(fā)送 HTML 富文本郵件(重載方法,支持單收件人、多收件人,帶樣式)
/**
* 單收件人 HTML 郵件
* @param to 收件人郵箱地址(單個(gè))
* @param subject 郵件主題
* @param htmlContent HTML 格式的郵件內(nèi)容(支持樣式、鏈接、圖片等)
* @throws MessagingException 郵件發(fā)送相關(guān)異常(如配置錯(cuò)誤、網(wǎng)絡(luò)問題)
*/
public void sendHtmlMail(String to, String subject, String htmlContent) throws MessagingException {
sendHtmlMail(new String[]{to}, subject, htmlContent);
}
/**
* 多收件人 HTML 郵件
* @param to 收件人郵箱地址數(shù)組(多個(gè))
* @param subject 郵件主題
* @param htmlContent HTML 格式的郵件內(nèi)容(支持樣式、鏈接、圖片等)
* @throws MessagingException 郵件發(fā)送相關(guān)異常(如配置錯(cuò)誤、網(wǎng)絡(luò)問題)
*/
public void sendHtmlMail(String[] to, String subject, String htmlContent) throws MessagingException {
try {
// 創(chuàng)建復(fù)雜郵件實(shí)例(支持 HTML、附件、內(nèi)嵌圖片等)
MimeMessage message = javaMailSender.createMimeMessage();
// 創(chuàng)建輔助類,第一個(gè)參數(shù):郵件實(shí)例;第二個(gè)參數(shù):true 表示支持多部分內(nèi)容(如 HTML);第三個(gè)參數(shù):編碼格式
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setFrom(defaultFromMail); // 發(fā)件人
helper.setTo(to); // 收件人(多收件人傳入數(shù)組)
helper.setSubject(subject); // 郵件主題
// 第二個(gè)參數(shù) true:開啟 HTML 解析,否則會(huì)將 HTML 標(biāo)簽顯示為純文本
helper.setText(htmlContent, true);
javaMailSender.send(message); // 發(fā)送郵件
log.info("HTML 郵件發(fā)送成功,收件人:{},郵件主題:{}", String.join(",", to), subject);
} catch (MessagingException e) {
log.error("HTML 郵件發(fā)送失敗,收件人:{},郵件主題:{},異常信息:{}",
String.join(",", to), subject, e.getMessage(), e);
// 拋出異常,由調(diào)用方處理(如返回錯(cuò)誤信息、重試)
throw e;
}
}
}2. 測(cè)試接口 Controller
提供 REST 接口,可通過 Postman、瀏覽器直接調(diào)用測(cè)試,覆蓋單收件人、多收件人、文本郵件、HTML 郵件等核心場(chǎng)景;接口參數(shù)清晰,注釋詳細(xì),實(shí)際項(xiàng)目中可直接復(fù)用,或根據(jù)業(yè)務(wù)需求修改。
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.mail.MessagingException;
/**
* 郵件發(fā)送測(cè)試接口(實(shí)際項(xiàng)目中可整合到 Service 層,結(jié)合業(yè)務(wù)場(chǎng)景調(diào)用)
* 接口采用 GET 請(qǐng)求,方便快速測(cè)試;正式環(huán)境可根據(jù)需求改為 POST 請(qǐng)求
*/
@RestController
@RequestMapping("/mail") // 接口統(tǒng)一前綴,便于管理
@RequiredArgsConstructor
public class MailController {
// 注入郵件工具類,直接調(diào)用發(fā)送方法
private final MailUtil mailUtil;
// 測(cè)試:發(fā)送純文本郵件(單收件人,GET請(qǐng)求,方便快速測(cè)試)
@GetMapping("/send/text")
public String sendTextMail(
@RequestParam String to, // 收件人郵箱地址(必填)
@RequestParam String subject, // 郵件主題(必填)
@RequestParam String content // 郵件純文本內(nèi)容(必填)
) {
mailUtil.sendTextMail(to, subject, content);
return "純文本郵件發(fā)送成功!";
}
// 測(cè)試:發(fā)送 HTML 富文本郵件(單收件人,GET請(qǐng)求,方便快速測(cè)試)
@GetMapping("/send/html")
public String sendHtmlMail(
@RequestParam String to, // 收件人郵箱地址(必填)
@RequestParam String subject // 郵件主題(必填)
) throws MessagingException {
// 構(gòu)建 HTML 內(nèi)容(支持樣式、鏈接、表格等,可根據(jù)實(shí)際業(yè)務(wù)需求修改)
// 示例:模擬用戶注冊(cè)驗(yàn)證郵件,包含驗(yàn)證碼、鏈接等核心元素
String htmlContent = "<!DOCTYPE html>" +
"<html lang='zh-CN'>" +
"<head><meta charset='UTF-8'><title>" + subject + "</title></head>" +
"<body style='font-family: \"Microsoft YaHei\", sans-serif;'>" +
"<div style='width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #eee; border-radius: 5px;'>" +
"<h2 style='color: #1E90FF; text-align: center; margin-bottom: 20px;'>用戶注冊(cè)驗(yàn)證</h2>" +
"<p style='font-size: 14px; line-height: 1.5;'>尊敬的用戶,您好!</p>" +
"<p style='font-size: 14px; line-height: 1.5;'>您正在進(jìn)行注冊(cè)驗(yàn)證,本次驗(yàn)證碼為:</p>" +
"<div style='font-size: 24px; color: #FF4500; font-weight: bold; text-align: center; margin: 15px 0;'>123456</div>" +
"<p style='font-size: 14px; line-height: 1.5;'>驗(yàn)證碼有效期為 5 分鐘,請(qǐng)?jiān)谟行趦?nèi)完成驗(yàn)證。</p>" +
"<p style='font-size: 14px; line-height: 1.5;'>若您未發(fā)起注冊(cè)操作,請(qǐng)忽略此郵件,感謝您的支持!</p>" +
"<p style='font-size: 12px; color: #999; margin-transform: translateY( 30px; text-align: center;'>此為系統(tǒng)自動(dòng)發(fā)送郵件,請(qǐng)勿回復(fù)</p>" +
"</div>" +
"</body></html>";
mailUtil.sendHtmlMail(to, subject, htmlContent);
return "HTML 郵件發(fā)送成功!";
}
// 測(cè)試:多收件人發(fā)送純文本郵件(實(shí)際場(chǎng)景常用,如批量通知)
@GetMapping("/send/text/batch")
public String sendBatchTextMail(
@RequestParam String[] to, // 多收件人郵箱地址數(shù)組(必填,格式:xxx@qq.com,xxx@163.com)
@RequestParam String subject, // 郵件主題(必填)
@RequestParam String content // 郵件純文本內(nèi)容(必填)
) {
mailUtil.sendTextMail(to, subject, content);
return "多收件人文本郵件發(fā)送成功!共發(fā)送 " + to.length + " 個(gè)收件人";
}
// 測(cè)試:多收件人發(fā)送 HTML 郵件(實(shí)際場(chǎng)景常用,如批量營銷、通知)
@GetMapping("/send/html/batch")
public String sendBatchHtmlMail(
@RequestParam String[] to,
@RequestParam String subject
) throws MessagingException {
// 復(fù)用注冊(cè)驗(yàn)證 HTML 模板,可根據(jù)實(shí)際需求修改
String htmlContent = "<!DOCTYPE html>" +
"<html lang='zh-CN'>" +
"<body style='font-family: \"Microsoft YaHei\", sans-serif;'>" +
"<h2 style='color: #1E90FF; text-align: center;'>批量通知郵件</h2>" +
"<p style='font-size: 14px;'>各位用戶,您好!本次批量通知內(nèi)容如下:</p>" +
"<p style='font-size: 14px; color: #333;'>系統(tǒng)將于今晚 23:00 進(jìn)行升級(jí)維護(hù),維護(hù)期間可能無法正常使用,敬請(qǐng)諒解!</p>" +
"<p style='font-size: 12px; color: #999; margin-top: 20px;'>此為系統(tǒng)批量發(fā)送郵件,請(qǐng)勿回復(fù)</p>" +
"</body></html>";
mailUtil.sendHtmlMail(to, subject, htmlContent);
return "多收件人HTML郵件發(fā)送成功!共發(fā)送 " + to.length + " 個(gè)收件人";
}
}五、關(guān)鍵注意事項(xiàng)
- 授權(quán)碼是核心,必須填寫正確,不可用郵箱登錄密碼替代,否則郵箱服務(wù)器會(huì)拒絕發(fā)送請(qǐng)求,導(dǎo)致發(fā)送失敗;若授權(quán)碼丟失,可重新在郵箱設(shè)置中生成。
- HTML 郵件必須開啟
helper.setText(htmlContent, true),第二個(gè)參數(shù)為 true 才會(huì)解析 HTML 樣式,若設(shè)為 false,會(huì)將 HTML 標(biāo)簽顯示為純文本,失去樣式效果。 - 測(cè)試時(shí)優(yōu)先使用個(gè)人郵箱(QQ/163),正式環(huán)境建議切換為企業(yè)郵箱,因?yàn)閭€(gè)人郵箱有發(fā)送頻率限制(如 QQ 郵箱單日發(fā)送上限約 50 封),企業(yè)郵箱無明顯限制,穩(wěn)定性更高。
- 若郵件發(fā)送失敗,可開啟日志 DEBUG 級(jí)別,重點(diǎn)排查以下問題:授權(quán)碼錯(cuò)誤、SMTP 服務(wù)器地址錯(cuò)誤、端口錯(cuò)誤、網(wǎng)絡(luò)波動(dòng)、郵箱 SMTP 服務(wù)未開啟。
- 多收件人發(fā)送時(shí),直接傳入字符串?dāng)?shù)組
String[] to即可,無需多次調(diào)用發(fā)送方法,工具類已做好適配,避免重復(fù)創(chuàng)建連接,提升發(fā)送效率。 - 中文亂碼問題:確保配置文件中
default-encoding: UTF-8,同時(shí) MimeMessageHelper 構(gòu)造方法中指定編碼為 UTF-8,即可避免中文亂碼。 - 異常處理:工具類中已捕獲異常并記錄日志,實(shí)際項(xiàng)目中可根據(jù)業(yè)務(wù)需求添加重試邏輯(如失敗后重試 2-3 次),提升郵件發(fā)送成功率。
以上就是SpringBoot郵件發(fā)送之文本郵件與HTML郵件的實(shí)現(xiàn)步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot發(fā)送文本郵件與HTML郵件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java如何實(shí)現(xiàn)將類文件打包為jar包
這篇文章主要介紹了Java如何實(shí)現(xiàn)將類文件打包為jar包,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
MybatisPlus字段自動(dòng)填充&樂觀鎖的方法實(shí)現(xiàn)
MyBatis-Plus提供了便捷的自動(dòng)填充功能,可用于自動(dòng)處理創(chuàng)建時(shí)間、更新時(shí)間等字段,本文來介紹一下MybatisPlus字段自動(dòng)填充&樂觀鎖的方法實(shí)現(xiàn),感興趣的可以了解一下2025-08-08
java 刪除文件夾中的所有內(nèi)容而不刪除文件夾本身的實(shí)例
下面小編就為大家?guī)硪黄猨ava 刪除文件夾中的所有內(nèi)容而不刪除文件夾本身的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
idea報(bào)錯(cuò)java:?非法字符:?‘\ufeff‘的解決步驟以及說明
這篇文章主要介紹了idea報(bào)錯(cuò)java:非法字符:\ufeff的解決步驟以及說明,文章詳細(xì)解釋了為什么在Java中會(huì)出現(xiàn)\ufeff錯(cuò)誤,這是由于BOM字符被認(rèn)為是非法字符導(dǎo)致的,通過示例代碼將解決的過程介紹的非常詳細(xì),需要的朋友可以參考下2025-05-05
jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼
這篇文章主要介紹了jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
java自定義切面增強(qiáng)方式(關(guān)于自定義注解aop)
這篇文章主要介紹了java自定義切面增強(qiáng)方式(關(guān)于自定義注解aop),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
淺談java中math類中三種取整函數(shù)的區(qū)別
下面小編就為大家?guī)硪黄獪\談java中math類中三種取整函數(shù)的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11

