8
votes

Ibatis / MyBatis choisissez dynamiquement sans avoir besoin de créer de POJO / MAPPER

Y a-t-il un moyen de sélectionner / mettre à jour / supprimer de manière dynamique en utilisant ibatis / mybatis?

Quand je dis "dynamiquement", cela signifie que je ne veux pas créer de pojo / datamapper du tout.

Un exemple d'URL serait accueilli.


0 commentaires

4 Réponses :


0
votes

Oui, il devrait être possible de construire le mappage en cours d'exécution via une API et d'utiliser des cartes au lieu de classes d'entité.


0 commentaires

13
votes

Oui, il suffit de définir le résultantType code> attribut sur mapper code> et les données de la table seront placées dans un hachema de noms de colonnes à des valeurs. Si la requête renvoie plus d'une rangée, les lignes mappées seront placées dans une liste. Si vous souhaitez sélectionner une seule colonne, vous pouvez obtenir juste cette valeur (en tant que chaîne, int, etc.) ou en tant que liste.

<select id="test1" resultType="map">select * from user</select>
<select id="test2" resultType="map" parameterType="int">
  select * from user where id=#{value}</select>
<select id="test3" resultType="string">select name from user</select>
...
// returns a list of maps
List test = sqlSession.selectList("test1");

// returns a single map
Object map = sqlSession.selectOne("test2", 0);

// returns a list of strings
List names = sqlSession.selectList("test3");


1 commentaires

La différence est entre SELECT * et Sélectionnez le nom , en supposant que le nom est Varcharne. Il n'est pas nécessaire que ce ne soit pas à être *, mais aussi longtemps que vous avez besoin de plus d'une colonne, les résultats doivent être de la carte (ou un pojo). Si vous sélectionnez seulement une colonne, définissez le résultat des résultats sur n'importe quel type de colonne.



2
votes

L'approche suivante peut être utile. Dis, vous avez une interface de sélection générique, comme:

<insert id='insertPKs'>
    INSERT INTO requiredTable
    <include refid="Common.includeInsertPkSelect">
        <property name="id" value="entityId"/>
        <property name="entityTable" value="entityTable"/>
    </include>
    <include refid="Common.includeInsertPkWhere">
        <property name="id" value="entityId"/>
        <property name="entityTable" value="entityTable"/>
    </include>
</insert>


0 commentaires

0
votes

Oui, vous pouvez faire sélectionner / mettre à jour / supprimer sans utiliser Pojo. En mybatis, vous pouvez écrire votre requête dans mapper XML et définir le résultatType qui sera renvoyé à partir de l'instruction SQL et stocker cela dans des objets.

Par exemple, P>

  List<Map<String,Object>> results = session.selectList("data.fetch");


0 commentaires