慕課網Hibernate初探之一對多映射實驗及總結

来源:http://www.cnblogs.com/Renyi-Fan/archive/2017/06/03/6936076.html
-Advertisement-
Play Games

慕課網Hibernate初探之一對多映射實驗及總結 一、本課核心 * 1、如何在MyEclipse中使用Hibernate * 2、如何實現Hibernate中一對多的映射 * 3、如何創建Session對象 * 4、Hibernate如何使用增刪改查 1、如何在MyEclipse中使用Hibern ...


慕課網Hibernate初探之一對多映射實驗及總結

一、本課核心

* 1、如何在MyEclipse中使用Hibernate
* 2、如何實現Hibernate中一對多的映射
* 3、如何創建Session對象
* 4、Hibernate如何使用增刪改查

1、如何在MyEclipse中使用Hibernate

* Hibernat框架創建
* MyEclipse2016 CI 7版本
* Hibernate release-5.2.10.Final
* 方法一:自動創建
* 1、新建一個Java項目
* 2、右擊項目,選擇myeclipse,選擇hibernate支持Project Facets[Capabilities]
* 3、然後點下一步就給你創建好了
*
* 方法二:手動創建
* 1、將需要的hibernate包以及MySql的jdbc添加並創建好路徑(hibernate中lib中的required文件夾中的所有包)
* 2、在hebernate解壓縮包下進行檢索cfg.xml,找到配置文件
* 3、修改配置文件
* 4、在MyEclipse中創建sql文件
* 5、創建持久化類,也就是對應的實體類
* 6、創建映射文件,也可以在hebernate解壓縮包下進行檢索hbm.xml,拷到實體包下

 

2、如何實現Hibernate中一對多的映射

 1     //在一方(班級)去定義一個多方(學生)的集合來表示一對多的關係
 2     //set集合元素不能重覆
 3     private Set<Student> students = new HashSet<Student>();
 4     /*
 5      * 總結:
 6      * 一對多映射的核心:
 7      * 通過在grade中添加student的集合來實現
 8      * 1、grade裡面的這個集合類,需要映射的時候給這個類裡面加學生
 9      * 2、grade這個類對應的映射文件中的
10      * <!-- 配置單向的一對多關聯關係 -->
11         <set name="students" table="students">
12             <!-- 指定關聯的外鍵列 -->
13             <key > 
14                 <column name="gid"></column>
15             </key>
16             <!-- 指定一對多的類名 -->
17             <one-to-many class="com.imooc.entity.Student" />
18         </set>
19      */

 

3、如何創建Session對象

* 創建會話,四步:
* 1、建立配置文件對象,處理我們寫的那些配置文件,包括資料庫配置文件和映射文件
* 2、開啟Hibernate服務,就像我們生活中用什麼東西要開啟什麼樣的服務一樣,而且要註冊
* 3、創建會話工廠
* 4、創建會話

1         //創建配置對象
2 Configuration config = new Configuration().configure();
3         //創建服務註冊對象
4 ServiceRegistry serviceRegistry =  new 
5                 StandardServiceRegistryBuilder().applySettings(config.getProperties()).configure().build();//這裡有點不一樣
6         //創建會話工廠對象
7 sessionFactory = config.buildSessionFactory(serviceRegistry);
8 session = sessionFactory.openSession();

 

4、Hibernate如何使用增刪改查

Session使用:save():(增) delete():(刪) update():(改) get()/load():(查)

 

二、實例代碼

1、資料庫配置文件:hibernate.cfg.xml

 1 <!--
 2   ~ Hibernate, Relational Persistence for Idiomatic Java
 3   ~
 4   ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 5   ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 6   -->
 7 <!DOCTYPE hibernate-configuration PUBLIC
 8         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 9         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
10 
11 <hibernate-configuration>
12     <session-factory>
13         <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
14         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
15         <property name="hibernate.connection.username">root</property>
16         <property name="hibernate.connection.password">1314</property>
17         <property name="hibernate.connection.url">
18             <![CDATA[
19                 jdbc:mysql://localhost:3306/Hibernate2?useUnicode=true&characterEncoding=utf8
20             ]]>
21         </property>
22         
23         <property name="show_sql">true</property>
24         <property name="hbm2ddl.auto">update</property>
25         
26         <!-- 指定映射文件的路徑 -->
27         <mapping resource="Grade.hbm.xml" />
28         <mapping resource="Student.hbm.xml" />
29         
30         
31     </session-factory>
32 </hibernate-configuration>

