1.一对一关联查询
需求:查询出每条orders记录和其关联的user信息
在orders实体类中添加属性与set、get方法
/** * 测试1对1关联查询 */ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; }
接口:
public interface OrdersMapper { /** * 测试1对1关联查询 */ public List<Orders> findAllOrdersCNUser(); }
映射:
<!-- 1对1的返回map 不能省略映射,必须把所有想要查询出来的属性都手动映射 --> <resultMap type="Orders" id="orders"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="createtime"/> <result property="note" column="note"/> <!-- 1对1属性 --> <!-- javaType必须写!! --> <association property="user" javaType="user"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="sex" column="sex"/> <result property="birthday" column="birthday"/> <result property="address" column="address"/> </association> </resultMap> <!-- 测试一对1关联查询 --> <select id="findAllOrdersCNUser" resultMap="orders"> select * from orders o left join user u on o.user_id=u.id </select>
测试:
/** * 1对1关联查询 */ @Test public void m01() { // 获取sqlSession,和Spring整理后由Spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class); // 执行查询 List<Orders> list = ordersMapper.findAllOrdersCNUser(); for (Orders orders : list) { System.out.println(orders); System.out.println(orders.getUser()); } // 和Spring整理后由Spring管理 sqlSession.close(); }
2.一对多关联查询
需求:查询出所有的user和与其对应的orders信息
在user实体类中添加属性和set、get方法
/** * 测试1对多 */ List<Orders> ordersList; public List<Orders> getOrdersList() { return ordersList; } public void setOrdersList(List<Orders> ordersList) { this.ordersList = ordersList; }
接口:
/** * 测试1对多 */ public List<User> findAllUserCNOrders();
映射:
<!-- 1对多返回映射 --> <resultMap type="User" id="user"> <id property="id" column="id" /> <result property="username" column="username" /> <result property="sex" column="sex" /> <result property="birthday" column="birthday" /> <result property="address" column="address" />
<!-- javaType && ofType必须写!! --> <collection property="ordersList" javaType="List" ofType="Orders"> <id property="id" column="id" /> <result property="userId" column="user_id" /> <result property="number" column="number" /> <result property="createtime" column="createtime" /> <result property="note" column="note" /> </collection> </resultMap> <!-- 测试1对多 --> <select id="findAllUserCNOrders" resultMap="user"> select * from user u left join orders o on u.id = o.user_id </select>
测试:
/** * 测试1对多 */ @Test public void m01() { // 获取sqlSession,和Spring整理后由Spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 执行查询 List<User> list = userMapper.findAllUserCNOrders(); for (User user : list) { System.out.println(user); System.out.println(user.getOrdersList()); } // 和Spring整理后由Spring管理 sqlSession.close(); }