实体类的属性和数据库的字段不匹配

实体类

public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

数据库

image

我们发现这里实体类的属性和数据库的字段不对应(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'}
posted @ 2022-01-18 23:00  小罗要有出息  阅读(204)  评论(0编辑  收藏  举报