Mybatis_ResultMap结果集映射(基础)
程序员文章站
2024-03-03 19:17:22
...
ResultMap结果集映射
解决属性名和字段名不一致的问题,之前是实体类和数据库字段一致的,现在测试不一致的情况
这会涉及到一个mybatis自动映射的问题,和手动映射的方法
-
数据库字段和实体类名字不同,产生的错误
-
@Data @AllArgsConstructor @NoArgsConstructor @ToString @Alias("hello") public class User { private int id; private String name; private String password; }
-
字段名pwd不同,运行产生的结果也不同,这里顺便玩了下设置别名
-
@Test public void Test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User userById = mapper.getUserById(1); System.out.println(userById); sqlSession.close(); }
-
运行出来的结果pwd字段没有查询到
-
<mapper namespace="com.haoyun.dao.UserMapper"> <select id="getUserById" parameterType="int" resultType="hello" > select * from mybatis.user where id = #{id} </select> </mapper>
-
最蠢的解决方法就是设置sql语句的别名
-
<select id="getUserById" parameterType="int" resultType="hello" > select id,name,pwd password from mybatis.user where id = #{id} </select>
-
当然用的不是这种方法
-
现在resultType是具体的类型
实现resultMap
-
结果集映射
-
将数据库的字段,映射成Java实体类的属性
-
<mapper namespace="com.haoyun.dao.UserMapper"> <resultMap id="UserMap" type="hello"> <result column="id" property="id"/> <result column="name" property="name"/> <result column="pwd" property="password"/> </resultMap> <select id="getUserById" parameterType="int" resultMap="UserMap" > select * from mybatis.user where id = #{id} </select> </mapper>
-
这是比较简单的,要编写比较难的就需要在resultMap进行嵌套
-
对于简单的语句并不用写resultMap语句,有些是自己已经映射好了的,比如id和id,name和name字段名和属性名都是一样的,只要写不一样的就好
-
<resultMap id="UserMap" type="hello"> <result column="pwd" property="password"/> </resultMap>
-
已经自动将字段名映射到对应的实体类属性上了
-
如果世界总是这么简单就好了
之后讲一对多和多对一的例子,会更需要resultMap