MyBatis问题:一个奇怪的问题(Unknown column ‘userName‘ in ‘field list‘)(已解决,乌龙问题)

本文记录了一次在使用MyBatis Generator生成代码后,执行SQL查询时遇到的MySQLSyntaxErrorException,错误提示为'userName'列不存在。通过检查数据库字段、实体类和XML配置文件,确认所有部分都正确包含'userName'字段。最终发现是数据库连接错误,实际查询的数据库中并无该字段,从而解决了问题。
摘要由CSDN通过智能技术生成

当前mybatis的版本:

1. 声明

当前内容主要用于记录使用MyBatis Generator生成器生成代码后,使用MyBatis执行的时候出现的一个问题

当前异常:
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'userName' in 'field list' ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'userName' in 'field list'] with root cause

分析异常:
说有一个userName的列不在字段列表中,但是实际上数据库和实体类中都有这个名词,并且类型一致

pom文件

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.2.5.RELEASE</version><!-- 父类中的版本控制所有的依赖包的版本信息 -->
	<relativePath />
</parent>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 导入mybatis的依赖 -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>

2.问题再现

1.当前数据库字段
在这里插入图片描述
数据库字段中有userName字段

2.实体类中:

@Data
@NoArgsConstructor
public class User {
    private Integer id;

    private String userName;

    private String loginName;

    private String loginPwd;

    private String userType;

    private Integer userGroupId;

    private String home;

    private String email;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    private Integer createUserId;

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", userName=").append(userName);
        sb.append(", loginName=").append(loginName);
        sb.append(", loginPwd=").append(loginPwd);
        sb.append(", userType=").append(userType);
        sb.append(", userGroupId=").append(userGroupId);
        sb.append(", home=").append(home);
        sb.append(", email=").append(email);
        sb.append(", createTime=").append(createTime);
        sb.append(", createUserId=").append(createUserId);
        sb.append("]");
        return sb.toString();
    }
}

全部是MyBatis Generator自动生成的,发现也有 private String userName;这个属性,这里使用Lombok

3.xml配置文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.app.dao.UserMapper">
  <resultMap id="BaseResultMap" type="com.app.entity.User">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="userName" jdbcType="VARCHAR" property="userName" />
    <result column="loginName" jdbcType="VARCHAR" property="loginName" />
    <result column="loginPwd" jdbcType="VARCHAR" property="loginPwd" />
    <result column="userType" jdbcType="VARCHAR" property="userType" />
    <result column="userGroupId" jdbcType="INTEGER" property="userGroupId" />
    <result column="home" jdbcType="VARCHAR" property="home" />
    <result column="email" jdbcType="VARCHAR" property="email" />
    <result column="createTime" jdbcType="TIMESTAMP" property="createTime" />
    <result column="createUserId" jdbcType="INTEGER" property="createUserId" />
  </resultMap>
  <sql id="Base_Column_List">
    id, userName, loginName, loginPwd, userType, userGroupId, home, email, createTime, 
    createUserId
  </sql>
  <select id="selectAllUsingPage" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from user
    <if test="limitStart != null and limitSize >= 0">
      limit #{limitStart} , #{limitSize}
    </if>
  </select>
</mapper>

也是具有userName属性的,发现都没有问题

4.sql执行中无问题
在这里插入图片描述

3.执行结果

个人感觉都没有问题,但是还是报错
在这里插入图片描述
反正就是说你的userName字段不存在…

4.解决办法

这里解决放解决办法

1.如果使用全部查询可以使用select * 方式代替,结果发现不报错了!

 <select id="selectAllUsingPage" resultType="com.app.entity.User">
    SELECT 
	<!-- id, `userName` AS 'userName', loginName, loginPwd, userType, userGroupId, home, email, createTime, 
	createUserId -->
	*
	FROM `user`
    <if test="limitStart != null and limitSize >= 0">
      limit #{limitStart} , #{limitSize}
    </if>
  </select>

执行结果:
在这里插入图片描述

但是只要执行查询userName就会报错,这个不会是一个bug吧,查询一个字段userName一样报错

结果发现是一个乌龙:当前访问的数据库中没有字段,而本人认为是访问的是这个字段,通过分析发现原来访问的数据库完全都不一致,test表中的user无userName属性,而实际要查询的为my_web_file_system中的userName属性,尴尬!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值