खोज…


परिचय

स्प्रिंग बूट से स्प्रिंग-पावर्ड, प्रोडक्शन-ग्रेड एप्लिकेशन और सेवाओं को पूर्ण न्यूनतम उपद्रव के साथ बनाना आसान हो जाता है। यह कॉन्फ़िगरेशन पर कन्वेंशन का पक्षधर है।

स्प्रिंग डेटा जेपीए , बड़े स्प्रिंग डेटा परिवार का हिस्सा, जेपीए आधारित रिपॉजिटरी को लागू करना आसान बनाता है। यह उन ऐप्स का निर्माण करना आसान बनाता है जो डेटा एक्सेस तकनीकों का उपयोग करते हैं।

टिप्पणियों

एनोटेशन

@Repository : इंगित करता है कि एक एनोटेट वर्ग "रिपॉजिटरी" है, जो भंडारण, पुनः प्राप्ति और खोज व्यवहार को एन्कैप्सुलेट करने के लिए एक तंत्र है जो वस्तुओं के संग्रह का अनुकरण करता है। पारंपरिक J2EE पैटर्न जैसे "डेटा एक्सेस ऑब्जेक्ट" को लागू करने वाली टीमें भी इस स्टीरियोटाइप को DAO वर्गों पर लागू कर सकती हैं, हालांकि ऐसा करने से पहले डेटा एक्सेस ऑब्जेक्ट और DDD- शैली रिपॉजिटरी के बीच के अंतर को समझने के लिए ध्यान रखा जाना चाहिए। यह एनोटेशन एक सामान्य उद्देश्य वाला स्टीरियोटाइप है और अलग-अलग टीमें अपने शब्दार्थ को संकीर्ण कर सकती हैं और उचित रूप में उपयोग कर सकती हैं।

@RestController : एक सुविधा एनोटेशन जाता है कि खुद के साथ एनोटेट @Controller और @ResponseBody.Types कि यह व्याख्या ले नियंत्रकों जहां के रूप में इलाज कर रहे हैं @RequestMapping तरीकों मान @ResponseBody डिफ़ॉल्ट रूप से अर्थ विज्ञान।

@Service : इंगित करता है कि एक एनोटेट वर्ग एक "सेवा" (जैसे एक व्यवसाय सेवा मुखौटा) है। यह एनोटेशन @Component विशेषज्ञता के रूप में कार्य करता है, कार्यान्वयन कक्षाओं के लिए @Component स्कैनिंग के माध्यम से @Component अनुमति देता है।

@SpringBootApplication : कई स्प्रिंग बूट डेवलपर्स हमेशा अपने मुख्य वर्ग को @Configuration , @EnableAutoConfiguration और @ComponentScan साथ एनोटेट करते हैं। चूंकि ये एनोटेशन एक साथ अक्सर उपयोग किए जाते हैं (खासकर यदि आप उपरोक्त सर्वोत्तम प्रथाओं का पालन करते हैं), स्प्रिंग बूट एक सुविधाजनक @SpringBootApplication विकल्प प्रदान करता है।

@Entity : निर्दिष्ट करता है कि वर्ग एक इकाई है। यह एनोटेशन इकाई वर्ग के लिए लागू किया जाता है।

आधिकारिक दस्तावेज

Pivotal Software ने स्प्रिंग फ्रेमवर्क पर एक बहुत व्यापक प्रलेखन प्रदान किया है, और इसे पाया जा सकता है

स्प्रिंग बूट और स्प्रिंग डेटा जेपीए एकीकरण मूल उदाहरण है

हम एक ऐसे अनुप्रयोग का निर्माण करने जा रहे हैं जो POJOs को डेटाबेस में संग्रहीत करता है। अनुप्रयोग एक रिलेशनल डेटाबेस में डेटा को संग्रहीत और पुनर्प्राप्त करने के लिए स्प्रिंग डेटा जेपीए का उपयोग करता है। इसकी सबसे सम्मोहक विशेषता रिपॉजिटरी इंटरफ़ेस से रिपॉजिटरी इंप्लीमेंटेशन को स्वचालित रूप से रनटाइम पर बनाने की क्षमता है।

मुख्य वर्ग

package org.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

main() विधि एप्लिकेशन को लॉन्च करने के लिए स्प्रिंग SpringApplication.run() स्प्रिंगएप्लीकेशन.रून main() विधि का उपयोग करती है। कृपया ध्यान दें कि XML की एक भी पंक्ति नहीं है। कोई web.xml फ़ाइल भी नहीं। यह वेब एप्लिकेशन 100% शुद्ध जावा है और आपको किसी प्लंबिंग या इंफ्रास्ट्रक्चर को कॉन्फ़िगर करने की आवश्यकता नहीं है।

इकाई वर्ग

