Mam klasy (Java) z wieloma polami instancji (z których wiele jest opcjonalne). Chciałbym, żeby wszystkie pola (w tym klasa) były niezmienne. Tak więc chciałbym użyć wzorca budowniczego do konstruowania instancji klasy.Czy mogę skonfigurować myBatis, aby utworzyć instancję klasy za pomocą wzorca Buildera?
Czy mogę skonfigurować myBatis, aby utworzyć instancję klasy, używając wzorca budowania? Wiem, że mógłbym przywrócić mapę myspace i użyć tej mapy do zbudowania instancji w moim kodzie. Jednak szukam sposobu na skonfigurowanie tego odwzorowania (lub użycia pewnej konwencji) podobnej do tego, jak można utworzyć instancję za pomocą komponentów Java Beans i konstruktorów.
Edit (w tym przykładowe)
Oto przykład:
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.
}
}
Następnie mam mapowania jako:
<!-- 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>
Wreszcie, mam interfejs odwzorowujący :
package com.example.persistence.CarFactsMapper;
public interface CarFactsMapper{
List<CarFacts> selectCarFacts();
}
Chciałbym również móc tworzyć instancje za pomocą statycznej metody fabularnej za pośrednictwem myBatis. Na przykład:
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);
}
}
W szczególności, w jaki sposób mogę mieć wywołanie myBatis newInstance (String, String)?
To nie odpowiada na pytanie. –