2、實體類一Student.java

 1 package com.imooc.entity;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Student implements Serializable {
 6     private int sid; //學生id
 7     private String sname; //學生姓名
 8     private String sex; //性別
 9     
10     //構造函數
11     
12     public Student() {
13         super();
14     }
15     
16     
17     public Student(String sname, String sex) {
18         super();
19         this.sname = sname;
20         this.sex = sex;
21     }
22 
23 
24     public int getSid() {
25         return sid;
26     }
27     
28     public void setSid(int sid) {
29         this.sid = sid;
30     }
31     public String getSname() {
32         return sname;
33     }
34     public void setSname(String sname) {
35         this.sname = sname;
36     }
37     public String getSex() {
38         return sex;
39     }
40     public void setSex(String sex) {
41         this.sex = sex;
42     }
43     
44     
45 }

3、Student類對應的映射文件 Student.hbm.xml

 1 <?xml version="1.0"?>
 2 
 3 <!DOCTYPE hibernate-mapping PUBLIC
 4     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 5     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 6     
 7 <!-- 配置的是學生到班級的單向的一對多 -->
 8 <hibernate-mapping>
 9     <class name="com.imooc.entity.Student" table="student">
10     <!-- name是類名,table是那麼對應的類對應的資料庫中的表名 -->
11     <!-- id是主鍵 -->
12         <id name="sid" type="java.lang.Integer">
13             <column name="sid"></column>
14             <generator class="increment"></generator> 
15             <!-- generator是主鍵生成策略 increment查找主鍵最大值,並且在最大值的基礎上加1 -->
16         </id>
17         <property name="sname" type="java.lang.String">
18             <column name="sname" length="20" not-null="true"></column>
19         </property>
20         <property name="sex">
21             <column name="sex"></column>
22         </property>
23         
24     </class>
25     
26 </hibernate-mapping>

4、班級實體類 Grade.java

 1 package com.imooc.entity;
 2 
 3 import java.io.Serializable;
 4 import java.util.HashSet;
 5 import java.util.Set;
 6 
 7 //班級類
 8 //添加集合表示一對多的關係
 9 public class Grade implements Serializable {
10     private int gid; //班級id
11     private String gname; //班級名
12     private String gdesc; //班級描述
13     
14     //在一方(班級)去定義一個多方(學生)的集合來表示一對多的關係
15     //set集合元素不能重覆
16     private Set<Student> students = new HashSet<Student>();
17     /*
18      * 總結:
19      * 一對多映射的核心:
20      * 通過在grade中添加student的集合來實現
21      * 1、grade裡面的這個集合類,需要映射的時候給這個類裡面加學生
22      * 2、grade這個類對應的映射文件中的
23      * <!-- 配置單向的一對多關聯關係 -->
24         <set name="students" table="students">
25             <!-- 指定關聯的外鍵列 -->
26             <key > 
27                 <column name="gid"></column>
28             </key>
29             <!-- 指定一對多的類名 -->
30             <one-to-many class="com.imooc.entity.Student" />
31         </set>
32      */
33     
34     //構造方法
35     public Grade(int gid, String gname, String gdesc, Set<Student> students) {
36         super();
37         this.gid = gid;
38         this.gname = gname;
39         this.gdesc = gdesc;
40         this.students = students;
41     }
42 
43     
44     public Grade(String gname, String gdesc) {
45         super();
46         this.gname = gname;
47         this.gdesc = gdesc;
48     }
49 
50 
51     public Grade() {
52         super();
53     }
54     
55     
56     
57 
58     public int getGid() {
59         return gid;
60     }
61 
62 
63 
64     public void setGid(int gid) {
65         this.gid = gid;
66     }
67 
68     public String getGname() {
69         return gname;
70     }
71 
72     public void setGname(String gname) {
73         this.gname = gname;
74     }
75 
76     public String getGdesc() {
77         return gdesc;
78     }
79 
80     public void setGdesc(String gdesc) {
81         this.gdesc = gdesc;
82     }
83 
84     public Set<Student> getStudents() {
85         return students;
86     }
87 
88     public void setStudents(Set<Student> students) {
89         this.students = students;
90     }
91     
92     
93 }

5、班級實體類對應的映射文件 Grade.hbm.xml

 1 <?xml version="1.0"?>
 2 
 3 <!DOCTYPE hibernate-mapping PUBLIC
 4     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 5     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 6     
 7 <hibernate-mapping>
 8 
 9     <class name="com.imooc.entity.Grade" table="grade">
10     <!-- name是類名,table是那麼對應的類對應的資料庫中的表名 -->
11     <!-- id是主鍵 -->
12         <id name="gid"  type="java.lang.Integer">
13             <column name="gid"></column>
14             <generator class="increment"></generator> 
15             <!-- generator是主鍵生成策略 increment查找主鍵最大值,並且在最大值的基礎上加1 -->
16         </id>
17         <property name="gname" type="java.lang.String">
18             <column name="gname" length="20" not-null="true"></column>
19         </property>
20         <property name="gdesc">
21             <column name="gdesc"></column>
22         </property>
23         <!-- 配置單向的一對多關聯關係 -->
24         <set name="students" table="students">
25             <!-- 指定關聯的外鍵列 -->
26             <key > 
27                 <column name="gid"></column>
28             </key>
29             <!-- 指定一對多的類名 -->
30             <one-to-many class="com.imooc.entity.Student" />
31         </set>
32         
33     </class>
34     
35 </hibernate-mapping>

6、獲取session的工具類:HibernateUtil.java

 1 package com.imooc.util;
 2 
 3 /*
 4  * 總結:
 5  * 創建會話,四步:
 6  * 1、建立配置文件對象,處理我們寫的那些配置文件,包括資料庫配置文件和映射文件
 7  * 2、開啟Hibernate服務,就像我們生活中用什麼東西要開啟什麼樣的服務一樣,而且要註冊
 8  * 3、創建會話工廠
 9  * 4、創建會話
10  */
11 import org.hibernate.Session;
12 import org.hibernate.SessionFactory;
13 import org.hibernate.boot.registry.StandardServiceRegistry;
14 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
15 import org.hibernate.cfg.Configuration;
16 import org.hibernate.service.ServiceRegistry;
17 
18 //工具類,用來進行會話的獲取和關閉
19 public class HibernateUtil {
20     private static SessionFactory sessionFactory;
21     private static Session session;
22 
23     //通過靜態代碼塊來載入
24     static{
25         //創建Configuration對象,讀取hibernate.cfg.xml文件,完成初始化
26         //        Configuration config = new Configuration().configure();
27         //        StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().
28         //                applySettings(config.getProperties());
29         //        StandardServiceRegistry ssr = ssrb.build();
30         //        sessionFactory=config.buildSessionFactory(ssr);
31         //創建配置對象
32         Configuration config = new Configuration().configure();
33         //創建服務註冊對象
34         ServiceRegistry serviceRegistry =  new 
35                 StandardServiceRegistryBuilder().applySettings(config.getProperties()).configure().build();//這裡有點不一樣
36         //創建會話工廠對象
37         sessionFactory = config.buildSessionFactory(serviceRegistry);
38         
39         /*
40          * 總結:
41          * 創建會話,四步:
42          * 1、建立配置文件對象,處理我們寫的那些配置文件,包括資料庫配置文件和映射文件
43          * 2、開啟Hibernate服務,就像我們生活中用什麼東西要開啟什麼樣的服務一樣,而且要註冊
44          * 3、創建會話工廠
45          * 4、創建會話
46          */
47     }
48 
49     //獲取sessionFactory
50     public static SessionFactory getSessionFactory(){
51         return sessionFactory;
52     }
53 
54     //獲取Session
55     public static Session getSession(){
56         session = sessionFactory.openSession();
57         return session;
58     }
59 
60     //關閉Session
61     public static void closeSession(Session session){
62         if (session!=null) {
63             session.close();
64         }
65     }
66 
67 }

