Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL और JPA का उपयोग करके स्प्रिंग बूट के साथ एक रेस्ट एपीआई कैसे बनाएं?

हेलो सब लोग! पिछले एक साल से, मैं फुल-स्टैक वेब डेवलपमेंट के लिए जावास्क्रिप्ट सीख रहा हूं। एक बदलाव के लिए, मैंने जावा - शक्तिशाली ऑब्जेक्ट ओरिएंटेड लैंग्वेज में महारत हासिल करना शुरू कर दिया।

उस स्थिति में, मुझे बैक एंड बनाने के लिए स्प्रिंग बूट नामक एक बहुत ही साफ और सुरुचिपूर्ण ढांचा मिला।

पहले, जावास्क्रिप्ट विकास में, मैंने उपयोग किया था:

  1. मोंगोज़ — Mongo DB के लिए एक ORM (ऑब्जेक्ट रिलेशनल मैपिंग)
  2. सीक्वेलाइज़ — MySQL के लिए एक ORM

जावा से संबंधित विकास के लिए, बहुत सारे ओआरएम हैं जैसे हाइबरनेट, जेपीए (जावा पर्सिस्टेंस एपीआई) और जावा ऑब्जेक्ट ओरिएंटेड क्वेरीिंग।

मैं जेपीए के साथ निर्माण करना चुनता हूं जो परंपरागत रूप से जावा अनुप्रयोगों में उपयोग किया जाता है।

यह बहुत दिलचस्प था, और इसे समाप्त होने में लगभग एक सप्ताह का समय लगा क्योंकि मुझे स्प्रिंग बूट सीखना था (इसमें बहुत सारे एनोटेशन हैं “@ ” और सीखने के लिए अन्य शानदार प्रकार की चीज़ें), जेपीए, और हाइबरनेट रास्ते में।

यह सारा जादू ज्यादातर टिप्पणियों . द्वारा किया जाता है ("@ “प्रतीक) स्प्रिंग बूट में प्रयोग किया जाता है।

एक स्प्रिंग बूट मावेन प्रोजेक्ट बनाना

आइए इस लिंक का उपयोग करके स्प्रिंग बूट मावेन प्रोजेक्ट एप्लिकेशन बनाएं।

मावेन "एक परियोजना प्रबंधन उपकरण है जिसका उपयोग निर्भरता प्रबंधन को प्रबंधित करने के लिए किया जाता है। यह बिल्कुल नोड पैकेज मैनेजर की तरह है (NPM ) जेएस विकास के माहौल में।

हमारे पास NodeJS में package.json . है निर्भरता प्रबंधन के लिए और स्प्रिंग बूट में pom.xml निर्भरता प्रबंधन के लिए।

Group में आप जो भी नाम लिखना चाहते हैं लिखें। आमतौर पर, संगठन का डोमेन नाम दाएं से बाएं लिखा जाता है।

उदाहरण के लिए हमारा डोमेन नाम www.javaAPI.com है, इसलिए समूह का नाम com.javaAPI.www हो सकता है।

फिर आर्टिफ़ैक्ट में अपने इच्छित फ़ोल्डर का नाम type टाइप करें ।

दाईं ओर, निम्नलिखित निर्भरताएँ जोड़ें:

  1. WEB - स्प्रिंग की निर्भरता का उपयोग करने के लिए (वेब ​​अनुप्रयोगों को विकसित करने के लिए इस्तेमाल किया जाने वाला स्प्रिंग बूट का पुराना ढांचा)
  2. जेपीए — जावा पर्सिस्टेंस एपीआई
  3. MYSQL

फिर "प्रोजेक्ट जेनरेट करें" पर क्लिक करें। आपको एक rar फाइल मिलेगी - इसे एक्सट्रेक्ट करें। फिर उस फोल्डर को अपने पसंदीदा IDE में खोलें।

com.rest.API . पर क्लिक करें और आपको एक ApiApplication.java मिलेगा फ़ाइल इस प्रकार है:

package com.rest.API;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
      SpringApplication.run(ApiApplication.class, args);
   }
}

यह कोड आपके सर्वर को शुरू करने के लिए पर्याप्त है। आम तौर पर स्प्रिंग बूट लोकलहोस्ट:8080 पर चलता है ।

अपने टर्मिनल में इस प्रकार टाइप करें:

एमवीएन स्प्रिंग-बूट:रन

अपने लोकलहोस्ट को वेब ब्राउज़र में पोर्ट 8080 पर चलते हुए देखें। यह खाली दिखता है क्योंकि हमने अभी तक कुछ नहीं किया है।

आइए फाइलों और उनके टैग को एक्सप्लोर करें

