IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

Affichage aléatoire en spring boot


Sujet :

Spring Boot Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Affichage aléatoire en spring boot
    Bonsoir,

    J'ai ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Get a random Article
    	@GetMapping(value="/articles/ran")
    	@ResponseBody
    	 public Article getRandArticles(){
    			int a = (int) articleRepository.count();
    			int b = (int)(Math.random() * a);			
    			Long c= new Long(b);
    			return articleRepository.findById(c)  
    					.orElseThrow(() -> new ResourceNotFoundException("Article", "code", c));
    		}

    J'aimerai que dans le cas où "b" renvoiyera un entier qui n'est pas dans la base de donnée, que la méthode me renvoie un autre entier à la place de cet entier erroné. Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Si tu veux récupérer une ligne au hasard, utilise une requête sql native. Ici il y a pas mal de méthode optimisé: http://mysql.rjweb.org/doc.php/random

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     // dans ton repository si tu utilises Spring-data-Jpa
    @Query(value = "SELECT a.* FROM .... LIMIT 1", nativeQuery=true)
    	Article findRandom();
    A+.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    si je dois mettre cela dans mon repository, quel sera alors le corps de la méthode?

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Re,

    Je pensai que tu utilises Spring data, si c'est le cas, tu n'as qu'à le déclarer simplement dans ton interface, dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface ArticleRepository extends Repository<Article, Long> // ou CrudRepository<Article, Long>
    {...
    @Query(value = "SELECT a.* FROM .... LIMIT 1", nativeQuery=true)
    Article findRandom();
    A+.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Re
    Oui oui c'est ça j'utilise. Je l'ai déjà déclarer dans l'interface,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface ArticleRepository extends JpaRepository<Article, Long> {
    	@Query(value = "SELECT * FROM articles LIMIT 1", nativeQuery=true)
    	Article findRandom();
    }
    Dans le controller je fais quoi pour pourvoir l'utilliser?

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Je suppose que t'as déjà un interface qui étend CrudRepository ou Repository pour utiliser articleRepository.findById(c), tu ajoutes seulement la méthode findRandom(). Pour l'appeler dans ton controleur, tu l'appelles tout simplement avec articleRepository.findRandom().

    A+.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Re,

    J'ai finalement ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @GetMapping(value="/articles/ra")
    	@ResponseBody
    	 public Article getRanArticles(){
     
    			return articleRepository.findRandom();
    		}
    Mais quand je l'exécute cela me renvoie un seul article, le premier article. Donc j'ai corrigé un peu dans le repository comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Query(value = "SELECT * FROM articles ORDER BY RAND() LIMIT 1", nativeQuery=true)
    	Article findRandom();
    Et mtn ça marche bien. Merci infiniment pour votre immense aide, merci beaucoup pour le temps que vous m'aviez consacré.

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    La fonction rand() sera très lente une fois ta base sera grande. Je parlai des autres requêtes plus optimisées, à toi de choisir selon la structure de tes données s'il y a ou non de trou sur les id.

    A+.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,
    Et au cas ou j'aurais des trous dans mes id et que ma base devenais grande, quelle méthode je pourai utilisé dans ce cas?

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Utilise cette requête: http://mysql.rjweb.org/doc.php/rando..._rows_returned
    Tu peux utiliser une seule requête en se passant des variables @min et @max en utilisant les fonctions min et max directement dans la requête.

    A+.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Ok merci beaucoup pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SPRING BOOT [ ERREUR ] État HTTP 404 – Not Found
    Par Oilag dans le forum Spring Boot
    Réponses: 2
    Dernier message: 18/07/2018, 12h14
  2. Spring boot et les erreur
    Par robert.gagnon dans le forum Frameworks Web
    Réponses: 0
    Dernier message: 24/05/2016, 16h39
  3. gestion d'erreur et de transactions....
    Par Dge dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/02/2006, 22h20
  4. [LG]tests pour la gestion d'erreur
    Par le 27 dans le forum Langage
    Réponses: 3
    Dernier message: 22/12/2003, 20h44
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo