最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用JasperReports報表引擎的原理與使用實踐

 更新時間:2026年07月26日 13:47:40   作者:霸道流氓氣質(zhì)  
還在為Java報表生成頭疼,本文帶你快速掌握JasperReports核心功能,從JRXML模板設計到數(shù)據(jù)填充,輕松實現(xiàn)PDF、Excel等多格式導出,解決中文亂碼、批量打印等常見難題,附完整示例代碼,需要的朋友可以參考下

一、JasperReports 是什么

1.1 定位

JasperReports 是 Java 生態(tài)中最流行的開源報表引擎,專門用于生成格式化的文檔(PDF、Excel、Word、HTML、CSV 等)。它的核心價值是將數(shù)據(jù)模板分離,通過模板定義報表樣式,運行時填充數(shù)據(jù)后生成最終文檔。

1.2 類比理解

Word 郵件合并:
  模板(.docx)+ 數(shù)據(jù)(Excel聯(lián)系人) → 批量生成信件

JasperReports:
  模板(.jrxml/.jasper)+ 數(shù)據(jù)(數(shù)據(jù)庫/Java對象) → 批量生成 PDF/Excel/HTML

1.3 典型應用場景

場景示例
發(fā)貨單打印選中訂單 → 生成 PDF 發(fā)貨單(含條碼/表格/簽章)
財務報表月度銷售匯總 → 導出 Excel
物流面單快遞單/運單 → 生成固定格式 PDF 批量打印
庫存盤點表倉庫商品清單 → 導出打印
對賬單供應商對賬 → 生成 PDF 發(fā)送郵件

二、核心概念

2.1 關鍵術(shù)語

概念說明文件格式
JRXML報表模板源文件,XML 格式,定義報表布局和樣式.jrxml
Jasper編譯后的模板文件(二進制),運行時直接加載.jasper
JasperPrint填充數(shù)據(jù)后的內(nèi)存報表對象,可導出為各種格式內(nèi)存對象
DataSource數(shù)據(jù)源,為報表提供數(shù)據(jù)(JDBC/Java集合/JSON等)-
Parameter報表參數(shù),從外部傳入的變量(如標題、日期、Logo等)-
Field數(shù)據(jù)字段,對應數(shù)據(jù)源中每條記錄的列-
Band報表區(qū)域/帶區(qū)(頁眉/列頭/明細/頁腳/匯總等)-

2.2 報表結(jié)構(gòu)

┌─────────────────────────────────────────┐
│          Title Band(標題區(qū))             │  ← 整個報表只出現(xiàn)一次
├─────────────────────────────────────────┤
│        Page Header(頁眉)               │  ← 每頁頂部
├─────────────────────────────────────────┤
│       Column Header(列標題)            │  ← 表格列名
├─────────────────────────────────────────┤
│         Detail Band(明細區(qū))            │  ← 每條數(shù)據(jù)重復一次
│    ┌────┬──────┬────┬──────┬─────┐     │
│    │序號│ 商品名 │數(shù)量│  單價  │ 金額 │     │
│    ├────┼──────┼────┼──────┼─────┤     │
│    │ 1  │冰箱   │ 2  │3999  │7998 │     │
│    │ 2  │洗衣機 │ 1  │2999  │2999 │     │
│    │... │...   │... │...   │...  │     │
│    └────┴──────┴────┴──────┴─────┘     │
├─────────────────────────────────────────┤
│        Column Footer(列匯總)           │  ← 合計行
├─────────────────────────────────────────┤
│        Page Footer(頁腳)               │  ← 每頁底部(頁碼等)
├─────────────────────────────────────────┤
│         Summary(總匯總)                │  ← 整個報表最后
└─────────────────────────────────────────┘

三、工作流程

3.1 完整生命周期

設計階段(開發(fā)時):
  Jaspersoft Studio 設計模板 → 保存為 .jrxml 文件
       │
       ▼
  編譯模板:JasperCompileManager.compileReport() → .jasper 文件
       │
       ▼(部署到項目 resources 目錄)

