@Test
public void selectOrderByIdLazy() {
//创建sqlsession
SqlSession session = sessionFactory.openSession();
try {
//发出主SQL
Orders orders = session.selectOne("com.lb.mapper.OrdersMapper.selectOrderByIdLazy",1);
//发出子SQL
System.out.println(orders.getPerson());
} catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
}
映射文件xml
<resultMap type="com.lb.meodel2.Orders" id="selectOrderByIdLazyRM" extends="BaseResultMap">
<association property="person" column="person_id" select="com.lb.mapper.PersonMapper.selectPersonById">
</association>
</resultMap>
<select id="selectOrderByIdLazy" parameterType="int" resultMap="selectOrderByIdLazyRM">
select * from orders o where o.person_id = #{orderId}
</select>
解决方法:
第一种方法:
原因是返回的时候返回了多个值
在SQL语句后添加 limit 1 select * from order o where o.person_id = #{orderId} limit1
<resultMap type="com.lb.meodel2.Orders" id="selectOrderByIdLazyRM" extends="BaseResultMap">
<association property="person" column="person_id" select="com.lb.mapper.PersonMapper.selectPersonById">
</association>
</resultMap>
<select id="selectOrderByIdLazy" parameterType="int" resultMap="selectOrderByIdLazyRM">
select * from orders o where o.person_id = #{orderId} limit 1
</select>
第二种方法:
- 把Mybatis对应的mapper接口的返回值修改为List
@Test
public void selectOrderByIdLazy() {
//创建sqlsession
SqlSession session = sessionFactory.openSession();
try {
//发出主SQL
List<Orders> orders = session.selectList("com.lb.mapper.OrdersMapper.selectOrderByIdLazy",1);
for (Orders orders2 : orders) {
//发出子SQL
System.out.println(orders2);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
}