从运行结果上可以看到, 我们SQL语句中, 查询了delete_flag, create_time, update_time, 但是这几个属性却没有赋值
MyBatis 会根据方法的返回结果进行赋值.
方法用对象 UserInfo接收返回结果, MySQL 查询出来数据为⼀条, 就会主动赋值给对象.
方法用List接收返回结果, MySQL 查询出来数据为⼀条或多条时, 也会主动赋值给List.
但如果MySQL 查询返回多条, 但是方法使⽤UserInfo接收, MyBatis执行就会报错
缘故原由分析:
当主动映射查询结果时,MyBatis 会获取结果中返回的列名并在 Java 类中查找相同名字的属性(忽略巨细写)。这意味着如果发现了 ID 列和 id 属性,MyBatis 会将列 ID 的值赋给 id 属性
解决办法:
起别名
结果映射
开启驼峰命名
3.6.1、起别名
在SQL语句中,给列名起别名,保持别名和实体类属性名⼀样
@Select("select id, username, `password`, age, gender, phone, delete_flag as deleteFlag,create_time as createTime, update_time as updateTime from userinfo")
@Select("select id, username, `password`, age, gender, phone, delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from userinfo")