Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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")
public class MacroDaten implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="macro_daten_id")
private int macroDatenId;
private double aufw;
private int bloc;
private int boc;
private double fm;
private double lesb;
private int loc;....
MacroDatenRepository wo ich versuche 2 Methoden zu implementieren die mir benötigte Daten liefern werden:
Java:
public interface MacroDatenRepository extends CrudRepository<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")
public HashMap <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")
public HashMap <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:
Java:
@Controller
public class DashController {
@Autowired
private MacroDatenRepository mcRepository;
@PostMapping("/dash")
public String getFm(Model model) {
model.addAttribute("fm",mcRepository.getFm());
model.addAttribute("lesb",mcRepository.getLesb());
return "../blocks/Dashboard";
}
}
und im View versuche ich mit thymleaf die gelieferten Werte zu zeigen:
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?
public interface MacroDatenRepository extends CrudRepository<MacroDaten, Long>{
interface MacroDatenResult {
Double getHoheKomplex(); -- int würde auch reichen, ist ja nur 0 oder 1
Double getMittlereKomplex();
Double getGeringeKomplex();
}
@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.