ssm之关联查询
文章目录
一对一查询
方法一
使用 resultType,定义订单信息 po 类,此 po 类中包括了订单信息和用户信息
sql语句
SELECT orders.*, user.username, user.address FROM orders, user WHERE orders.user_id=user.id
定义 po 类
OrdersCustom 类继承 Orders 类后 OrdersCustom 类包括了 Orders 类的所有字段,只需要定义 用户的信息字段即可。
public class OrdersCustom extends Orders {
private String username;// 用户名称
private String address;// 用户地址
get/set...
}
Mapper.xml
<!-- 查询所有订单信息 -->
<select id="findOrdersList" resultType="cn.itcast.mybatis.po.OrdersCustom">
SELECT orders.*, user.username, user.address FROM orders,user WHERE orders.user_id = user.id
</select>
Mapper 接口
public List<OrdersCustom> findOrdersList() throws Exception;
测试
public void testfindOrdersList()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//查询订单信息
List<OrdersCustom> list = userMapper.findOrdersList();
System.out.println(list);
//关闭session
session.close();
}
定义专门的 po 类作为输出类型,其中定义了 sql 查询结果集所有的字段。此方法较为简单和常用。
方法二
使用 resultMap,定义专门的 resultMap 用于映射一对一查询结果。
sql语句
SELECT orders.*, user.username, user.address FROM orders, user WHERE orders.user_id=user.id
定义 po 类
在 Orders 类中加入 User 属性,user 属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个 User 对象存储关联查询的用户信息。
Mapper.xml
<select id="findOrdersListResultMap" resultMap="userordermap">
SELECT orders.*, user.username, user.address FROM orders,user WHERE orders.user_id = user.id
</select>
这里 resultMap 指定 userordermap 。
定义 resultMap
需要关联查询映射的是用户信息,使用 association 将用户信息映射到订单对象的用户属性中。
<!-- 订单信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userordermap">
<!-- 这里的id,是mybatis在进行一对一查询时将user字段映射为user对象时要使用, 必须写 -->
<id property="id" column="id"/>
<result property="user_id" column