Dans MyBatis, Comment spécifier le type de résultat pour un SelectProvider
Ceci est mon premier post, à l'aide de mon mauvais anglais...
Je suis en utilisant MyBatis3.0
Dans une requête, j'ai utilisé SqlBuilder avec une méthode comme suit:
public class DataStatisticSqlBuilder extends SqlBuilder{
public String getDataQtyListSql(Map<String, Object> map){
et un mappeur de l'interface comme suit:
public interface DataStatisticMapper {
@SelectProvider(type=DataStatisticSqlBuilder.class, method="getDataQtyListSql")
public List<Map<String, Object>> getDataQtyList(@Param("groups")
List<DataStatisticSqlBuilder.Group> groups, @Param("quatity") Integer quatity, @Param("struct") Struct struct);
}
Quand j'ai appelé
session.getMapper(DataStatisticMapper.class).getDataQtyList(...some parameters)
j'ai obtenu le résultat suivant de sortie dans la console:
<== Columns: PROJECT, PRJ_COUNT, TAR_COUNT, SITE_COUNT, PARAM_COUNT
<== Row: project A, 1, 1, 0, 0
<== Row: project B, 1, 1, 0, 0
Fondée sur le dessus de la sortie, le résultat attendu doit être une Liste [Carte, plan, ...], mais le résultat est [null, null]. Semble que le résultat n'est pas mappé à HashMap. Comment définir le type de résultat sur HashMap sur cette requête?
Peut-être utiliser certaines annotations, mais je n'ai pas trouver.
Merci beaucoup.
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même [null, null] essayer de gérer certains sql générées de manière dynamique. Le mybatis manuel mentionne la SqlBuilder, mais ne suggère pas comment utiliser le sql. Je pense que votre problème pourrait être corrigé en ajoutant un @Résultats et @Résultat de l'annotation. Cela devrait fonctionner si le résultat colonnes sont toujours les mêmes, voir, par exemple, à la fin de @Exemple de résultats
Dans mon utilisation je ne sais pas lequel de colonnes il y a donc, ici, est ce que je l'ai finalement fait.
Dans mon mappeur de fichier xml:
${} au lieu de{} pour insérer la chaîne en tant que-est et de ne pas le traiter comme un jdbc ? le paramètre. C'est la clé de cette solution. Dans votre cas, ce serait le sql renvoyé par la @SelectProvider et vous souhaitez ajouter un @Param("stmt") pour le passage du réel sql à exécuter.
Dans le mybatis interface correspondante dans le fichier xml:
La ParameterObject est un simple haricot:
(@Data est de Projet De Lombok et génère des accesseurs/mutateurs)
Je peux maintenant appeler mon interface "dao", comme ceci:
ParameterObject aurait pu être juste une Carte avec un nom réservé pour l'instruction sql.
Maintenant que j'ai posté c'est quelqu'un d'autre s'il vous plaît poster une solution plus élégante ... 🙂