在獨立Java應用程序中使用Tomcat JDBC連接池

這是從我們的客人文章W4G伙伴克拉倫斯豪的作者臨春3從A按。 您可能會在文章結尾找到本書的折扣券代碼,僅適用于Java Code Geeks的讀者! 請享用!

在需要數據訪問權限的獨立Java應用程序中使用JDBC連接池時,大多數開發人員將使用commons-dbcp或c3p0 。 在本教程中,我們將討論在獨立Java應用程序中的Apache Tomcat Web容器中使用JDBC連接池。

Tomcat 7的新功能之一是tomcat-jdbc連接池,它替代了commons-dbcp連接池。 下面列出了tomcat-jdbc相對于commons-dbcp和其他連接池庫的主要優點:
  • 支持高度并發的環境和多核/ CPU系統
  • Commons-dbcp是單線程的,速度很慢
  • Commons-dbcp很復雜(超過60個類),而tomcat-jdbc核心僅包含8個類
  • 支持異步連接檢索
  • XA連接支持
  • 連接池對象公開了可以注冊用于監視目的的MBean
  • 支持common-dbcp中的大多數屬性,以及許多增強的屬性
  • 支持JDBC攔截器
有關配置的詳細說明和文檔,請參考Apache Tomcat網站上的官方文檔頁面。
在本教程中,我們將演示如何使用tomcat-jdbc開發簡單的獨立數據訪問Java應用程序。 該應用程序將使用以下框架和庫:
  • Spring Framework 3.1.1
  • 休眠4.1.3
  • Spring Data JPA 1.1.0
  • Tomcat JDBC連接池7.0.27
  • H2數據庫1.3.167
  • 番石榴12.0
該示例是使用SpringSource Tool Suite開發的,可以在本文末尾下載壓縮的存檔 。 另一方面,本教程假定您已經對使用Spring和Hibernate開發JPA應用程序有所了解。

依存關系

項目依賴項由Maven管理。 以下是項目的POM文件(pom.xml)的片段。

清單1 –項目依賴性

<properties><maven.test.failure.ignore>true</maven.test.failure.ignore><spring.framework.version>3.1.1.RELEASE</spring.framework.version><hibernate.version>4.1.3.Final</hibernate.version><spring.data.jpa.version>1.1.0.RELEASE</spring.data.jpa.version><tomcat.dbcp.version>7.0.27</tomcat.dbcp.version><h2.version>1.3.167</h2.version><slf4j.version>1.6.4</slf4j.version><log4j.version>1.2.16</log4j.version><guava.version>12.0</guava.version>
</properties><dependencies><!-- Hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId>       <version>${hibernate.version}</version></dependency><!-- Spring Framework --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.framework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.framework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.framework.version}</version></dependency><!-- Spring Data JPA --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>${spring.data.jpa.version}</version></dependency><!-- Tomcat DBCP --><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId><version>${tomcat.dbcp.version}</version></dependency><!-- Logging --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version><scope>runtime</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version><scope>runtime</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><!-- Others --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>${h2.version}</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>${guava.version}</version></dependency>
</dependencies>

領域對象模型

對象模型是一個簡單的聯系信息模型。 每個聯系人都有其名字,姓氏和出生日期。 同樣,每個聯系人將與零個或多個愛好(例如游泳,慢跑,閱讀等)相關聯。 在DOM中,有兩個主要類,即Contact和Hobby類。 清單2和3分別顯示了這些類的代碼清單。

清單2 – Contact類

@Entity
@Table(name = "contact")
public class Contact {private Long id;private int version;private String firstName;private String lastName;private Date birthDate;private Set<Hobby> hobbies = new HashSet<Hobby>();@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name = "ID")public Long getId() {return id;}public void setId(Long id) {this.id = id;}@Version@Column(name = "VERSION")public int getVersion() {return version;}public void setVersion(int version) {this.version = version;}@Column(name = "FIRST_NAME")public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}@Column(name = "LAST_NAME")public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}@Column(name = "BIRTH_DATE")@Temporal(TemporalType.DATE)public Date getBirthDate() {return birthDate;}public void setBirthDate(Date birthDate) {this.birthDate = birthDate;} @ManyToMany@JoinTable(name = "contact_hobby_detail", joinColumns = @JoinColumn(name = "CONTACT_ID"), inverseJoinColumns = @JoinColumn(name = "HOBBY_ID"))public Set<hobby> getHobbies() {return this.hobbies;}public void setHobbies(Set<hobby> hobbies) {this.hobbies = hobbies;}   public String toString() {  return "Contact - Id: " + id + ", First name: " + firstName + ", Last name: " + lastName + ", Birthday: " + birthDate;}  }

