Je veux exécuter l'instruction SQL à l'intérieur de ma classe de contrôleur de démarrage à ressort sans définir aucune méthode dans le référentiel jpa. La déclaration que je veux utiliser est
SELECT UUID();
Cette instruction est liée à la base de données et n'est pas associée à une entité particulière.
Ce serait bien si quelqu'un pouvait fournir une solution pour l'exécution de la déclaration ci-dessus via
mettre à jour
manette:
@Autowired
JdbcTemplate jdbcTemplate;
@RequestMapping(value = "/UUID", method = RequestMethod.GET)
public ResponseEntity<String> getUUID() {
String uuid = getUUID();
return buildGuestResponse(uuid);
}
public String getUUID(){
UUID uuid = (UUID)jdbcTemplate.queryForObject("select UUID()", UUID.class);
return uuid.toString();
}
Vous pouvez utiliser JdbcTemplate dans votre code.
Le bean dont vous aurez besoin dans votre classe de configuration est: -
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource)
{
return new JdbcTemplate(dataSource);
}
Et le code pour exécuter la requête est: -
@Autowired
private JdbcTemplate JdbcTemplate;
public String getUUID(){
UUID uuid = (UUID)jdbcTemplate.queryForObject("select UUID()", UUID.class);
return uuid.toString();
}
ou peut être comme ça: -
public UUID getUUID(){
UUID uuid = (UUID)jdbcTemplate.queryForObject("select UUID()", UUID.class);
return uuid;
}
C'est généralement une mauvaise conception architecturale pour exécuter n'importe quel SQL (faire n'importe quelle persistance) sur la couche de présentation (contrôleur ou vue) dans applications JEE .
La meilleure option est de faire en sorte que le contrôleur utilise la couche de service, lorsque la couche de service appelle la couche de persistance pour: obtenir, enregistrer ou mettre à jour des données.
Dans tous les cas, vous pouvez utiliser Spring Data JDBC . Quelque chose comme:
import org.springframework.jdbc.core.JdbcTemplate;
....
UUID uuid = (UUID)jdbcTemplate.query("SELECT UUID()", UUID.class);
....
Je pourrais vous donner un petit exemple de la manière dont j’ai réalisé cela dans le cadre printanier en utilisant des données de printemps.
La classe de contrôleur:
@RestController
@RequestMapping("api/account")
public class AccountController {
private AccountService accountService;
@RequestMapping(
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE,
path = "{id}"
)
public ResponseEntity getAccountId(@PathVariable("id") UUID id) {
try {
Account ac = accountService.findOne(id);
return new ResponseEntity(ac, HttpStatus.OK);
} catch (Exception ex) {
return new ResponseEntity("Account not found.", HttpStatus.NOT_FOUND);
}
}
Dans ce petit exemple, j'ai AccountController et AccountService, une interface qui étend l'interface JpaRepository. L'objet de compte est un objet créé par soi-même. En utilisant l'interface JpaRepository, vous n'aurez pas besoin d'écrire les instructions SQL vous-même. Au lieu de cela, vous devez fournir un objet de modèle valide et l'identificateur (dans mon cas, l'UUID).
Voici un petit exemple d'objet Compte:
@Entity
public class Account {
private @Id @GeneratedValue(generator = "uuid2") UUID id;
private String firstName, lastName, description;
private Account() {}
public Account(String firstName, String lastName, String description) {
this.firstName = firstName;
this.lastName = lastName;
this.description = description;
}
}
Pour plus d'exemples sur la façon de travailler avec les données de printemps, je vous recommande de suivre le guide de démarrage rapide sur leur website .
J'espère que ça aide!