Guten Tag ,ich brauche Hilfe bei einer DB Anfrage. Ich habe eine Mysql Tabelle "MacroDaten"
Im Spring Programm brauche ich einige Daten von der Tabelle, die ich später präsentiere.
Modell von der "MacroDaten" Tabelle :
Java:
@Entity@Table(name="macro_daten")@NamedQuery(name="MacroDaten.findAll", query="SELECT m FROM MacroDaten m")publicclassMacroDatenimplementsSerializable{privatestaticfinallong serialVersionUID =1L;@Id@Column(name="macro_daten_id")privateint macroDatenId;privatedouble aufw;privateint bloc;privateint boc;privatedouble fm;privatedouble lesb;privateint loc;....
MacroDatenRepository wo ich versuche 2 Methoden zu implementieren die mir benötigte Daten liefern werden:
Java:
publicinterfaceMacroDatenRepositoryextendsCrudRepository<MacroDaten,Long>{@Query("SELECT SUM(CASE WHEN fm>0.85 THEN 1 ELSE 0 END) AS hoheKomplex,"+"SUM(CASE WHEN fm BETWEEN 0.35 AND 0.85 THEN 1 ELSE 0 END) AS mittlereKomplex,"+"SUM(CASE WHEN fm<0.35 THEN 1 ELSE 0 END) AS geringeKomplex FROM MacroDaten")publicHashMap<String,Double>getFm();@Query("SELECT SUM(CASE WHEN lesb>0.85 THEN 1 ELSE 0 END) AS hoheLesb,"+"SUM(CASE WHEN lesb BETWEEN 0.35 AND 0.85 THEN 1 ELSE 0 END) AS mittlereLesb,"+"SUM(CASE WHEN lesb<0.35 THEN 1 ELSE 0 END) AS geringeLesb FROM MacroDaten")publicHashMap<String,Double><String>getLesb();}
Leider bin ich mir nicht sicher ,welchen Rückgabetyp ich nehmen soll. Ich habe spontan HashMap <String,Double> genommen.
Weiter geht es mit dem Controller:
Allerdings wir mir leere Tabelle angezeigt und keine Fehler . Die gesuchten Werte gibt es in der DB.
Zwei Fragen :
1.Welchen Rückgabetyp soll ich im Repository nehmen ?
2.Wie kann ich die Werte in der Tabelle mit thymleaf zeigen?
publicinterfaceMacroDatenRepositoryextendsCrudRepository<MacroDaten,Long>{interfaceMacroDatenResult{DoublegetHoheKomplex();--int würde auch reichen, ist ja nur 0 oder 1DoublegetMittlereKomplex();DoublegetGeringeKomplex();}@Query("SELECT SUM(CASE WHEN fm>0.85 THEN 1 ELSE 0 END) AS hoheKomplex,"+"SUM(CASE WHEN fm BETWEEN 0.35 AND 0.85 THEN 1 ELSE 0 END) AS mittlereKomplex,"+"SUM(CASE WHEN fm<0.35 THEN 1 ELSE 0 END) AS geringeKomplex FROM MacroDaten")List<MacroDatenResult>getFm();...}
Das nennt sich "dynamic proxy", du benötigst also keine Klasse die MacroDatenResult implementiert, das macht Spring selbst. Du musst dabei genau auf die Spaltennamen achten, es kann sein du musst diese komplett klein schreiben "AS hohekomplex". Ich finde jetzt auf die Schnelle keinen Link dazu aber die Spring-Doku wird dir bestimmt weiterhelfen.
Übriges: Alles in einem Interface ist public - public String getFm(Model model) ist also bestenfalls doppelt-gemoppelt.
Die Abfrage liefert 3 key value Paare,die Summe aller Felder die mehr 0.85 fm Wert haben als hochkomplex ,die Summe aller Felder die zwieschen 0.35 und 0.85 als mittelkomplex und die Summe aller Felder bis 0.35 als geringkomplex .Deswegen bin ich auf HashMap gekommen,aber es klapt nicht ,wird nichts angezeigt.