实体类的属性和数据库的字段不匹配
实体类
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
数据库
我们发现这里实体类的属性和数据库的字段不对应(password和pwd)
运行结果
User{id=3, name='李四', password='null'}
User{id=4, name='李三', password='null'}
这里的password是空的。原因是MyBatis自带一个类型构造器,会在‘背地里’创建与数据库相对应的实体类属性,所以password没有对应的数据库字段
解决方法
1,给pwd取别名为password
<select id="getUserByID2" resultType="user" parameterType="Map">
select id,name,pwd as password from user where name like "%" #{name} "%"
</select>
运行结果
User{id=3, name='李四', password='1231233'}
User{id=4, name='李三', password='123123'}
2,应用resultMap
<resultMap id="userMap" type="User">
<result column="pwd" property="password"></result>
</resultMap>
<select id="getUserByID2" resultMap="userMap">
select * from user where name like "%" #{name} "%"
</select>
注意这里的 type="User",我取了别名,如果没有取别名,要把类的绝对路径写全
运行结果
User{id=3, name='李四', password='1231233'}
User{id=4, name='李三', password='123123'}