详细:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps
属性名和字段名不一致,我们一般都会按照约定去设计数据的,但是也难免瞎起名字
1、Java中的实体类设计
public class User { private int id; //id private String name; //姓名,数据库为username private String password; //密码,一致 //构造 //set/get //toString() }
2、mapper
//根据id查询用户 User selectUserById(int id);
3、mapper映射文件
<select id="selectUserById" resultType="user"> select * from user where id = #{id} </select>
4、测试
@Test public void testSelectUserById() { UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); }
5、结果
User{id=1, name='null', password='123'}
查询出来发现 name为空 . 说明出现了问题!
6、分析
select * from user where id = #{id}
可以看做 select id,username,password from user where id = #{id}
mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 利用反射去对应的实体类中查找 相应列名的set方法设值 ,当然找不到u
7、解决方案
(1)
(2)使用结果集映射->ResultMap 【推荐】