Com construir una API CRUD REST mitjançant Spring Boot 2, JPA / Hibernate i MySQL

Bloc

Com construir una API CRUD REST mitjançant Spring Boot 2, JPA / Hibernate i MySQL

Com construir una API CRUD REST mitjançant Spring Boot 2, JPA / Hibernate i MySQL

En aquest article aprendrem com desenvolupar una API CRUD RESTFul amb Spring Boot 2 + JPA / Hibernate i MySQL com a base de dades.

L’objectiu final d’aquests articles és desplegar aquesta aplicació a Oracle Cloud. Però primer, desenvoluparem i provarem l’aplicació mitjançant una base de dades local.

Abans de començar, aquí teniu una llista del que necessitem per completar aquest tutorial:

L’API que desenvoluparem

Crearem un recurs de contacte que exposarà tres serveis mitjançant mètodes URI RESTFul i HTTP:

projectes mecanoscrits per a principiants
  • Recupera tots els contactes - @GetMapping(/contacts)
  • Obteniu detalls del contacte específic - @GetMapping(/contacts/{id})
  • Suprimir un contacte - @DeleteMapping(/contacts/{id})
  • Crea un contacte nou - @PostMapping(/contacts)
  • Actualitzeu les dades de contacte existents - @PutMapping(/contacts/{id})

Creació de l'aplicació REST Spring Boot

Per crear l’aplicació Spring Boot, l’utilitzarem start.spring.io , que ens proporcionarà algun codi d'arrencada (classe principal i pom.xml fitxers). Necessitem el Web, JPA, Lombok i MySQL paquets per a aquest exemple:

Mireu el diagrama anterior, hem especificat els detalls següents:

Generate Project

Després d’introduir tots els detalls, feu clic a Contact , descarregueu el fitxer zip, extreu-ne el contingut al vostre espai de treball i obriu-lo al vostre IDE preferit.

Estructura del projecte

La següent captura de pantalla mostra l'estructura del projecte que crearem.

Creació del model (entitat JPA)

La primera classe que crearem és l'Entitat JPA. Crearem una classe id amb una clau principal AllArgsConstructor:

El model és el mateix que la part 1 d’aquesta sèrie d’articles, però especificarem com es generarà automàticament l’identificador perquè ja no fem servir la base de dades H2.
NoArgsConstructor

Les següents anotacions provenen del projecte Lombok i ens ajuden a mantenir les nostres classes (especialment el model / POJO) més netes sense els getters i els seters:

  • Data: crea automàticament un constructor de classes amb tots els arguments (propietats).
  • toString: crea automàticament un constructor de classes buit amb tots els arguments (propietats).
  • equals: crea hashCode, getters, setters, Contact i JpaRepository.

Creació del dipòsit JPA

Per accedir fàcilment als mètodes per manipular el JpaRepository taula, només hem de crear una interfície que estengui @RestController passant la classe que representa el nostre model i el tipus de clau primària com a arguments genèrics:

@Controller

El @ResponseBody La interfície proporciona una forma senzilla i senzilla d'accedir a totes les operacions CRUD.

Creació del controlador

Per accedir a les nostres dades, també necessitarem un controlador.

@Controller

El @ResponseBody l’anotació conté el @RequestMapping(/contacts) i /contacts anotacions. El http://localhost:8080/contacts anotació representa una classe amb punts finals i el @Autowired indica que un valor de retorn del mètode s'hauria de lligar al cos de resposta web (segons el fitxer documentació ).

El findAll indica que l'URL de l'API d'aquest controlador començarà per select * from contact, de manera que podrem accedir @RequestMapping(value=/contacts, method=RequestMethod.GET) com a punt final.

Tingueu en compte que no fem servir el @GetMapping anotació per injectar automàticament el repositori. Estem utilitzant la injecció de dependències a través del constructor, ja que és una pràctica recomanada.

Com que aquest és un exemple senzill, no estem creant una classe de servei per iterar amb el dipòsit. Crear una capa de servei és una bona pràctica, ja que podem mantenir neta la nostra classe de controladors i afegir qualsevol lògica empresarial necessària al servei.

Vegem a continuació cada mètode.

Recupera tots els contactes (GET / contactes)
@PathVariable