運行階段(運行時):
  加載 .jasper 模板
       │
       ▼
  填充數(shù)據(jù):JasperFillManager.fillReport(模板, 參數(shù), 數(shù)據(jù)源) → JasperPrint
       │
       ▼
  導出文檔:JasperExportManager.exportReportToPdf(jasperPrint) → PDF/Excel/HTML
       │
       ▼
  返回給前端下載/預覽/打印

3.2 運行時數(shù)據(jù)流

Controller 接收請求(如:打印發(fā)貨單)
  │
  ├─→ Service 查詢數(shù)據(jù)庫獲取發(fā)貨單數(shù)據(jù)
  │     └── List<DeliveryOrderDto> 數(shù)據(jù)集
  │
  ├─→ 組裝參數(shù) Map(標題、公司名、打印日期等)
  │
  ├─→ 創(chuàng)建數(shù)據(jù)源 JRBeanCollectionDataSource(數(shù)據(jù)集)
  │
  ├─→ 加載模板 .jasper(從 classpath 或數(shù)據(jù)庫)
  │
  ├─→ JasperFillManager.fillReport(模板, 參數(shù), 數(shù)據(jù)源)
  │     └── → JasperPrint(內(nèi)存中的完整報表)
  │
  ├─→ 導出為目標格式
  │     ├── PDF:JasperExportManager.exportReportToPdfStream()
  │     ├── Excel:JRXlsxExporter
  │     ├── Word:JRDocxExporter
  │     └── HTML:HtmlExporter
  │
  └─→ 寫入 HttpServletResponse 輸出流
       └── 前端收到文件下載/預覽

四、涉及的技術(shù)知識點

4.1 模板設計

知識點說明
Jaspersoft StudioEclipse 插件形式的可視化模板設計器(拖拽式)
JRXML 語法XML 格式的模板描述語言
表達式語言$F{fieldName}(字段)、$P{paramName}(參數(shù))、$V{varName}(變量)
子報表(Subreport)報表嵌套,主報表中嵌入子報表
條件樣式根據(jù)數(shù)據(jù)值動態(tài)改變顏色/字體/可見性
條碼/二維碼內(nèi)置 Barcode4J 支持各種條碼格式
圖表內(nèi)置 JFreeChart 支持柱狀圖/折線圖/餅圖

4.2 數(shù)據(jù)源類型

數(shù)據(jù)源場景
Java Bean 集合JRBeanCollectionDataSource最常用,傳入 List
JDBC 直連JRResultSetDataSource直接執(zhí)行 SQL
空數(shù)據(jù)源JREmptyDataSource只有參數(shù)沒有明細數(shù)據(jù)
Map 集合JRMapCollectionDataSourceList數(shù)據(jù)
JSONJsonDataSourceJSON 字符串/文件

4.3 導出格式

格式導出器類用途
PDFJasperExportManager打印、歸檔
Excel (xlsx)JRXlsxExporter數(shù)據(jù)分析
Word (docx)JRDocxExporter文檔編輯
HTMLHtmlExporter在線預覽
CSVJRCsvExporter數(shù)據(jù)交換
圖片 (PNG)JRGraphics2DExporter縮略圖

4.4 設計模式

模式應用
模板方法編譯 → 填充 → 導出的固定流程
策略模式不同 Exporter 實現(xiàn)不同格式導出
建造者模式ExporterInput/OutputItem 的構(gòu)建
工廠模式JasperCompileManager/JasperFillManager 工廠方法

五、通用示例代碼

5.1 pom.xml 依賴

<dependencies>
    <!-- JasperReports 核心 -->
    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports</artifactId>
        <version>6.20.0</version>
    </dependency>
    <!-- 中文字體支持 -->
    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports-fonts</artifactId>
        <version>6.20.0</version>
    </dependency>
    <!-- Excel 導出 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
</dependencies>

