Je suis en train d'utiliser mybatis dans mon projet. Pour la méthode « Select », je carte des résultats
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="resultMap">
<resultMap id="userMap" type="db.entities.User">
<result column="id" property="id"/>
<result column="login" property="login"/>
<result column="password" property="password"/>
<result column="service_profile" property="serviceProfile.id"/>
<result column="driver_profile" property="driverProfile.id"/>
<result column="premium_expiring_time" property="premiumExpiringDate"/>
<result column="registration_date" property="registrationDate"/>
<result column="last_visit_date" property="lastVisitDate"/>
<result column="authorization_key" property="authorizationKey"/>
<result column="last_altitude" property="lastGeoAltitude"/>
<result column="last_longitude" property="lastGeoLongitude"/>
</resultMap>
</mapper>
Et cela fonctionne, quand je reçois de l'instance l'argument de ma fonction de ma classe
@ResultMap("resultMap.userMap")
@Select("SELECT * FROM users WHERE login = #{login} AND password = #{password}")
fun getUser(user: User): User?
Mais je pense qu'il est mauvaise idée, parce que d'abord je dois créer l'utilisateur (). Lorsque je tente d'utiliser « login » et « mot de passe » dans les arguments de la fonction, je prends une exception:
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'login' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'login' not found. Available parameters are [arg1, arg0, param1, param2]
Comment puis-je utiliser des arguments entrants sans créer instance de ma classe utilisateur?
Vous devez 1) ajouter @Param
à chaque paramètre ou 2) ajouter l' option du compilateur Kotlin -java-parameters
.
1) se présente comme suit:
@ResultMap("resultMap.userMap")
@Select("SELECT * FROM users WHERE login = #{login} AND password = #{password}")
fun getUser(
@Param("login") login: String,
@Param("password") password: String): User?
2) nécessite mybatis 3.4.1+ et Kotlin 1.1+.
Résolution de nom du paramètre de mybatis est quelque peu compliquée surtout pour des raisons historiques.
Voir cette réponse si vous êtes intéressé.