El id Aquest mètode recuperarà tots els registres de la base de dades ({id}).

com comprar zep

Com que es tracta d'una API RESTful, podem ometre el select * from contact where id = ? i simplement utilitzeu @RequestBody.

Recupereu un contacte per identificador (GET / contacts / {id})
id

El null anotació lliga el paràmetre del mètode save amb la variable de camí contact.

anirem a la base de dades i intentarem recuperar el contacte (Bean). Si es troba un contacte, el retornem (HTTP 200 - OK); en cas contrari, retornem HTTP 404 -No trobat.

Crea un contacte nou (POST / contactes)
CommandLineRunner

El public static void main(String[] args) { SpringApplication.run(SpringCloudMysqlApplication.class, args); } @Bean CommandLineRunner init(ContactRepository repository) { return args -> { repository.deleteAll(); LongStream.range(1, 11) .mapToObj(i -> { Contact c = new Contact(); c.setName('Contact ' + i); c.setEmail('contact' + i + '@email.com'); c.setPhone('(111) 111-1111'); return c; }) .map(v -> repository.save(v)) .forEach(System.out::println); }; } l’anotació indica que un paràmetre de mètode s’hauria d’associar al cos de la sol·licitud web. Això significa que el mètode espera el següent contingut de la sol·licitud de que (en format JSON):

src/maind/resources/application.properties

Spring analitzarà automàticament la sol·licitud i crearà una variable de tipus Contact amb el seu contingut. Aleshores el guardarà. El contact del contacte serà mydatabase, per tant el contact mètode realitzarà una inserció a la taula de contactes.

Actualitzar un contacte (PUT / contactes)
id

Per actualitzar un contacte, hem d’informar el seu identificador a la variable camí. També hem de passar el contacte actualitzat.

A continuació, intentarem trobar el contacte que cal actualitzar. Si es troba el contacte, actualitzem els valors del registre de la base de dades amb els valors passats com a paràmetre al mètode i el desem. En aquest cas, a mesura que existeix el registre, es realitzarà una instrucció d'actualització a la taula de contactes. També us retornem el contacte actualitzat. En cas que no es trobi el contacte, torna HTTP 404.

Elimina un contacte (SUPRIMIR / contactes / {id})
name

Per eliminar un contacte, primer hem de recuperar-lo de la base de dades. En cas que es trobi, l’esborrem passant el seu identificador i retornem HTTP 200 per indicar que la supressió s’ha realitzat correctament. En cas que no es trobi el contacte, retornem HTTP 404.

què és super bitcoin

Inicialització de la base de dades MySQL

Com a darrer pas, inserirem alguns registres a MySQL email taula declarant un phone que retorna un id - aquest pas és opcional en cas que ja utilitzeu una base de dades / taula existent.

mydatabase

}

Configuració de la base de dades MySQL

Per tal que el nostre codi pugui connectar-se a una base de dades MySQL, també hem d’informar els detalls de la connexió. Afegirem aquests detalls a l'interior contact:

id

En cas que vulgueu que Hibernate generi automàticament la taula a la base de dades, també podem utilitzar la configuració següent:

id

Tot i que això facilita el desenvolupament, no es recomana en producció. Per a la producció, és possible que vulgueu crear un identificador funcional (usuari / contrasenya) que pugui realitzar totes les operacions CRUD a les taules ( DML (llenguatge de manipulació de dades) ordres), però no pot realitzar cap DDL (llenguatge de definició de dades) ordres (Crea, Drop, Alter taules, etc.).

Per crear el id_UNIQUE taula, podem utilitzar el següent script SQL:

on comprar telcoin crypto
id

Prova de les API

Podem provar l'API mitjançant Carter . Si utilitzeu Visual Studio Code, també podeu utilitzar l'extensió REST Client.

El fitxer per provar mitjançant l'extensió REST Client també s'inclou al codi font

Conclusió

En aquest article, hem desenvolupat i provat localment una API CRUD que es connecta a una base de dades real.

Espero que aquest tutorial segurament us ajudarà i, si us ha agradat aquest tutorial, penseu en compartir-lo amb altres persones

# spring-boot #java #hibernate #mysql # desenvolupament web