清單3 – Hobby類

@Entity
@Table(name = "hobby")
public class Hobby {private String hobbyId;private Set<Contact> contacts = new HashSet<Contact>();public Hobby() {}public Hobby(String hobbyId) {this.hobbyId = hobbyId;}public Hobby(String hobbyId, Set<Contact> contacts) {this.hobbyId = hobbyId;this.contacts = contacts;}@Id@Column(name = "HOBBY_ID")public String getHobbyId() {return this.hobbyId;}public void setHobbyId(String hobbyId) {this.hobbyId = hobbyId;}@ManyToMany@JoinTable(name = "contact_hobby_detail", joinColumns = @JoinColumn(name = "HOBBY_ID"), inverseJoinColumns = @JoinColumn(name = "CONTACT_ID"))public Set<Contact> getContacts() {return this.contacts;}public void setContacts(Set<Contact> contacts) {this.contacts = contacts;} }
在清單2和3中,注意到Contact和Hobby類之間存在多對多關系。

數據庫架構

在本教程中,我們將使用H2內存數據庫。 有3個表:

  • 聯系人:該表存儲聯系人信息
  • HOBBY:該表存儲可用于該應用程序的興趣愛好列表
  • CONTACT_HOBBY_DETAIL:對Contact和Hobby類之間的多對多關系進行建模
清單4和5分別顯示了數據庫模式創建腳本和測試數據填充腳本的內容。

清單4 –數據庫模式創建腳本(schema.sql)

DROP TABLE IF EXISTS CONTACT;CREATE TABLE CONTACT (ID INT NOT NULL AUTO_INCREMENT,FIRST_NAME VARCHAR(60) NOT NULL,LAST_NAME VARCHAR(40) NOT NULL,BIRTH_DATE DATE,VERSION INT NOT NULL DEFAULT 0,UNIQUE UQ_CONTACT_1 (FIRST_NAME, LAST_NAME),PRIMARY KEY (ID)
);CREATE TABLE HOBBY (HOBBY_ID VARCHAR(20) NOT NULL,PRIMARY KEY (HOBBY_ID)
);CREATE TABLE CONTACT_HOBBY_DETAIL (CONTACT_ID INT NOT NULL,HOBBY_ID VARCHAR(20) NOT NULL,PRIMARY KEY (CONTACT_ID, HOBBY_ID),CONSTRAINT FK_CONTACT_HOBBY_DETAIL_1 FOREIGN KEY (CONTACT_ID)REFERENCES CONTACT (ID) ON DELETE CASCADE,CONSTRAINT FK_CONTACT_HOBBY_DETAIL_2 FOREIGN KEY (HOBBY_ID)REFERENCES HOBBY (HOBBY_ID)
);

清單5 –測試數據填充腳本(test-data.sql)

insert into contact (first_name, last_name, birth_date) values ('Clarence', 'Ho', '1980-07-30');
insert into contact (first_name, last_name, birth_date) values ('Scott', 'Tiger', '1990-11-02');insert into hobby (hobby_id) values ('Swimming');
insert into hobby (hobby_id) values ('Jogging');
insert into hobby (hobby_id) values ('Programming');
insert into hobby (hobby_id) values ('Movies');
insert into hobby (hobby_id) values ('Reading');insert into contact_hobby_detail(contact_id, hobby_id) values (1, 'Swimming');
insert into contact_hobby_detail(contact_id, hobby_id) values (1, 'Movies'); 
insert into contact_hobby_detail(contact_id, hobby_id) values (2, 'Swimming');

服務層

在服務層中,存在2個接口:

  • ContactService:提供用于訪問聯系信息的服務
  • HobbyService:提供用于訪問愛好信息的服務

清單6和7分別顯示了ContactService和HobbyService接口。

清單6 – ContactService接口

public interface ContactService {public List<Contact> findAll();public Contact findById(Long id);public Contact save(Contact contact);}

清單7 – HobbyService接口

public interface HobbyService {public List<Hobby> findAll();}

彈簧配置

讓我們看一下Spring配置。 清單8顯示了數據源,事務和JPA配置。

清單8 – Spring JPA配置(datasource-tx-jpa.xml)