यदि आप pom.xml फ़ाइल पर एक नज़र डालते हैं, तो आप देख सकते हैं कि स्प्रिंग इनिशियलाइज़ जैसे MySQL, JPA, और वेब में एप्लिकेशन बनाते समय आप जो निर्भरताएँ डालते हैं, वे <निर्भर के अंदर होंगी। साइ> टैग।

सर्वर पर सेवा देने के लिए स्प्रिंग बूट एप्लिकेशन बनाने के लिए स्टार्टर और टेस्टर निर्भरताएं मूल हैं।

अब, APIApplication.java पर चलते हैं जो कि मुख्य फाइल है।

package com.rest.API;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
      SpringApplication.run(ApiApplication.class, args);
   }
}

यहां पैकेज का नाम कोड की पहली पंक्ति में है। उस पैकेज नाम का उपयोग करके, आप किसी अन्य पैकेज फ़ाइल में किसी भी वर्ग, विधि या उदाहरण को आयात कर सकते हैं।

उसके बाद, "org.springframework.boot" पैकेज से दो मॉड्यूल आयात किए जाते हैं।

  1. स्प्रिंगएप्लिकेशन
  2. स्प्रिंगबूटएप्लिकेशन

चूंकि स्प्रिंग बूट स्प्रिंग का नवीनतम एप्लिकेशन डेवलपिंग फ्रेमवर्क है, इसलिए इसे स्प्रिंग एप्लिकेशन के पैकेजों के साथ-साथ इसके विशिष्ट पैकेजों की भी आवश्यकता होती है।

उसके बाद @SpringBootApplication एनोटेशन का उपयोग किया जाता है। इस एनोटेशन में एनोटेशन होता है जिसका उपयोग स्प्रिंग में किया जाता है:

  1. @घटक - कंपाइलर को बताता है कि निम्न वर्ग एक घटक है जिसे पूरे एप्लिकेशन को संकलित करते समय शामिल किया जाना चाहिए।
  2. @ComponentScan — यह स्कैन करता है कि हम निम्नलिखित जावा क्लास में किन पैकेजों का उपयोग करने जा रहे हैं।
  3. @EnableAutoConfiguration — स्प्रिंग बूट के ऑटोकॉन्फ़िगरेशन तंत्र को स्प्रिंग बूट चलाने के लिए महत्वपूर्ण मॉड्यूल आयात करने में सक्षम बनाता है।

सर्वर पर चलने के लिए स्प्रिंग बूट एप्लिकेशन को शुरू करने के लिए ये एनोटेशन हैं।

यहाँ एक लेख है जो मैंने जावा में एनोटेशन और उनके उपयोग के बारे में लिखा है।

आइए अपने डेटा के लिए मॉडल बनाएं

आइए किसी पुस्तक के विवरण को सहेजने, पुनर्प्राप्त करने, अद्यतन करने और हटाने के लिए एक मॉडल वर्ग बनाएं।

उसके लिए, मुझे मॉडल . नाम का एक नया पैकेज बनाना होगा और उसके अंदर एक Book.java . बनाना मेरा कोड डालने के लिए कक्षा।

package com.rest.API.model;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
@Entity
@Table(name = "books")
public class Book {
    @Id
    @GeneratedValue
    private Long id;
@NotBlank
    private String book_name;
@NotBlank
    private String author_name;
@NotBlank
    private String isbn;
public Book(){
        super();
    }
public Book(Long id, String book_name, String author_name, String isbn) {
        super();
        this.id = id;
        this.book_name = book_name;
        this.author_name = author_name;
        this.isbn=isbn;
    }
public Long getId() {
        return id;
    }
public void setId(Long id) {
        this.id = id;
    }
public String getBook_name() {
        return book_name;
    }
public void setBook_name(String book_name) {
        this.book_name = book_name;
    }
public String getAuthor_name() {
        return author_name;
    }
public void setAuthor_name(String author_name) {
        this.author_name = author_name;
    }
public String getIsbn() {
        return isbn;
    }
public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
}

यहां मैं जेपीए (जावा पर्सिस्टेंस एपीआई) का उपयोग कर रहा हूं जो एक डेटाबेस में डेटा को लगातार स्टोर करने के लिए कक्षाओं और विधियों का एक संग्रह है।

@Entity — यह इंगित करने के लिए प्रयोग किया जाता है कि यह वर्ग डेटाबेस में एक इकाई बनने जा रहा है।

@टेबल - जो कुछ मान लेता है जैसे नाम आप अपनी तालिका का नाम देने जा रहे हैं

@आईडी — यह दर्शाता है कि आईडी इस तालिका के लिए प्राथमिक कुंजी/पहचान करने वाली कुंजी है

@NotBlank — यह कहने के लिए प्रयोग किया जाता है कि ये विशेषताएँ खाली नहीं होनी चाहिए।

