mybatis中的字段名与属性名不一致的情况

在实际开发中有时候会遇到数据库表中的字段名与实体类中的属性名不一致的情况,例如在t_student表中有一个字段名叫做password,然后在其对应的Student实体类中叫做pwd,此时要想进行查询操作的话,可以通过以下两种方式解决

在SQL语句中使用别名

<select id="selectStudentById" resultType="student">
    SELECT id,name,age,score,password pwd FROM t_student where id=#{id}
</select>

在查询password的时候将其命名一个别名pwd,此时mybatis可以正常查询。

使用结果映射 resultMap

这里的resultMap实际上是将数据库表中的字段与实体类中的属性建立一个映射关系,这样子,即使两者名字不一致,mybatis也会根据resultMap中的映射关系正常执行。

<resultMap id="studentMapper" type="student">
    <id column="id" property="id"/>
    <result column="password" property="pwd"/>
</resultMap>

<select id="selectStudentById" resultMap="studentMapper">
    SELECT id,name,age,score,password FROM t_student where id=#{id}
</select>

上面示例中通过resultMap来创建了映射关系,id设置为studentMapper,然后在select查询语句中指定属性resultMap的值为studentMapper,这样子就不用在SQL语句中使用别名了。一般在较为复杂的SQL语句中会使用resultMap。

在resultMap中添加了一个id的属性来指定主键,这样子可以提高mybatis的查询性能。resultMap中的type属性用来指定要映射的实体类。