There is no getter for property named ‘username‘ in ‘class com.itheima.domain.User‘

本文介绍了一个关于MyBatis映射配置文件中属性名称不匹配导致的问题及其解决方案。问题出现在尝试通过VO(Value Object)进行查询时,XML配置文件中的属性名与Java实体类属性名不符。文章详细解释了错误的原因,并提供了正确的配置方法。

There is no getter for property named ‘username’ in ‘class com.itheima.domain.User’

  • 原因
  • 解决办法

一:原因:一开始以为的是User没有写get方法,后来分析觉得不是,因为一开始是用自动生成的

  • 测试代码(Test)
    public  void testFindByVO(){
        QueryVo queryVo = new QueryVo();
        User user = new User();
        user.setUserName("%王%");
        queryVo.setUser(user);
        List<User> users = userDao.findUserByVo(queryVo);
        for (User user1 : users) {
            System.out.println(user1);
        }
  • queryVo
package com.itheima.domain;

public class QueryVo {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

  • Mybatis-xml配置文件
    <!-- 根据queryVo的条件查询用户 -->
    <select id="findUserByVo" parameterType="com.itheima.domain.QueryVo" resultMap="userMap">
        select * from user where username like #{user.username}
    </select>
  • User实体类
package com.itheima.domain;

import java.io.Serializable;
import java.util.Date;


public class User implements Serializable {

    private Integer userId;
    private String userName;
    private String userAddress;
    private String userSex;
    private Date userBirthday;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public Date getUserBirthday() {
        return userBirthday;
    }

    public void setUserBirthday(Date userBirthday) {
        this.userBirthday = userBirthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userAddress='" + userAddress + '\'' +
                ", userSex='" + userSex + '\'' +
                ", userBirthday=" + userBirthday +
                '}';
    }
}

二:解决办法,仔细发现xml文件中映射配置文件(user.username中的username错了,应修改为user.userName)

在配置映射文件中需要注意的是表名跟实体类的表名相同,如果不同可以使用的是resultMap配置

  • resultMap配置
    <resultMap id="userMap" type="uSer">
        <!-- 主键字段的对应 -->
        <id property="userId" column="id"></id>
        <!--非主键字段的对应-->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>

萌新请求关注QAQ

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值