<!--Tomcat JDBC connection pool configutation -->
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"><property name="driverClassName" value="org.h2.Driver" /><property name="url" value="jdbc:h2:mem:testdb" /><property name="username" value="sa" /><property name="password" value="" />
</bean><!--Intialize the database schema with test data -->
<jdbc:initialize-database data-source="dataSource"><jdbc:script location="classpath:schema.sql"/><jdbc:script location="classpath:test-data.sql"/>
</jdbc:initialize-database><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="emf"/>
</bean><tx:annotation-driven transaction-manager="transactionManager" /><bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource" /><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/></property><property name="packagesToScan" value="com.skywidesoft.tomcat.dbcp.tutorial.domain"/><property name="jpaProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop><prop key="hibernate.max_fetch_depth">3</prop><prop key="hibernate.jdbc.fetch_size">50</prop><prop key="hibernate.jdbc.batch_size">10</prop><prop key="hibernate.show_sql">true</prop></props></property>
</bean>?<context:annotation-config/><!--Spring Data JPA Repository Configuration -->
<jpa:repositories base-package="com.skywidesoft.tomcat.dbcp.tutorial.repository"entity-manager-factory-ref="emf"transaction-manager-ref="transactionManager"/>

下面列出了清單8中配置的一些要點:

  • 對于dataSource bean,使用org.apache.tomcat.jdbc.pool.DataSource類為基礎連接提供JDBC DataSource接口。 您將看到配置與使用commons-dbcp基本上相同。
  • <jdbc:initialize-database>標記是Spring 3.1對使用數據庫架構和測試數據初始化數據庫的支持
  • <jpa:repositories>標記用于配置Spring Data JPA的存儲庫抽象。

清單9顯示了Spring應用程序上下文配置。

清單9 – Spring應用程序上下文(app-context.xml)

<import resource="classpath:datasource-tx-jpa.xml"/><context:component-scan base-package="com.skywidesoft.tomcat.dbcp.tutorial.service.jpa"/>

Spring Data JPA存儲庫抽象

Spring Data JPA的存儲庫抽象為開發基于JPA的數據訪問應用程序提供了一種簡化的方法。 有關詳細信息,請訪問項目網站 。 存儲庫抽象層是使用Java界面開發的。 清單10和11分別顯示了ContactRepository和HobbyRepository接口的代碼清單。

清單10 – ContactRepository接口

public interface ContactRepository extends CrudRepository<Contact, Long>{}

清單11 – HobbyRepository接口

public interface HobbyRepository extends CrudRepository<Hobby, String>{}

請注意,該接口只是擴展了Spring Data Common的CrudRepository <T,ID>接口,該接口已經提供了常見的數據訪問操作(例如findAll,findOne,保存,刪除等)。

JPA實施類

下一步是開發清單6和7中的服務層接口的JPA實現。這些類采用Spring Framework的注解用于Spring bean聲明,依賴項的自動裝配和事務需求等。清單12和13顯示了ContactServiceImpl和HobbyServiceImpl類。

清單12 – ContactServiceImpl類

@Service("contactService")
@Repository
@Transactional
public class ContactServiceImpl implements ContactService {final static Logger logger = LoggerFactory.getLogger(ContactServiceImpl.class);@Autowiredprivate ContactRepository contactRepository;@Transactional(readOnly=true)public List<Contact> findAll() {logger.info("Finding all contacts");return Lists.newArrayList(contactRepository.findAll());}@Transactional(readOnly=true)public Contact findById(Long id) {return contactRepository.findOne(id);}public Contact save(Contact contact) {return contactRepository.save(contact);}}

清單13 – HobbyServiceImpl類

@Service("hobbyService")
@Repository
@Transactional
public class HobbyServiceImpl implements HobbyService {@Autowiredprivate HobbyRepository hobbyRepository;@Transactional(readOnly=true)public List<Hobby> findAll() {return Lists.newArrayList(hobbyRepository.findAll());}}

測試中

讓我們看看實際的應用程序。 清單14顯示了ContactServiceTest類,該類僅從app-context.xml文件中引導Spring應用程序上下文,查找contactService bean,并調用findAll操作以從數據庫中檢索所有聯系人。

清單14 – ContactServiceTest類

public class ContactServiceTest {public static void main(String[] args) {GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();ctx.load("classpath:app-context.xml");ctx.refresh();ContactService contactService = ctx.getBean("contactService", ContactService.class);List<Contact> contacts = contactService.findAll(); for (Contact contact: contacts) {System.out.println(contact);}  }}
運行上面的類將在控制臺輸出窗口中產生以下輸出(省略了其他不相關的輸出):

2012-05-25 13:35:43,552 INFO [com.skywidesoft.tomcat.dbcp.tutorial.service.jpa.ContactServiceImpl] -
<Finding all contacts>
contact0_.BIRTH_DATE as BIRTH2_0_, contact0_.FIRST_NAME as FIRST3_0_,

從上面的輸出中,您可以看到從數據庫中正確檢索了由test-data.sql腳本填充的聯系信息。

結論

