按ID选择的MyBatis始终返回零

时间:2017-10-20 07:51:11

标签: java mysql orm mybatis

使用以下配置:

POJO:

public class Student {
    private int studentId;
    private String name;
    private String email;
    // getters and setters
}

StudentMapper.xml

...
<select id="findStudentById" parameterType="int" resultType="Student">
  SELECT student_id, name, email FROM Student WHERE studentId = #{studentId}
</select>
...

StudentMapper界面

public interface StudentMapper {
    ...
    Student findStudentById(int studentId);
    ...
}

问题是每当我运行StudentService.findStudentById(studentId)时(我没有把它放在这里)我每次都得到相同的数字(零)(student_id在我的table是auto_generated并从1开始而不是0)

编辑:但其他参数(姓名和电子邮件)已正确返回

2 个答案:

答案 0 :(得分:1)

默认情况下,MyBatis无法映射student_id => studentId。这里有多个选项:配置MyBatis将下划线转换为camelCase或使用resultMap

Config示例:

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

Result map示例:

<resultMap id="studentMap">
    <result property="studentId" column="student_id"/>
    <result property="name" column="name"/>
    <result property="email" column="email"/>
</resultMap>

答案 1 :(得分:1)

您没有向我们展示在数据库中插入数据的代码,因此我会猜测您可能做错了什么。虽然您在表中使用auto_generated列,但在插入Student数据时,您将向其发送int studentId。我还想象你没有为它定义任何值,因为你期望它是自动生成的,所以MyBatis会将一个int的默认值添加到student_id,即0。