myBatis. ResultMap и свойства

Опитвам се да използвам myBatis в моя проект. За метода „Избор“ използвах карта на резултатите

    <?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>

И работи, когато получа от екземпляра на аргумента на моята функция от моя клас

@ResultMap("resultMap.userMap")
    @Select("SELECT * FROM users WHERE login = #{login} AND password = #{password}")
    fun getUser(user: User): User?

Но мисля, че това е лоша идея, защото първо трябва да създам User(). Когато се опитвам да използвам „login“ и „password“ в аргументите на функцията, правя изключение:

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]

Как мога да използвам входящи аргументи, без да създавам екземпляр на моя клас User?


person Nikita Boyko    schedule 02.04.2020    source източник


Отговори (1)


Трябва да 1) добавите @Param към всеки параметър или 2) да добавите опция за компилатор на Kotlin -java-parameters.

1) ще изглежда по следния начин:

@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) изисква MyBatis 3.4.1+ и Kotlin 1.1+.

Разрешаването на имена на параметри на MyBatis е донякъде сложно главно поради исторически причини.
Вижте този отговор, ако се интересувате.

person ave    schedule 02.04.2020
comment
Благодаря ти много! =) - person Nikita Boyko; 02.04.2020