本教程介紹了如何在獨立的Java應用程序中使用Tomcat的JDBC連接池。 Tomcat的JDBC連接池替代了commons-dbcp連接池,提供了更快,功能更豐富的JDBC連接池解決方案。 它的簡潔設計,高性能,對高度并發環境的支持以及多核/ cpu系統使其成為Tomcat Web容器和獨立Java應用程序環境中的JDBC連接池提供程序的極具吸引力的選擇。

下載完整的Eclipse Maven Project 。

參考:來自我們的W4G合作伙伴 Clarence Ho的 獨立Java應用程序中的Tomcat JDBC連接池使用

Clarence Ho是APress的Pro Spring 3的主要作者。 借助Pro Spring 3 ,您將學習Spring的基礎知識和核心主題,并獲得作者關于遠程處理, Hibernate和EJB的見解和實際經驗。 除了基礎知識之外,您還將學習如何利用Spring框架構建企業Java應用程序的各個層或部分,例如事務,Web和表示層,部署等。 完整的示例應用程序使您可以應用本書中介紹的許多技術,并了解它們如何協同工作。

APress已為Java Code Geeks的讀者提供了優惠券代碼。 優惠券代碼為: SPR76 ,有效期至20127月6日 。 該代碼僅可從apress.com獲得40%的電子書折扣


翻譯自: https://www.javacodegeeks.com/2012/06/using-tomcat-jdbc-connection-pool-in.html

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

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

相關文章

Python之路【目錄】 2

http://www.cnblogs.com/wupeiqi/articles/4938499.html轉載于:https://www.cnblogs.com/cp-miao/p/5750211.html

vs2019 缺android sdk,VS2019由于缺少NuGet Microsoft.NET.Sdk.Functions程序包而無法加載項目,但也無法添加此程序包(示例代碼)...

我在解決方案中擁有的一個項目未在VSE2019中加載。它將引發此錯誤&#xff1a;C:MyProgramsrcMyProgram.Functions.csproj : error : The project file cannot be opened by the project system, because it is missing some critical imports or the referenced SDK cannot be…

數據庫事物操作

事務 什么是事務?轉賬&#xff1a;1. 給wc賬戶減1000元2. 給wcxf賬戶加1000元 當給wc賬戶減1000元后&#xff0c;拋出了異常&#xff01;這會怎么樣呢&#xff1f;我相信從此之后&#xff0c;wc再也不敢轉賬了。 使用事務就可以處理這一問題&#xff1a;把多個對數據庫的操作綁…

通過OpenShift超越云技術

您是否厭倦了為您的應用程序請求新的開發機器&#xff1f; 您是否為應用程序設置新的測試環境感到煩惱&#xff1f; 您是否只想專注于和平開發應用程序而不會一直“沉迷于堆棧”&#xff1f; 我們聽到你的聲音。 我們也去過那里。 不用擔心&#xff0c;OpenShift就在這里&#…

android+4.4+穩定性,新系統新UI!臺電A10h四核安卓4.4.2性能測試

國內著名商標&#xff0c;數碼用戶首選品牌的臺電科技在12月20日全國首發了安卓4.4.2系統&#xff0c;并且運行臺電全新tUI同時&#xff0c;支持從安卓4.2系統OTA一鍵升級至安卓4.4.2系統&#xff01;作為國內首款升級到目前全球最新的Android4.4.2系統之后&#xff0c;整體性能…

網絡知識點小結

VMware虛擬機三種聯網方法及原理一、Brigde——橋接&#xff1a;默認使用VMnet0 1、原理&#xff1a; Bridge 橋"就是一個主機&#xff0c;這個機器擁有兩塊網卡&#xff0c;分別處于兩個局域網中&#xff0c;同時在"橋"上&#xff0c;運行著程序&#xff0c;讓…

在JUnit中超越核心Hamcrest

在通過JUnit和Hamcrest改進對assertEquals的文章中&#xff0c;我介紹了將Hamcrest與JUnit一起使用 。 然后&#xff0c;我查看了JUnit的內置Hamcrest Core Matcher支持 。 在本文中&#xff0c;我將介紹如何將Hamcrest的非核心匹配器與JUnit一起應用。 這些非核心匹配器默認情…

4pics1word android,4 Pics 1 Word

4 Pics 1 Word是一款非常有意思的看圖猜詞游戲&#xff0c;這款游戲中會給我們四張圖片&#xff0c;玩家需要通過圖片給出的信息來猜出是哪個詞&#xff0c;看西西的介紹你可能以為這是一款千篇一律的看圖猜詞游戲&#xff0c;不過這里猜的不是中文而是英語單詞。4 Pics 1 Word…

