Ho una classe (Java) con molti campi di istanza (molti dei quali sono facoltativi). Vorrei che tutti i campi (quindi di classe) fossero immutabili. Quindi, mi piacerebbe usare il Pattern Builder per costruire istanze della classe.Posso configurare myBatis per creare un'istanza di una classe utilizzando il pattern Builder?
Posso configurare myBatis per creare un'istanza di una classe utilizzando il modello di generatore? So che potrei avere myBatis restituire una mappa e usare quella mappa per costruire nell'istanza nel mio codice. Tuttavia, sto cercando un modo per configurare questa mappatura (o usare qualche convenzione) simile a come posso creare un'istanza tramite l'uso di Java Beans e costruttori.
Edit (per includere un esempio)
Ecco un esempio:
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.
}
}
Poi, ho un mapper come:
<!-- 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>
Infine, ho l'interfaccia mapper :
package com.example.persistence.CarFactsMapper;
public interface CarFactsMapper{
List<CarFacts> selectCarFacts();
}
Vorrei anche essere in grado di creare istanze utilizzando un metodo factory statico tramite myBatis. Ad esempio:
public final class Person {
private final String lastName;
private final String firstName;
private Person(String lastName, String firstName) {
this.lastName = lastName;
this.firstName = firstName;
}
public Person newInstance(String lastName, String firstName) {
return new Person(lastName, firstName);
}
}
In particolare, come posso chiamare myBatis newInstance (String, String)?
Questo non risponde alla domanda. –