mybatis0203 一对一查询 resultMap实现
resultType实现的时候先要确定po类(数据库类)满不满足要求,如果不满足就要自定义一个pojo类(工具类)。
resultMap提供一对一关联查询的映射和一对多关联查询映射,一对一映射思路:将关联查询的信息映射到pojo中,如下:
在Orders类中创建一个User属性,将关联查询的信息映射到User属性中。
mapper.xml
<!-- 一对一查询resultMap --> <resultMap type="orders" id="ordersUserResultMap"> <!-- 完成了订单信息Order的映射配置 --> <id column="id" property="id"/> <!-- Orders的id,整个查询的唯一标识就是Orders的id --> <result column="user_id" property="userId"/><!-- Orders的userId--> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <!-- 下边完成关联信息User的映射 association:用于对关联信息User映射到单个pojo(Orders) property:要将关联信息映射到orders的哪个属性中 javaType:关联信息映射到orders的属性的类型,是user的类型 --> <association property="user" javaType="user"> <!-- id:关联信息User的唯 一标识 --> <!-- property: 要映射到user的哪个属性中--> <id column="user_id" property="id"/>user_id <!-- result就是普通列的映射 --> <result column="username" property="username"/> <result column="sex" property="sex"/> </association> </resultMap>
1.1.1 mapper.java
测试
@Test public void testFindOrderUserListResultMap() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建mapper代理对象 OrdersMapperCustom ordersMapperCustom = sqlSession .getMapper(OrdersMapperCustom.class); // 调用方法 List<Orders> list = ordersMapperCustom.findOrderUserListResultMap(); System.out.println(list); }
1.2小结
resultType:要自定义pojo 保证sql查询列和pojo的属性对应,这种方法相对较简单,所以应用广泛。
resultMap:使用association完成一对一映射,需要配置一个resultMap,过程有点复杂,如果要实现延迟加载就只能用resultMap实现 ,如果为了方便对关联信息进行解析,也可以用association将关联信息映射到pojo中方便解析。