前提:有时候在我们创建数据库中的字段名和所对应的实体类中的属性名会出现不一致的情况,这时候在进行相关操作的时候就会出现错误,现在来看看解决方法。
数据库中的字段名:
实体类:
这里的pwd与password名称不同。
进行查询的方法:
//根据name查询用户
User getUserByName(String name);
xml文件:
<select id="getUserByName" resultType="user"> select name,id,pwd from mybatis.user where name=#{name}; </select>
数据库中的数据:
测试方法:
public void testInsert(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); String name = "father"; User user = mapper.getUserByName(name); System.out.println(user); sqlSession.close(); }
此时查出来的结果是:
明显的看到,密码为null,而不是原表中的wilt
解决方式1:起别名
通过给pwd起别名为password的方式,可以得到原有的密码.
修改后的xml文件的代码:
<select id="getUserByName" resultType="user"> select name,id,pwd as password from mybatis.user where name=#{name}; </select>
此时的结果:
密码已经正确显示。
解决方式2:
在select等标签中,存在着resultMap这一选项
当我们使用resultMap时,可以避免使用起别名的方法。resultMap的用法是:在resultMap=" "中间给此resultMap起一个名字,接着,在Mapper所对应的配置文件中,添加resultMap这一标签:
标签中的id就为你所起的名字,type则填入返回对象的类。resultMap中的属性如上图填入即可。
此时的xml:
<resultMap id="UserMap" type="user"> <!--column:数据库中的字段名 property:实体类中的属性--> <result column="pwd" property="password"></result> </resultMap>
<select id="getUserByName" resultMap="UserMap"> select name,id,pwd from mybatis.user where name=#{name}; </select>
结果:
总结:
1.数据库中的字段名和实体类的属性名不同时,可以采用起别名和resultMap进行处理,推荐后者
2.使用resultMap时就不能使用resultType,两者不可同时出现
3.一个resultMap可以“绑定”多个方法