ニキータBoyko:
私は私のプロジェクトで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?
しかし、私は最初に私の必要性は、(ユーザーが作成するので、それが)、悪い考えであること、だと思います。私は関数の引数で、「ログイン」および「パスワード」を使用しようとすると、私は例外を取ります:
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]
どのように私は私のクラスのユーザーのインスタンスを作成せずに入ってくるの引数を使用できますか?
AVE:
あなたは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のパラメータの名前解決が多少主な理由は歴史的な理由により複雑になります。
この参照してください。答えをあなたが興味を持っている場合。