5.2 JRXML 模板示例(發(fā)貨單)

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
              http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
              name="delivery_order" pageWidth="595" pageHeight="842"
              columnWidth="555" leftMargin="20" rightMargin="20"
              topMargin="20" bottomMargin="20">
    <!-- 參數(shù)定義 -->
    <parameter name="companyName" class="java.lang.String"/>
    <parameter name="deliveryCode" class="java.lang.String"/>
    <parameter name="printDate" class="java.lang.String"/>
    <parameter name="customerName" class="java.lang.String"/>
    <parameter name="address" class="java.lang.String"/>
    <!-- 字段定義(對應 Java Bean 屬性) -->
    <field name="productCode" class="java.lang.String"/>
    <field name="productName" class="java.lang.String"/>
    <field name="quantity" class="java.lang.Integer"/>
    <field name="price" class="java.math.BigDecimal"/>
    <!-- 變量定義(自動計算) -->
    <variable name="totalAmount" class="java.math.BigDecimal" calculation="Sum">
        <variableExpression>
            <![CDATA[$F{price}.multiply(new java.math.BigDecimal($F{quantity}))]]>
        </variableExpression>
    </variable>
    <!-- 標題區(qū) -->
    <title>
        <band height="80">
            <staticText>
                <reportElement x="0" y="0" width="555" height="30"/>
                <textElement textAlignment="Center">
                    <font size="18" isBold="true" fontName="華文宋體"/>
                </textElement>
                <text><![CDATA[發(fā) 貨 單]]></text>
            </staticText>
            <textField>
                <reportElement x="0" y="40" width="200" height="20"/>
                <textFieldExpression><![CDATA["單號:" + $P{deliveryCode}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="355" y="40" width="200" height="20"/>
                <textFieldExpression><![CDATA["日期:" + $P{printDate}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <!-- 列標題 -->
    <columnHeader>
        <band height="25">
            <staticText>
                <reportElement x="0" y="0" width="100" height="25" mode="Opaque" backcolor="#CCCCCC"/>
                <text><![CDATA[商品編碼]]></text>
            </staticText>
            <staticText>
                <reportElement x="100" y="0" width="200" height="25" mode="Opaque" backcolor="#CCCCCC"/>
                <text><![CDATA[商品名稱]]></text>
            </staticText>
            <staticText>
                <reportElement x="300" y="0" width="80" height="25" mode="Opaque" backcolor="#CCCCCC"/>
                <text><![CDATA[數(shù)量]]></text>
            </staticText>
            <staticText>
                <reportElement x="380" y="0" width="80" height="25" mode="Opaque" backcolor="#CCCCCC"/>
                <text><![CDATA[單價]]></text>
            </staticText>
        </band>
    </columnHeader>
    <!-- 明細區(qū)(每條數(shù)據(jù)重復) -->
    <detail>
        <band height="20">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <textFieldExpression><![CDATA[$F{productCode}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="200" height="20"/>
                <textFieldExpression><![CDATA[$F{productName}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="300" y="0" width="80" height="20"/>
                <textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="380" y="0" width="80" height="20"/>
                <textFieldExpression><![CDATA[$F{price}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <!-- 匯總區(qū) -->
    <summary>
        <band height="30">
            <textField>
                <reportElement x="300" y="5" width="180" height="20"/>
                <textElement textAlignment="Right">
                    <font isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA["合計金額:" + $V{totalAmount}]]></textFieldExpression>
            </textField>
        </band>
    </summary>
</jasperReport>

5.3 JasperUtil 工具類封裝

package com.example.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.ooxml.JRDocxExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.export.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * JasperReports 報表工具類.
 * 封裝編譯、填充、導出的完整流程.
 */
public class JasperUtil {

    private static final Logger log = LoggerFactory.getLogger(JasperUtil.class);

    /**
     * 導出類型枚舉.
     */
    public enum DocType {
        PDF, EXCEL, WORD, HTML
    }

    /**
     * 生成報表并寫入 HTTP 響應(文件下載).
     *
     * @param templatePath 模板路徑(classpath 下的 .jasper 文件)
     * @param params       報表參數(shù)
     * @param dataList     數(shù)據(jù)集合(對應模板中的 Field)
     * @param fileName     下載文件名
     * @param docType      導出格式
     * @param response     HTTP 響應
     */
    public static <T> void exportToResponse(
            String templatePath,
            Map<String, Object> params,
            List<T> dataList,
            String fileName,
            DocType docType,
            HttpServletResponse response) {

        try {
            byte[] bytes = generateReport(templatePath, params, dataList, docType);

            // 設置響應頭
            String contentType;
            String extension;
            switch (docType) {
                case PDF:
                    contentType = "application/pdf";
                    extension = ".pdf";
                    break;
                case EXCEL:
                    contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                    extension = ".xlsx";
                    break;
                case WORD:
                    contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
                    extension = ".docx";
                    break;
                default:
                    contentType = "text/html";
                    extension = ".html";
            }

            response.setContentType(contentType);
            response.setHeader("Content-Disposition",
                "attachment; filename=" + java.net.URLEncoder.encode(fileName + extension, "UTF-8"));
            response.setContentLength(bytes.length);
            response.getOutputStream().write(bytes);
            response.getOutputStream().flush();

        } catch (Exception e) {
            log.error("報表導出失敗", e);
            throw new RuntimeException("報表導出失敗", e);
        }
    }

    /**
     * 生成報表字節(jié)數(shù)組.
     */
    public static <T> byte[] generateReport(
            String templatePath,
            Map<String, Object> params,
            List<T> dataList,
            DocType docType) throws Exception {

        // 1. 加載編譯好的模板
        InputStream templateStream = JasperUtil.class.getClassLoader()
            .getResourceAsStream(templatePath);
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(templateStream);

        // 2. 創(chuàng)建數(shù)據(jù)源
        JRDataSource dataSource;
        if (dataList != null && !dataList.isEmpty()) {
            dataSource = new JRBeanCollectionDataSource(dataList);
        } else {
            dataSource = new JREmptyDataSource();
        }

        // 3. 填充數(shù)據(jù) → 生成 JasperPrint
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);

        // 4. 導出為目標格式
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        switch (docType) {
            case PDF:
                JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
                break;
            case EXCEL:
                exportToExcel(jasperPrint, outputStream);
                break;
            case WORD:
                exportToWord(jasperPrint, outputStream);
                break;
            default:
                JasperExportManager.exportReportToHtmlFile(jasperPrint, outputStream.toString());
        }
        return outputStream.toByteArray();
    }

    private static void exportToExcel(JasperPrint jasperPrint, ByteArrayOutputStream out) throws Exception {
        JRXlsxExporter exporter = new JRXlsxExporter();
        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
        SimpleXlsxReportConfiguration config = new SimpleXlsxReportConfiguration();
        config.setOnePagePerSheet(false);
        config.setDetectCellType(true);
        exporter.setConfiguration(config);
        exporter.exportReport();
    }

    private static void exportToWord(JasperPrint jasperPrint, ByteArrayOutputStream out) throws Exception {
        JRDocxExporter exporter = new JRDocxExporter();
        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
        exporter.exportReport();
    }
}

5.4 業(yè)務代碼使用示例

@RestController
public class DeliveryPrintController {

    @Resource
    private DeliveryService deliveryService;

    /**
     * 打印發(fā)貨單(導出PDF).
     */
    @GetMapping("/api/delivery/print")
    public void printDeliveryOrder(
            @RequestParam Integer deliveryId,
            HttpServletResponse response) {

        // 1. 查詢發(fā)貨單數(shù)據(jù)
        DeliveryOrderDto order = deliveryService.getDeliveryOrder(deliveryId);
        List<DeliveryItemDto> items = deliveryService.getDeliveryItems(deliveryId);

        // 2. 組裝報表參數(shù)
        Map<String, Object> params = new HashMap<>();
        params.put("companyName", "xxx科技");
        params.put("deliveryCode", order.getDeliveryCode());
        params.put("printDate", DateUtil.formatStandardDate(new Date()));
        params.put("customerName", order.getCustomerName());
        params.put("address", order.getShipToAddress());

        // 3. 導出 PDF
        JasperUtil.exportToResponse(
            "print/delivery_order.jasper",  // classpath 下的模板
            params,
            items,                           // 明細數(shù)據(jù)
            "發(fā)貨單_" + order.getDeliveryCode(),
            JasperUtil.DocType.PDF,
            response);
    }

    /**
     * 批量打?。ǘ鄠€發(fā)貨單合并為一個PDF).
     */
    @PostMapping("/api/delivery/batch-print")
    public void batchPrint(
            @RequestBody List<Integer> deliveryIds,
            HttpServletResponse response) {

        List<JasperPrint> prints = new ArrayList<>();
        for (Integer id : deliveryIds) {
            DeliveryOrderDto order = deliveryService.getDeliveryOrder(id);
            List<DeliveryItemDto> items = deliveryService.getDeliveryItems(id);

            Map<String, Object> params = new HashMap<>();
            params.put("deliveryCode", order.getDeliveryCode());
            // ... 其他參數(shù)

            // 生成每個發(fā)貨單的 JasperPrint
            InputStream template = getClass().getClassLoader()
                .getResourceAsStream("print/delivery_order.jasper");
            JasperReport report = (JasperReport) JRLoader.loadObject(template);
            JasperPrint print = JasperFillManager.fillReport(report, params,
                new JRBeanCollectionDataSource(items));
            prints.add(print);
        }

        // 合并導出為一個 PDF
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "attachment; filename=batch_delivery.pdf");
        JRPdfExporter exporter = new JRPdfExporter();
        exporter.setExporterInput(SimpleExporterInput.getInstance(prints));
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(response.getOutputStream()));
        exporter.exportReport();
    }
}

5.5 模板 DTO 示例

/**
 * 發(fā)貨單明細DTO(字段名需與JRXML中的Field名稱一致).
 */
@Data
public class DeliveryItemDto {
    private String productCode;    // 對應 $F{productCode}
    private String productName;    // 對應 $F{productName}
    private Integer quantity;      // 對應 $F{quantity}
    private BigDecimal price;      // 對應 $F{price}
}

六、開發(fā)流程

6.1 模板設計(使用 Jaspersoft Studio)

1. 下載安裝 Jaspersoft Studio(免費,基于 Eclipse)
2. 新建 Jasper Report → 選擇模板尺寸(A4/自定義)
3. 拖拽組件到 Band 中:
   - Static Text:固定文本
   - Text Field:動態(tài)字段 $F{xxx}
   - Image:圖片/Logo
   - Barcode:條碼
   - Line/Rectangle:線條/邊框
4. 定義 Parameters(外部傳入的參數(shù))
5. 定義 Fields(對應數(shù)據(jù)源的字段)
6. 預覽效果 → 保存為 .jrxml
7. 編譯為 .jasper → 放到項目 resources/print/ 目錄

6.2 項目中的文件組織

src/main/resources/
├── print/
│   ├── delivery_order.jrxml      ← 模板源文件(用于修改)
│   ├── delivery_order.jasper     ← 編譯后模板(運行時加載)
│   ├── outbound_order.jasper     ← 出庫單模板
│   └── stock_report.jasper       ← 庫存報表模板
├── font/
│   └── simsun.ttf                ← 中文字體文件
└── jasperreports.properties       ← JasperReports 配置

七、關鍵設計總結(jié)

設計要點實現(xiàn)方式收益
數(shù)據(jù)與模板分離.jasper 模板 + List 數(shù)據(jù)修改樣式不改代碼,修改邏輯不改模板
預編譯模板.jrxml → .jasper(開發(fā)時編譯)運行時直接加載,無需編譯開銷
多格式輸出同一模板導出 PDF/Excel/Word/HTML一次設計,多種輸出
批量合并多個 JasperPrint 合并為一個 PDF批量打印只需下載一個文件
中文支持嵌入字體文件到項目中避免服務器字體缺失導致中文亂碼
參數(shù)化$P{paramName} 動態(tài)傳入同一模板適配不同場景(換標題/Logo/簽章)
子報表嵌套Subreport 組件主從報表(如訂單主信息 + 商品明細)
表達式計算$V{variable} + calculation=Sum自動計算合計/平均/計數(shù)

以上就是SpringBoot使用JasperReports報表引擎的原理與使用實踐的詳細內(nèi)容,更多關于SpringBoot使用JasperReports報表引擎的資料請關注腳本之家其它相關文章!

相關文章

  • 深入解析HashMap的put方法

    深入解析HashMap的put方法

    在Java集合中,HashMap的重要性不言而喻,作為一種存儲鍵值對的數(shù)據(jù)結(jié)構(gòu),它在日常開發(fā)中有著非常多的應用場景,也是面試中的高頻考點,本篇文章就來分析一下HashMap集合中的put方法
    2022-01-01
  • json轉(zhuǎn)換成java對象示例

    json轉(zhuǎn)換成java對象示例

    這篇文章主要介紹了json轉(zhuǎn)換成java對象示例,需要的朋友可以參考下
    2014-04-04
  • Java 異常詳解

    Java 異常詳解

    本文主要介紹了異常與錯誤的區(qū)別,異常的體現(xiàn)分類,異常的處理機制,如何自定義異常等,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • springmvc集成shiro登錄失敗處理操作

    springmvc集成shiro登錄失敗處理操作

    這篇文章主要介紹了springmvc集成shiro登錄失敗處理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 使用SpringBoot和JPA實現(xiàn)批量處理新增、修改

    使用SpringBoot和JPA實現(xiàn)批量處理新增、修改

    最近項目需要在JPA中使用ID進行批量更新,所以下面這篇文章主要給大家介紹了關于使用SpringBoot和JPA實現(xiàn)批量處理新增、修改的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Simple Java Mail郵件發(fā)送實現(xiàn)過程解析

    Simple Java Mail郵件發(fā)送實現(xiàn)過程解析

    這篇文章主要介紹了Simple Java Mail郵件發(fā)送實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • JavaGUI菜單欄與文本和密碼及文本域組件使用詳解

    JavaGUI菜單欄與文本和密碼及文本域組件使用詳解

    這篇文章主要介紹了JavaGUI菜單欄與文本和密碼及文本域組件使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • Java快速開發(fā)平臺若依、芋道、Jeesite、JeecgBoot詳細對比

    Java快速開發(fā)平臺若依、芋道、Jeesite、JeecgBoot詳細對比

    Java快速開發(fā)平臺是現(xiàn)代企業(yè)級Java應用研發(fā)過程中提升效率、降低重復勞動、加速交付周期的關鍵技術(shù)支撐體系,這篇文章主要介紹了Java快速開發(fā)平臺若依、芋道、Jeesite、JeecgBoot詳細對比的相關資料,需要的朋友可以參考下
    2026-05-05
  • Java后臺Controller實現(xiàn)文件下載操作

    Java后臺Controller實現(xiàn)文件下載操作

    這篇文章主要介紹了Java后臺Controller實現(xiàn)文件下載操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring事務管理之如何處理刪除操作與事務回滾

    Spring事務管理之如何處理刪除操作與事務回滾

    在實際開發(fā)中,事務管理是保證數(shù)據(jù)一致性的核心機制之一,本文將通過一個實際案例,詳細分析Spring事務中的刪除操作與回滾機制,并提供優(yōu)化方案,需要的可以參考下
    2025-04-04

最新評論

璧山县| 通化市| 迁安市| 迁安市| 绵竹市| 宜宾市| 津市市| 大化| 军事| 平远县| 方城县| 乌鲁木齐县| 浪卡子县| 隆回县| 吉林市| 班戈县| 正镶白旗| 安顺市| 邯郸市| 商丘市| 瑞丽市| 定兴县| 哈尔滨市| 襄汾县| 淄博市| 盐源县| 若尔盖县| 丁青县| 德兴市| 武平县| 蓬溪县| 深州市| 大宁县| 绩溪县| 静宁县| 勐海县| 宁乡县| 宁都县| 曲水县| 黔东| 乐业县|