package org.springboot.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Greeting {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String text;

    public Greeting() {
        super();
    }

    public Greeting(String text) {
        super();
        this.text = text;
    }

    /* In this example, the typical getters and setters have been left out for brevity. */
}

यहां आपके पास दो विशेषताओं, id और text साथ Greeting क्लास है। आपके पास दो कंस्ट्रक्टर भी हैं। डिफ़ॉल्ट निर्माणकर्ता केवल JPA के लिए मौजूद है। आप इसे सीधे उपयोग नहीं करेंगे, इसलिए इसे protected किया जा सकता protected । अन्य निर्माता वह है जिसका उपयोग आप डेटाबेस को सहेजने के लिए Greeting उदाहरण बनाने के लिए करेंगे।

Greeting वर्ग को @Entity साथ एनोटेट किया @Entity , यह दर्शाता है कि यह एक जेपीए इकाई है। @Table एनोटेशन की कमी के लिए, यह माना जाता है कि इस इकाई को 'ग्रीटिंग' नामक तालिका में मैप किया जाएगा।

ग्रीटिंग की id संपत्ति @Id साथ एनोटेट की @Id ताकि JPA इसे ऑब्जेक्ट की आईडी के रूप में पहचान ले। id प्रॉपर्टी को यह @GeneratedValue लिए @GeneratedValue साथ भी एनोटेट किया गया है कि आईडी अपने आप जेनरेट होनी चाहिए।

अन्य संपत्ति, text किसी का ध्यान नहीं छोड़ा गया है। यह माना जाता है कि यह एक स्तंभ पर मैप किया जाएगा जो संपत्ति के समान नाम को साझा करता है।

क्षणिक गुण

उपरोक्त के समान एक इकाई वर्ग में, हमारे पास ऐसे गुण हो सकते हैं जिन्हें हम डेटाबेस में बनाए रखना नहीं चाहते हैं या हमारे डेटाबेस में कॉलम के रूप में बनाए जा सकते हैं, क्योंकि हम उन्हें रनटाइम पर सेट करना चाहते हैं और उनका उपयोग हमारे आवेदन में कर सकते हैं। इसलिए हम उस संपत्ति को एनोटेशन एनोटेशन के साथ ले सकते हैं।

package org.springboot.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;

@Entity
public class Greeting {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String text;
    @Transient
    private String textInSomeLanguage;
    
    public Greeting() {
        super();
    }
 
    public Greeting(String text) {
        super();
        this.text = text;
        this.textInSomeLanguage = getTextTranslationInSpecifiedLanguage(text);
    }

    /* In this example, the typical getters and setters have been left out for brevity. */
}

यहां आपके पास एक ही ग्रीटिंग क्लास है जिसमें अब एक क्षणिक संपत्ति textInSomeLanguage जिसे प्रारंभ किया जा सकता है और रनटाइम पर उपयोग किया जा सकता है और डेटाबेस में जारी नहीं रहेगा।

डीएओ क्लास

package org.springboot.repository;

import org.springboot.model.Greeting;
import org.springframework.data.repository.CrudRepository;

public interface GreetingRepository extends CrudRepository<Greeting, Long> {

    List<Greeting> findByText(String text);
}

GreetingRepository CrudRepository इंटरफ़ेस का विस्तार करता है। Greeting और Long साथ काम करने वाली इकाई और आईडी का प्रकार, CrudRepository पर जेनेरिक मापदंडों में निर्दिष्ट है। विस्तार करके CrudRepository , GreetingRepository के साथ काम करने के लिए विरासत में मिली कई तरीके Greeting हठ, बचत, हटाने, और खोजने के लिए उपाय अपना सकते हैं Greeting संस्थाओं।
CrudRepository , PagingAndSortingRepository , JpaRepository की तुलना के लिए इस चर्चा को देखें।

स्प्रिंग डेटा JPA आपको केवल उनके विधि हस्ताक्षर की घोषणा करके अन्य क्वेरी विधियों को परिभाषित करने की अनुमति देता है। GreetingRepository findByText() के मामले में, यह एक findByText() विधि के साथ दिखाया गया है।

एक सामान्य जावा एप्लिकेशन में, आप एक वर्ग लिखने की उम्मीद करेंगे जो GreetingRepository लागू करता है। लेकिन यही वह है जो स्प्रिंग डेटा JPA को इतना शक्तिशाली बनाता है: आपको रिपॉजिटरी इंटरफ़ेस का कार्यान्वयन लिखना नहीं है। जब आप एप्लिकेशन चलाते हैं तो स्प्रिंग डेटा जेपीए मक्खी पर एक कार्यान्वयन बनाता है।

सेवा वर्ग

package org.springboot.service;

import java.util.Collection
import org.springboot.model.Greeting;

public interface GreetingService {