7、測試功能類,測試增刪改查:Test.java

  1 /*
  2  * 一定要主要總結啊,要把學到的東西變成自己的東西
  3  * 其實Hibernate說難也難,說簡單也簡單,兩步:
  4  * 1、成功獲取Session對象的環境搭建
  5  * 2、Session使用:save():(增) delete():(刪) update():(改) get()/load():(查)
  6  * 
  7  * 這一次課的核心:
  8  * 1、如何在MyEclipse中使用Hibernate
  9  * 2、如何實現Hibernate中一對多的映射
 10  * 3、如何創建Session對象
 11  * 4、如何使用增刪改查
 12  * 
 13  */
 14 package com.imooc.entity;
 15 /*
 16  * 錯誤一:
 17  * 出現錯誤:Dialect不對
 18  * 解決方法:把配置文件方言改成org.hibernate.dialect.MySQL5InnoDBDialect就好
 19  * 錯誤二:
 20  * 出現錯誤:org.hibernate.MappingException: Unknown entity: com.imooc.entity.Grade
 21  * 錯誤分析:映射文件錯誤,根本就沒有成功讀取Grade的映射文件
 22  *              將配置文件中的添加實體映射刪掉,報的錯誤一樣,說明錯誤是這裡或之前
 23  *              修改這之前的,出現新的錯誤,說明錯誤就在這裡
 24  *              既然是報錯找不到com.imooc.entity.Grade,我把所有出現這個的地方都改下,查到底是那裡錯句
 25  *              錯誤提示session.save(g);這一句是錯的,註釋掉之後出現沒有學生實體類的錯誤
 26  *              說明兩個映射文件根本都沒有加進去
 27  *              com.imooc.entity.Grade這個包名是我在test裡面引包,其實就是session沒有找到Grade實體
 28  *              待會去用eclipse試一下
 29  * 解決方法:還是生產session會話那裡有問題,用之前的eclipse裡面hibernate生成會話的方式就解決了
 30  *              還是因為hibernate的版本和他的版本不一樣,用的hibernate裡面的required也不一樣
 31  * 解決心得:其實這種看視頻,真的要用的軟體、包、工具和他一模一樣才好
 32  *              仔細分析,找錯還是挺好找的
 33  */
 34 
 35 
 36 import java.util.Set;
 37 
 38 import org.hibernate.Hibernate;
 39 import org.hibernate.Session;
 40 import org.hibernate.Transaction;
 41 
 42 import com.imooc.util.HibernateUtil;
 43 
 44 /*
 45  * 單向一對多關係
 46  * (班級--->學生)
 47  * 建立關聯關係後,可以方便的從一個對象導航到另一個對象
 48  * 註意關聯的關係
 49  */
 50 public class Test {
 51     public static void main(String[] args){
 52         //add();
 53         //findStudentsByGrade();
 54         //update();
 55         delete();
 56     }
 57 
 58     //將學生添加到班級
 59     /*
 60      * 方法測試對應的輸出結果:
 61      * 
 62 Hibernate: select max(gid) from grade
 63 Hibernate: select max(sid) from student
 64 Hibernate: insert into grade (gname, gdesc, gid) values (?, ?, ?)
 65 Hibernate: insert into student (sname, sex, sid) values (?, ?, ?)
 66 Hibernate: insert into student (sname, sex, sid) values (?, ?, ?)
 67 Hibernate: update student set gid=? where sid=?
 68 Hibernate: update student set gid=? where sid=?
 69      *
 70      *
 71      */
 72     public static void add(){
 73         Grade g = new Grade("Java一班","Java軟體開發一班");
 74         Student stu1 = new Student("張三","男");
 75         Student stu2 = new Student("穆女神","女");
 76 
 77         //將這兩個學生添加到班級中
 78         //如果希望在學生表中添加對應的班級編號,需要在班級中添加學生,建立關聯關係
 79         g.getStudents().add(stu1); //set集合students集合彙總添加,是Grade中的屬性
 80         g.getStudents().add(stu2);
 81 
 82         //得到會話
 83         Session session = HibernateUtil.getSession();
 84         //開啟事務
 85         Transaction tx = (Transaction) session.beginTransaction();
 86         //保存班級,學生
 87         session.save(g);
 88         session.save(stu1);
 89         session.save(stu2);
 90         //提交事務
 91         tx.commit();
 92         //關閉session
 93         HibernateUtil.closeSession(session);
 94         /*
 95          * 總結:
 96          * 1、新建班級對象和學生對象
 97          * 2、將學生對象加入班級對象屬性中的學生集合中
 98          * 3、調用Session對象保存班級對象和學生對象
 99          * save學生對象是把學生信息添加到學生表中
100          * save班級對象是把班級信息添加到班級表中
101          * 將學生對象加入班級對象屬性中的學生集合中:其實是為了和映射文件一起完成主外鍵的連接
102          * 
103          */
104     }
105 
106     //查詢班級中包含的學生,根據班級獲取對應的信息
107     /*
108      * 方法測試對應的輸出結果:
109      * Hibernate: select grade0_.gid as gid1_0_0_, grade0_.gname as gname2_0_0_, grade0_.gdesc as gdesc3_0_0_ from grade grade0_ where grade0_.gid=?
110      * Java一班,Java軟體開發一班
111      * Hibernate: select students0_.gid as gid4_1_0_, students0_.sid as sid1_1_0_, students0_.sid as sid1_1_1_, students0_.sname as sname2_1_1_, students0_.sex as sex3_1_1_ from student students0_ where students0_.gid=?
112      * 穆女神,女
113      * 張三,男
114      */
115     public static void findStudentsByGrade(){
116         //1、建立會話
117         Session session=HibernateUtil.getSession();
118         //2、通過session從資料庫取出班級消息
119         Grade grade= session.get(Grade.class, 1);
120         System.out.println(grade.getGname()+","+grade.getGdesc());
121         //3、從班級消息中取出學生消息,其實就已經達到目的了
122         Set<Student> students=grade.getStudents();
123         //4、for遍歷輸出學生的消息
124         for (Student student : students) {
	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 完成效果: 解釋: 主視窗是MDI視窗,視窗中有子視窗,子視窗中控制項有 樹形圖treeview、panel控制項、listview控制項(這是一個視窗中的listview)、butten控制項。 功能: 單擊樹形圖中的”員工管理“ panel中會顯示listview數據 其他功能暫時沒寫。。。。。。 主窗 ...
  • ASP.NET Core 應用程式發佈命令: 發佈示例命令(生成在 目錄下): 上面命令並沒有指定 發佈,什麼意思呢?比如 ASP.NET Core 應用程式中的 配置,測試環境和生產環境配置並不相同(比如資料庫連接字元串),如果用上面的發佈命令,我們還需要手動拷貝下不同環境的 文件,以後要更改了, ...
  • 源碼支持QQ 1039318332 源碼地址:http://git.oschina.net/sunzewei/EIP 一、更新記錄1、更新日期:2017-02-24 00:00:002、更新內容: 版本升級:V2.0 1、支持多資料庫,可在實體類指定具體操作資料庫,可實現系統分庫操作 2、重新整理架 ...
  • 本章和大家分享的內容是使用Signal R框架創建個簡易的群聊功能,主要講解如何在.Net的MVC中使用這個框架,由於這個項目有官方文檔(當然全英文),後面也不打算寫分享篇了,主要目的是讓朋友們在需要使用Web實時通信的時候有更多一種解決方案,畢竟這是微軟主推的一種解決方案之一。 SignalR網上 ...
  • NuGet包地址: https://www.nuget.org/packages/OYMLCN.WeChat.Core 由於來的OYMLCN.WeChat存在深度封裝,並沒有做完整的測試,對於使用不友好,現已重新構建SDK的接收消息被動回覆模塊。 現已做到最大程度的簡易化及模塊化,每個模塊都已完成單 ...
  • 回到目錄 在MVC,EF,LINQ環境里,我們經常會用到DataModel(DO)和ViewModel(VO),可能對於它們的屬性校驗我們會採用特性的方式,當然這很直觀,就連微軟的DEMO也是如些,一般是這樣的代碼 而這種設計方式給我們以後的維護帶來很多問題,具體大叔總結一下: 綜上所述,Fluen ...
  • Java基礎十二--多態是成員的特點 一、特點 1,成員變數。 編譯和運行都參考等號的左邊。 覆蓋只發生在函數上,和變數沒關係。 Fu f = new Zi();System.out.println(f.num);//是父類,答案是3 2,成員函數(非靜態)。 編譯看左邊,運行看右邊。 因為成員函數 ...
  • 頭文件algorithm中的常用函數 一、非修改性序列操作(12個) 迴圈 對序列中的每個元素執行某操作 for_each() 查找 在序列中找出某個值的第一次出現的位置 find() 在序列中找出符合某謂詞的第一個元素 find_if() 在序列中找出一子序列的最後一次出現的位置 find_end ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...