頁面內錨點定位及跳轉方法總結

接著上一篇&#xff0c;其實是一個功能&#xff0c;本來感覺挺簡單的一個問題&#xff0c;沒想到遇到兩個坎兒&#xff0c;無語。。。 上一篇是關于scroll事件綁定的問題&#xff0c;這一篇的問題是&#xff1a;點擊錨點跳轉到相應DIV的問題。 最簡單的方法是錨點用<a>標…

基于android的水稻葉片特征測量系統,基于Android的水稻葉片特征參數測量系統

基于Android的水稻葉片特征參數測量系統路艷1&#xff0c;肖志勇2&#xff0c;3&#xff0c;楊紅云2&#xff0c;3*&#xff0c;周瓊1&#xff0c;孫玉婷1【摘要】摘要&#xff1a;【目的】提供基于Android的水稻葉片特征參數測量系統&#xff0c;為農學研究提供精準數據。【方…

JAVA學習繪圖顏色及其筆畫屬性設置字體顯示文字

package com.graphics;import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date;import javax.swing.*;/*** * author biexiansheng**/ public class DrawString extends JFrame{private Shape rect;//矩形對象private Font font;//字體對象private Date …

lightoj 1044 - Palindrome Partitioning(需要優化的區間dp)

題目鏈接&#xff1a;http://lightoj.com/volume_showproblem.php?problem1044 題意&#xff1a;求給出的字符串最少能分成多少串回文串。 一般會想到用區間dp暴力3個for但是這里的數據有1000&#xff0c;3個for肯定超時的。 但是這題只是判斷回文串有多少個所以可以先預處理一…

對JavaFX Mobile應用程序進行性能分析

注意&#xff1a;本文最初發表于2009年&#xff0c;僅供參考。 請查閱我們其余的JavaFX文章 。 對于每個JavaFX Mobile應用程序開發人員來說&#xff0c;今天都是美好的一天。 你想知道為什么嗎&#xff1f; 因為JavaME SDK 3.0已發布。 根據我午休時聽到的消息&#xff0c;這是…

第六天20160810

a) 形參與實參 一、 形參為基本數據類型&#xff1a;形參改變&#xff0c;實參不變。 二、 形參為引用數據類型&#xff1a;形參改變&#xff0c;實參通常都會改變。 b) 可變長參數&#xff1a;JDK1.5開始出現 一、可變長參數只能用于…

android原生系統開發板,安卓學習必備開發板-Rayeager PX2

由谷歌主導并推動的移動終端操作系統Android&#xff0c;由于其開源開放的特性&#xff0c;自發布之日起便受到全球各大IT廠商的歡迎。在各廠商的熱情推動下&#xff0c;基于Android系統的手機、平板、智能手表等各類產品層出不窮&#xff0c;迅速普及到人們的日常生活&#xf…

變量類型取值范圍

ascii&#xff1a;Oct Dec Hex Char──────────────────────────101 65 41 A102 66 42 B103 67 43 C141 97 61 a142 98 62 b143 99 63 c 取值范圍&#xff1a;-1 ~ 0xFFFFFFFF ~ 全1127 ~ 0x7F255 ~ 0xFF ~ 11111111 char -128 ~ 127 …

熱點中的即時編譯器(JIT)

即時編譯器&#xff08;JIT&#xff09;的概念以及更廣泛的自適應優化是除Java&#xff08;.Net&#xff0c;Lua&#xff0c;JRuby&#xff09;之外的許多語言中眾所周知的概念。 為了解釋什么是JIT編譯器&#xff0c;我想先定義一個編譯器概念。 根據維基百科&#xff0c;編譯…

3.30下午

在另一臺機子安裝VMware workstation12和win8服務器 總是秘鑰不行 很煩轉載于:https://www.cnblogs.com/bgd140206314/p/6647159.html

Java并發性-任務反饋

從我 上一篇 關于java.util.concurrent包的 文章 的結尾處 摘下來 &#xff0c;這很有趣&#xff0c;有時甚至必須在并發任務啟動后從它們那里獲得反饋。 例如&#xff0c;假設一個應用程序必須發送電子郵件批處理&#xff0c;除了使用多線程機制外&#xff0c;您還想知道成功發…

JS中的函數(二):函數參數(你可能不知道的參數傳遞)

前言&#xff1a; 函數分為有參有返回值&#xff0c;有參無返回值&#xff0c;無參無返回值&#xff0c;無參有返回值&#xff1b;那么對于無參數的函數你想使用函數的調用怎么辦呢&#xff1f;如果你想封裝一個代碼&#xff0c;實現多種功能&#xff0c;但是形參大于實參或者實…