解决属性名和字段名不一致的问题:
DAO接口
public interface UserMapper {
//根据ID查询用户
User getUserById(int id); //返回值 取名(传递参数)
}
xml配置文件
<mapper namespace="com.xiao.dao.UserMapper">
<!--根据id查询结果,parameterType参数类型-->
<select id="getUserById" resultType="com.xiao.pojo.User" parameterType="int">
select * from mybatis.user where id=#{id};
</select>
</mapper>
测试类
public class UserDaoTest {
@Test
public void test(){
//1.获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//2.执行SQL
// 方式一:getMapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
User user = userDao.getUserById(1);
System.out.println(user);
//关闭sqlSession
sqlSession.close();
}
}
运行程序发现,password='null'
原因在于——
select * from mybatis.user where id=#{id};
等价于
select id,name,pwd from mybatis.user where id=#{id};
当字段不匹配时,将pwd
置为null
值
解决方案一:起别名
<select id="getUserById" resultType="com.xiao.pojo.User" parameterType="int">
select id,name,pwd as password from mybatis.user where id=#{id};
</select>
解决方案二:ResultMap结果集映射
<mapper namespace="com.xiao.dao.UserMapper">
<!--将结果集映射为User-->
<resultMap id="UserMap" type="User">
<!--column数据库中的字段,property实体类中的属性-->
<!-- <result column="id" property="id"/>
<result column="name" property="name"/>-->
<result column="pwd" property="password"/>
</resultMap>
<!--根据id查询结果,parameterType参数类型-->
<select id="getUserById" resultMap="UserMap">
select * from mybatis.user where id=#{id};
</select>
</mapper>