इसके अलावा एक खाली कंस्ट्रक्टर है जिसमें जेपीए रीति-रिवाजों को पूरा करने के लिए एक सुपर विधि है। गेट्टर और सेटर विधियाँ आमतौर पर POJO वर्ग में होती हैं (सादे पुराने Java ऑब्जेक्ट )।

रिपॉजिटरी बनाना

इसके बाद, हम एक भंडार . बनाने जा रहे हैं जावा में डेटाबेस प्रबंधन से निपटने के लिए पैकेज।

BookRepository.java . नामक एक इंटरफ़ेस बनाएं भंडार . के अंदर पैकेज।

package com.rest.API.repository;
import com.rest.API.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}

मैंने JpaRepository . आयात किया है BookRepository . में उस रिपॉजिटरी का उपयोग करने के लिए पैकेज मेरे सबसे हाल ही में कोडित पुस्तक मॉडल को CRUD . करने के लिए कनेक्ट करके इंटरफ़ेस संचालन।

CRUD संचालन करने के लिए उन रिपॉजिटरी में पहले से ही अंतर्निहित तरीके हैं।

जैसे:

.findAll() - to get All datas
.save()    - to save the got Data
.delete()  - to delete the data

<> टैग के अंदर हम उस मॉडल का नाम ले रहे हैं जिसका हम उपयोग करने जा रहे हैं और प्राथमिक कुंजी का डेटाटाइप।

@Repository :डीएओ को इंगित करने के लिए प्रयुक्त एनोटेशन (डेटा एक्सेस ऑब्जेक्ट ) हठ परत में घटक।

यह संकलक को बताता है कि इंटरफ़ेस डेटाबेस गतिविधियों को करने के लिए रिपॉजिटरी का उपयोग करने जा रहा है।

नियंत्रक और अपवाद प्रबंधन बनाना

नियंत्रक, . नामक एक नया पैकेज बनाएं और उसके अंदर एक BookController.java create बनाएं फ़ाइल जिसमें अंतिम बिंदु होते हैं।

package com.rest.API.controller;

import com.rest.API.exception.BookNotFoundException;
import com.rest.API.model.Book;
import com.rest.API.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;
import javax.validation.Valid;
import java.util.List;

@RestController
public class BookController {

@Autowired
    BookRepository bookRepository;

// Get All Notes
    @GetMapping("/books")
    public List<Book> getAllNotes() {
        return bookRepository.findAll();
    }

// Create a new Note
    @PostMapping("/books")
    public Book createNote(@Valid @RequestBody Book book) {
        return bookRepository.save(book);
    }

// Get a Single Note
    @GetMapping("/books/{id}")
    public Book getNoteById(@PathVariable(value = "id") Long bookId) throws BookNotFoundException {
        return bookRepository.findById(bookId)
                .orElseThrow(() -> new BookNotFoundException(bookId));
    }

// Update a Note
    @PutMapping("/books/{id}")
    public Book updateNote(@PathVariable(value = "id") Long bookId,
                           @Valid @RequestBody Book bookDetails) throws BookNotFoundException {

Book book = bookRepository.findById(bookId)
                .orElseThrow(() -> new BookNotFoundException(bookId));

book.setBook_name(bookDetails.getBook_name());
        book.setAuthor_name(bookDetails.getAuthor_name());
        book.setIsbn(bookDetails.getIsbn());

Book updatedBook = bookRepository.save(book);

return updatedBook;
    }

// Delete a Note
    @DeleteMapping("/books/{id}")
    public ResponseEntity<?> deleteBook(@PathVariable(value = "id") Long bookId) throws BookNotFoundException {
        Book book = bookRepository.findById(bookId)
                .orElseThrow(() -> new BookNotFoundException(bookId));

bookRepository.delete(book);

return ResponseEntity.ok().build();
    }
}

पहला आयातित पैकेज बुक नॉट फाउंड अपवाद के लिए है (जिसके लिए हम थोड़ी देर में एक फाइल बनाने जा रहे हैं)।

टिप्पणियों का स्पष्टीकरण जो हमने यहां उपयोग किया है:

  1. रेस्टकंट्रोलर: इस एनोटेशन का उपयोग एनोटेट क्लास में हर विधि को डोमेन ऑब्जेक्ट के रूप में दर्शाने के लिए किया जाता है।

तो Domain Object क्या है…?

इसका सीधा सा मतलब है कि Domain Object ==Business Object.

वे आम तौर पर डेटाबेस से डेटा प्राप्त करने के लिए दिए जा रहे समापन बिंदु से संबंधित संस्थाओं और मूल्य वस्तुओं द्वारा दर्शाए जाते हैं।

2. ऑटोवायर्ड :इस एनोटेशन का उपयोग बीन कक्षाओं को स्वचालित रूप से तार करने के लिए किया जाता है।