    Collection<Greeting> findAll();
    Greeting findOne(Long id);
    Greeting create(Greeting greeting);
    Greeting update(Greeting greeting);
    void delete(Long id);

}

सेवा बीन

package org.springboot.service;

import java.util.Collection;
import org.springboot.model.Greeting;
import org.springboot.repository.GreetingRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class GreetingServiceBean implements GreetingService {

    @Autowired
    private GreetingRepository greetingRepository;

    @Override
    public Collection<Greeting> findAll() {
        Collection<Greeting> greetings = greetingRepository.findAll();
        return greetings;
    }

    @Override
    public Greeting findOne(Long id) {
        Greeting greeting = greetingRepository.findOne(id);
        return greeting;
    }

    @Override
    public Greeting create(Greeting greeting) {
        if (greeting.getId() != null) {
            //cannot create Greeting with specified Id value
            return null;
        }
        Greeting savedGreeting = greetingRepository.save(greeting);
        return savedGreeting;
    }

    @Override
    public Greeting update(Greeting greeting) {
        Greeting greetingPersisted = findOne(greeting.getId());
        if (greetingPersisted == null) {
            //cannot find Greeting with specified Id value
            return null;
        }
        Greeting updatedGreeting = greetingRepository.save(greeting);
        return updatedGreeting;
    }

    @Override
    public void delete(Long id) {
         greetingRepository.delete(id);
    }

}

नियंत्रक वर्ग

package org.springboot.web.api;

import java.util.Collection;
import org.springboot.model.Greeting;
import org.springboot.service.GreetingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/api")
public class GreetingController {

    @Autowired
    private GreetingService greetingService;

    // GET [method = RequestMethod.GET] is a default method for any request. 
    // So we do not need to mention explicitly

    @RequestMapping(value = "/greetings", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Collection<Greeting>> getGreetings() {
        Collection<Greeting> greetings = greetingService.findAll();        
        return new ResponseEntity<Collection<Greeting>>(greetings, HttpStatus.OK);
    }

    @RequestMapping(value = "/greetings/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Greeting> getGreeting(@PathVariable("id") Long id) {
        Greeting greeting = greetingService.findOne(id);
        if(greeting == null) {
            return new ResponseEntity<Greeting>(HttpStatus.NOT_FOUND);
        }
        return new ResponseEntity<Greeting>(greeting, HttpStatus.OK);
    }
    
    @RequestMapping(value = "/greetings", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Greeting> createGreeting(@RequestBody Greeting greeting) {
        Greeting savedGreeting = greetingService.create(greeting);
        return new ResponseEntity<Greeting>(savedGreeting, HttpStatus.CREATED);
    }

    @RequestMapping(value = "/greetings/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Greeting> updateGreeting(@PathVariable("id") Long id, @RequestBody Greeting greeting) {
        Greeting updatedGreeting = null;
        if (greeting != null && id == greeting.getId()) {
            updatedGreeting = greetingService.update(greeting); 
        }
        if(updatedGreeting == null) {
            return new ResponseEntity<Greeting>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return new ResponseEntity<Greeting>(updatedGreeting, HttpStatus.OK);
    }

    @RequestMapping(value = "/greetings/{id}", method = RequestMethod.DELETE)
    public ResponseEntity<Greeting> deleteGreeting(@PathVariable("id") Long id) {
        greetingService.delete(id);
        return new ResponseEntity<Greeting>(HttpStatus.NO_CONTENT);
    }

}

अनुप्रयोग गुण MySQL डेटाबेस के लिए फ़ाइल

#mysql config
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=Welcome@123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto = update

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy

#initialization
spring.datasource.schema=classpath:/data/schema.sql

SQL फ़ाइल

drop table if exists greeting;
create table greeting (
    id bigint not null auto_increment, 
    text varchar(100) not null, 
    primary key(id)
);

pom.xml फ़ाइल

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>org</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.1.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

एक निष्पादन योग्य JAR का निर्माण

आप मावेन के साथ कमांड लाइन से एप्लिकेशन चला सकते हैं। या आप एक एकल निष्पादन योग्य JAR फ़ाइल बना सकते हैं जिसमें सभी आवश्यक निर्भरताएँ, कक्षाएं और संसाधन शामिल हैं, और उसे चलाएं। इससे जहाज को विकसित करना, संस्करण बनाना और सेवा को विकास के जीवन चक्र में, विभिन्न वातावरणों में, और उसके बाद एक सेवा के रूप में तैनात करना आसान हो जाता है।

अनुप्रयोग का उपयोग करके ./mvnw spring-boot:run । या आप ./mvnw clean package साथ JAR फाइल बना सकते हैं। तब आप JAR फ़ाइल चला सकते हैं:

java -jar target/springboot-0.0.1-SNAPSHOT.jar


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow