sql >> Databáze >  >> RDS >> Mysql

Příklad Spring Boot CRUD s MySQL

Tento příklad vám řekne, jak používat jarní spouštěcí data JPA k implementaci operace vkládání, aktualizace, mazání a výběru databázové tabulky v databázové tabulce MySQL. S spring boot data JPA byl příkaz pro operaci databázové tabulky zabalen do metody, stačí vytvořit rozhraní Java, které rozšíří základní rozhraní JPA Repository s jarními bootovacími daty (například CrudRepository ), pak stačí definovat metodu operace databázové tabulky (například findBy , deleteBy, atd.) ve vlastním rozhraní úložiště a název metody se musí řídit speciálními pravidly pro pojmenování. Nemusíte psát příkazy SQL v rozhraní úložiště.

1. Vytvořte tabulku databáze MySQL.

  1. Vytvořte databázi MySQL s názvem dev2qa_example . Výchozí řazení databáze by měl být utf8 – utf8_bin .
    VYTVOŘTE SCHÉMA `dev2qa_example` VÝCHOZÍ SADA ZNAKŮ utf8 COLLATE utf8_bin;
  2. Vytvořte tabulku user_account ve výše uvedeném příkladu_dev2qa databázi s níže uvedeným příkazem SQL. ID sloupec by měl být AI (automatizovaný přírůstek), jinak bude vyvolána chyba Spring Boot JPA Tabulka 'dbname.hibernate_sequence' Neexistuje.
    CREATE TABLE `dev2qa_example`.`user_account` ( `id` INT NOT NULL AUTO_INCREMENT, `user_name` VARCHAR (100) NULL, `heslo` VARCHAR(100) NULL, `e-mail` VARCHAR(100) NULL, PRIMÁRNÍ KLÍČ (`id`))ENGINE =InnoDBDEFAULT CHARACTER SET =utf8COLLATE =utf8_bin;

2. Vytvořte projekt Spring Boot.

  1. Spusťte sadu jarních nástrojů, klikněte na Soubor —> Nový —> Spring Starter Project položka nabídky, kterou otevřete pod Novým jarním začátečnickým projektem kouzelník. Zadejte související informace o projektu, jak je uvedeno níže. A klikněte na tlačítko Další.
  2. Přidat JPA , MySQL, a Web knihovny v průvodci závislostmi. A klikněte na Dokončit tlačítko pro dokončení inicializace projektu.

3. Spring Boot JPA CRUD ukázkové soubory projektu.

Níže jsou zdrojové soubory v tomto projektu. Představíme je jeden po druhém.

c:\ workspace \ work \ dev2qa.com-example-code \ Springboot \ SpringBootCrudMysql│ pom.xml└───src ├──stnaMain │ ├── zajímaj └─── DEV2QA │ │ └└── Příklad │ │ │ SpringbootCrudMysqlapplication.java │ │ │ │ │ ├ ├ ├ ├ ├ ├ ├ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ UVERACTONTY.JaVAVAVA │ │ │ │ │ └└└kono -repository │ │ UserAccountRepository.java │ │ │ └└valoUrces │ Application.Properties │ └└valost thest. java

3.1 SpringBootCrudMySqlApplication.java

Toto je příklad jarního spouštění začínající třídou Java. Bude načten a spuštěn jako první v jarní spouštěcí aplikaci.

package com.dev2qa.example;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.ComponentScan;import.org.context.springframework. Configuration;//@SpringBootApplication@Configuration@ComponentScan(basePackages ={ "com.dev2qa.example" })@EnableAutoConfigurationpublic class SpringBootCrudMySqlApplication { public static void main(String[] args) {SpringApplication,runCargspplication.SpringBootApplication }}

3.2 UserAccountController.java

Toto je jarní třída java řadiče MVC, která mapuje adresu URL uživatelského požadavku na metodu zpracování.

package com.dev2qa.example.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind. annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.dev2qa.ex entity.UserAccount;import com.dev2qa.example.repository.UserAccountRepository;@Controller@RequestMapping(cesta ="/userAccount") veřejná třída UserAccountController { @Autowired UserAccountRepository userAccountRepository; /* * Příklad adresy URL mapování:* http://localhost:8080/userAccount/add?userName=Jerry&password=888888&email=* [email protected] * http://localhost:8080/userAccount/add?userName=88email&pass =* [email protected] */ @GetMapping(cesta ="/add") @ResponseBody public String addUser(@RequestParam String userName, @RequestParam String heslo, @RequestParam String email) { UserAccount userAccount =new UserAccount(); userAccount.setUsername(userName); userAccount.setPassword(heslo); userAccount.setEmail(e-mail); userAccountRepository.save(userAccount); String ret ="Uživatelský účet byl přidán, uživatelské jméno =" + uživatelské jméno + ", heslo =" + heslo + ", email =" + email; návrat ret; } /* * Příklad adresy URL mapování:http://localhost:8080/userAccount/findAll */ @GetMapping(cesta ="/findAll") @ResponseBody public String findAllUser() { StringBuffer retBuf =new StringBuffer(); List userAccountList =(List) userAccountRepository.findAll(); if (userAccountList !=null) { for (UserAccount userAccount:userAccountList) { retBuf.append("jméno uživatele ="); retBuf.append(userAccount.getUsername()); retBuf.append(", heslo ="); retBuf.append(userAccount.getPassword()); retBuf.append(", email ="); retBuf.append(userAccount.getEmail()); retBuf.append("\r\n"); } } if (retBuf.length() ==0) { retBuf.append("Nenalezen zaznam."); } else { retBuf.insert(0, "
"); retBuf.append("
"); } return retBuf.toString(); } /* * Příklad mapovací adresy URL:* http://localhost:8080/userAccount/findByName?userName=Jerry */ @GetMapping(path ="/findByName") @ResponseBody public String findByName(@RequestParam String userName) { StringBuffer =new StringBuffer(); List userAccountList =(List) userAccountRepository.findByUsername(userName); if (userAccountList !=null) { for (UserAccount userAccount:userAccountList) { retBuf.append("jméno uživatele ="); retBuf.append(userAccount.getUsername()); retBuf.append(", heslo ="); retBuf.append(userAccount.getPassword()); retBuf.append(", email ="); retBuf.append(userAccount.getEmail()); retBuf.append("\r\n"); } } if (retBuf.length() ==0) { retBuf.append("Nenalezen zaznam."); } return retBuf.toString(); } /* * Příklad adresy URL pro mapování:* http://localhost:8080/userAccount/findByNameAndPassword?userName=Jerry&* password=888888 */ @GetMapping(path ="/findByNameAndPassword") @ResponseName String String UserPassme , @RequestParam String heslo) { StringBuffer retBuf =new StringBuffer(); List userAccountList =(List) userAccountRepository .findByUsernameAndPassword(userName, password); if (userAccountList !=null) { for (UserAccount userAccount:userAccountList) { retBuf.append("jméno uživatele ="); retBuf.append(userAccount.getUsername()); retBuf.append(", heslo ="); retBuf.append(userAccount.getPassword()); retBuf.append(", email ="); retBuf.append(userAccount.getEmail()); retBuf.append("
"); } } if (retBuf.length() ==0) { retBuf.append("Nenalezen zaznam."); } return retBuf.toString(); } /* * Příklad adresy URL mapování:* http://localhost:8080/userAccount/updateUser?userName=Jerry&password=hello&* [email protected] */ @GetMapping(path ="/updateUser") @ResponseBody public String updateUser( @RequestParam String uživatelské jméno, @RequestParam String heslo, @RequestParam String email) { StringBuffer retBuf =new StringBuffer(); List userAccountList =userAccountRepository.findByUsername(userName); if (userAccountList !=null) { for (UserAccount userAccount:userAccountList) { userAccount.setUsername(userName); userAccount.setPassword(heslo); userAccount.setEmail(e-mail); userAccountRepository.save(userAccount); } } retBuf.append("Úspěšná aktualizace uživatelských dat."); return retBuf.toString(); } /* * Příklad adresy URL mapování:* http://localhost:8080/userAccount/deleteByUserName?userName=Richard */ @GetMapping(path ="/deleteByUserName") @ResponseBody public String deleteByUserName(@RequestParam String UserBume) {String String jméno_uživatele =new StringBuffer(); userAccountRepository.deleteByUsername(jméno uživatele); retBuf.append("Uživatelská data byla úspěšně smazána."); return retBuf.toString(); } /* * Příklad adresy URL mapování:* http://localhost:8080/userAccount/deleteByUserNameAndPassword?userName=* Richard&password=888888 */ @GetMapping(path ="/deleteByUserNameAndPassword") @ResponseBodyPassword delete@AndResponseBodyParams public String @RequestParam String password) { StringBuffer retBuf =new StringBuffer(); userAccountRepository.deleteByUsernameAndPassword(jméno uživatele, heslo); retBuf.append("Uživatelská data byla úspěšně smazána."); return retBuf.toString(); }}

3.3 UserAccount.java

Toto je java třída entity, která bude mapována do tabulky MySQL user_account . Všimněte si prosím id generovat strategii musí být GenerationType.IDENTITY , pokud používáte Generation.AUTO a sloupec ID tabulky MySQL je nastaven na automatické zvýšení, pak bude vyvolána chyba.

package com.dev2qa.example.entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;/* Mapujte tuto třídu entity do tabulky uživatelského_účtu. */@Entity(name ="user_account") veřejná třída UserAccount { @Id @GeneratedValue(strategy =GenerationType.IDENTITY) private Long id; @javax.persistence.Column(name ="user_name") private String uživatelské jméno; heslo soukromého řetězce; soukromý řetězec e-mailu; public Long getId() { return id; } public void setId(Dlouhé id) { this.id =id; } public String getUsername() { return username; } public void setUsername(String uživatelské jméno) { this.username =uživatelské jméno; } public String getPassword() { return password; } public void setPassword(String password) { this.password =password; } public String getEmail() { return email; } public void setEmail(String email) { this.email =email; }}

3.4 UserAccountRepository.java

Toto je vlastní rozhraní úložiště dat JPA na jaře, které rozšiřuje CrudRepository . Stačí definovat související metody a potom jarní rámec automaticky spustí související příkaz SQL k implementaci metody. Díky tomu je kódování rychlejší.

package com.dev2qa.example.repository;import java.util.List;import org.springframework.data.repository.CrudRepository;import org.springframework.transaction.annotation.Transactional;import com.dev2qa.example.entity. UserAccount;veřejné rozhraní UserAccountRepository rozšiřuje CrudRepository { /* * Získejte seznam uživatelů podle uživatelského jména. Vezměte prosím na vědomí, že formát by měl být * findBy. */ List findByUsername(String username); /* * Získejte seznam uživatelů podle uživatelského jména a hesla. Vezměte prosím na vědomí, že formát by měl být * findByAnd. */ List findByUsernameAndPassword(String uživatelské jméno, String heslo); @Transactional void deleteByUsernameAndPassword(String username, String password); @Transactional void deleteByUsername(String username);}

3.5 application.properties

Toto je zdrojový soubor, který obsahuje data připojení zdroje dat MySQL JDBC použitá v příkladu.

# připojení MySQL jdbc url.spring.datasource.url=jdbc:mysql://localhost:3306/dev2qa_example# Název třídy ovladače jdbc MySQL.spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver# MySQL uživatelské jméno a heslo databázespring.datasource.username=rootspring.datasource.password=root

3.6 pom.xml

 4.0.0 com.example SpringBootCRUDMySQL 0.0.1-SNAPSHOT jar SpringBootCRUDMySQL Jarní bootovací přístup k mysql s crud operací.  org.springframework.boot spring-boot-starter-parent 2.1.0.RELEASE     UTF-8 UTF-8 1.8    org.springframework.boot spring-boot-starter-data-jpa   org. springframework.boot spring-boot-starter-web   mysql mysql-connector-java runtime   org.springframework.boot spring-boot-starter-test test      org.springframework.boot spring-boot-maven-plugin   

3.7 Spusťte příklad.

  1. Klikněte pravým tlačítkem na název projektu.
  2. Klikněte na Spustit jako —> Aplikace Spring Boot položku nabídky ze seznamu vyskakovací nabídky.
  3. Po spuštění aplikace zadejte adresu URL mapování pro související UserAccountController metoda třídy java ve webovém prohlížeči, abyste viděli výsledek.

4. Otázka a odpověď.

4.1 Spring boot metody findAll, findById, deleteById všechny vrátí prázdné výsledky.

  1. Chci použít Spring boot + MySQL k implementaci aplikace REST, která bude provádět akce CRUD pro manipulaci s tabulkou MySQL. Ale najdu, když spustím findAll() metoda, vrací prázdný seznam, to není to, co očekávám. Když spustím findById() metoda, vrátí chybovou zprávu java.util.NoSuchElementException:Žádná hodnota . A když provedu akci odstranění pomocí jarní spouštěcí metody deleteById() , také mi to říká, že Neexistuje žádná entita třídy org.dev2qa.entity.Article s ID 10 ! Zdá se, že moje tabulka databáze je prázdná, ale není. V jakém případě k těmto chybám může dojít?
  2. Moje třída vlastního úložiště rozšiřuje JpaRepository třída a její findAll() metoda také vrací prázdný seznam. Moje databáze je také databáze MySql. Když přidám jeden záznam do databáze MySQL, findAll() metoda return [{}] a když přidám dva záznamy do databáze MySQL, findAll() metoda return [{},{}] . Číslo prvku seznamu je správné, ale data prvku jsou prázdná, to není správné. Může mi někdo pomoci? Díky moc.
  3. Pokud vlastnosti vaší třídy entit nejsou veřejné, může dojít k této chybě. Nejprve byste měli deklarovat vlastnosti třídy entity pomocí @Column anotace a deklarace vlastností mohou být soukromé, pak k těmto vlastnostem přidejte metodu getter a setter a udělejte metodu getter a setter veřejnou. Poté může JpaRepository vytvořit objekt entity a naplnit vlastnosti objektu daty načtenými zpět z databáze MySQL. A vaše findAll() metoda vůbec nevrátí prázdný seznam.

Reference

  1. Jak nainstalovat MySQL na Ubuntu
  2. Vyřešit chybu Spring Boot JPA Table „dbname.hibernate_sequence“ neexistuje

  1. Povolení ke vztahu odepřeno

  2. Únik z jednoduché uvozovky v PHP při vkládání do MySQL

  3. Více generátorů Hibernate sekvence pro jednu entitu s PostgreSQL

  4. Chyba 1046 Není vybrána žádná databáze, jak vyřešit?