उसके लिए, आपको “बीन क्लास क्या है..? . के बारे में जानना होगा "

मूल रूप से, जावा बीन क्लास एक साधारण वर्ग है जो इसमें कई वस्तुओं को समाहित करता है।

यह एक लेख है जिसे मैंने Java Bean Classes पर लिखा है।

सीआरयूडी संचालन करने के लिए समापन बिंदुओं के लिए मैपिंग एनोटेशन निम्नलिखित हैं।

3. गेटमैपिंग: यह एक इंटरफ़ेस . है जिसमें गेट विधि करने के लिए समापन बिंदु का पथ होता है। यह गेटमैपिंग इंटरफ़ेस RequestMapping इंटरफ़ेस का उपयोग करता है जिसमें "पथ, मान, पैराम्स, हेडर" विधि हो सकती है जो पिछले स्प्रिंग संस्करणों में गेट विधि को निष्पादित करने के लिए हो सकती है।

अब GetMapping. . का उपयोग करके इसे सरल बनाया गया है

4. पोस्टमैपिंग :यह एक इंटरफ़ेस . है जिसमें पोस्ट विधि करने के लिए समापन बिंदु का पथ शामिल है।

5. पुटमैपिंग: यह एक इंटरफ़ेस . है जिसमें पुट विधि को अपडेट करने के लिए समापन बिंदु का पथ शामिल है।

6. मैपिंग हटाएं: यह एक इंटरफ़ेस . है जिसमें डिलीट मेथड को करने के लिए एंडपॉइंट का पाथ होता है।

अंतिम पंक्तियों में, आपने शायद “ResponseEntity . पर ध्यान दिया होगा) "कीवर्ड।

वहक्या है …??

यह एक जावा वर्ग है जो HttpEntity . को इनहेरिट करता है HTTP प्रतिक्रियाओं में हेरफेर करने के लिए वर्ग। क्या कनेक्शन का अनुरोध "ठीक . है ” या यदि कोई समस्या है, तो अपवाद . फेंक दें HttpEntity . से कक्षा।

या ElseThrow(): यह एक विधि है जो Java8 में वैकल्पिक वर्ग . में पाई जाती है जिसे अपवादों को संभालने के लिए पेश किया गया था। वैकल्पिक वर्ग किसी वस्तु की उपस्थिति या अनुपस्थिति की जाँच करने के लिए विभिन्न उपयोगिता विधियाँ प्रदान करता है, जो NullPointerException से निपटने में मदद करता है।

या ElseThrow एक ऐसी विधि है जो मौजूद होने पर मान लौटाती है, अन्यथा अपवाद को आमंत्रित करती है।

यदि ऐसी कोई Book_id नहीं है तो NotFoundException बनाना

जैसा कि orElseThrow विधि एक NotFound अपवाद फेंकता है। निम्नलिखित अपवाद हैंडलिंग भाग है। एक BookNotFoundException.java बनाएं अपवाद पैकेज के अंदर फ़ाइल करें।

package com.rest.API.exception;
public class BookNotFoundException extends Exception {
private long book_id;
public BookNotFoundException(long book_id) {
        super(String.format("Book is not found with id : '%s'", book_id));
        }
}

निर्मित वर्ग अपवाद के सुपरक्लास का विस्तार करता है। कंस्ट्रक्टर में, मैं Book_id पास कर रहा हूं और अपवाद प्रिंट करता हूं।

तो, बस…

हमने REST API का भाग पूरा कर लिया है। अब आप ऐप बना सकते हैं (जिसे भाग 1 में समझाया गया था) और पोस्टमैन के साथ कुछ परीक्षण करें।

MySQL डेटाबेस से कनेक्ट करना

application.properties . के अंदर आपके संसाधनों . का फ़ोल्डर, निम्नलिखित जोड़ें:

## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.url = jdbc:mysql://localhost:3306/library
spring.datasource.username = root //normally put your MySQL username 
spring.datasource.password = YOUR_MYSQL_PASSWORD
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

बस।

हमने स्प्रिंग बूट में एक बुनियादी REST API बनाया है। बधाई हो!

अगर कुछ गलत है या सुधार की जरूरत है, तो कृपया मुझे टिप्पणी अनुभाग में बताएं।

ट्विटर पर मुझसे संपर्क करें।

हैप्पी कोडिंग!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्वेरी के दौरान MySQL सर्वर से कनेक्शन टूट गया

  2. MySQL में हर Nth रो कैसे प्राप्त करें

  3. MySQL में TRIM () फ़ंक्शन कैसे काम करता है

  4. मैं MySQL में एक पंक्ति जनरेटर कैसे बनाऊं?

  5. MySQL VARCHAR अधिकतम आकार क्या है?