Ich habe eine (Java) -Klasse mit vielen Instanzfeldern (von denen viele optional sind). Ich möchte, dass alle Felder (also die Klasse) unveränderlich sind. Also möchte ich das Builder-Muster zum Konstruieren von Instanzen der Klasse verwenden.Kann ich myBatis so konfigurieren, dass mithilfe des Builder-Musters eine Instanz einer Klasse erstellt wird?
Kann ich myBatis konfigurieren, um eine Instanz einer Klasse mit dem Builder-Muster zu erstellen? Ich weiß, dass ich myBatis eine Karte zurückgeben und diese Karte verwenden könnte, um die Instanz in meinem Code zu erstellen. Ich bin jedoch auf der Suche nach einer Möglichkeit, diese Zuordnung zu konfigurieren (oder eine Konvention zu verwenden), ähnlich wie eine Instanz über die Verwendung von Java Beans und Konstruktoren erstellt werden kann.
Edit (enthalten ein Beispiel)
Hier ist ein Beispiel:
package com.example.model;
// domain model class with builder
public final class CarFacts {
private final double price;
private final double numDoors;
private final String make;
private final String model;
private final String previousOwner;
private final String description;
public static class Builder {
// required params
private final double price;
private final String make;
private final String model;
// optional params
private final String previousOwner;
private final String description;
private final double numDoors;
public Builder(double price, String make, String model) {
this.price = price;
this.make = make;
this.model = model;
}
public Builder previousOwner(String previousOwner) {
this.previousOwner = previousOwner;
return this;
}
// other methods for optional param
public CarFacts build() {
return new CarFacts(this);
}
}
private CarFacts(Builder builder) {
this.price = builder.price;
//etc.
}
}
Dann habe ich eine Mapper als:
<!-- this doesn't work but I think h3adache suggest that I could have the resultType
be com.example.model.CarFacts.Builder and use the Builder constructor. But I'm not sure how
I would call the methods (such previousOwner(String)) to populate optional params -->
<mapper namespace="com.example.persistence.CarFactsMapper">
<select id="selectCarFacts" resultType="com.example.model.CarFacts">
select *
from CarFacts
</select>
</mapper>
Schließlich habe ich die Mapper-Schnittstelle :
package com.example.persistence.CarFactsMapper;
public interface CarFactsMapper{
List<CarFacts> selectCarFacts();
}
Ich möchte auch Instanzen mit einer statischen Factory-Methode über myBatis erstellen können. Zum Beispiel:
Speziell, wie kann ich myBatis Aufruf newInstance (String, String) haben?
Dies beantwortet die Frage nicht. –