#java #spring-boot #mybatis
#Ява #пружинный ботинок #мыбатис
Вопрос:
Я новичок в Java web и перепробовал множество способов в Stack Overflow, чтобы решить эту проблему, но потерпел неудачу. Не могли бы вы мне помочь?
Интерфейс в моем коде такой:
public Listlt;Answergt; selectAnswerByUser(@Param("user") User user, @Param("id") Integer id);
где Answer
и User
являются двумя классами, которые я определил.
Картограф-это:
lt;select id="selectAnswerByUser" parameterType="java.util.Map" resultType="Answer"gt; select * from answer where exercise_id=#{id} and user_email='#{user.email}' lt;/selectgt;
где электронная почта-это переменная пользователя класса.
И это бросает:
nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='user.email', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (2 gt; number of parameters, which is 1).
Я понятия не имею об исключении.
Комментарии:
1. Удалите одинарные кавычки. MyBatis
#{}
заменяет заполнитель?
java.sql.PreparedStatement
, однако, если заполнитель заключен в одинарные кавычки, драйвер распознает его как строковый литерал.
Ответ №1:
Вы настраиваете параметр parameterType
parameterType="java.util.Map"
«когда», когда вы передаете два параметра «Пользователь» и «Целое число». Удалите parameterType="java.util.Map"
, и он должен отображать parameterTypes
«автоматически» на основе @Param
аннотации. Или попробуйте с parameterType="map"