需求:
查询订单(Order)信息并且关联查询用户(User)信息。
如果先查询订单(Order)信息即可满足要求,当我们需要查询用户(User)信息时再查询订单(order)信息
OrderMapper.xml映射文件
<mapper namespace="com.itheima.mapper.OrderMapper">
<resultMap id="orderMapper" type="order">
<!-- 封装订单信息 -->
<id property="id" column="id"/>
<result property="ordertime" column="ordertime"/>
<result property="total" column="total"/>
<!-- select: 调用namespace+id对应的SQL语句,执行查询 -->
<!-- fetchType="lazy": 延迟加载 -->
<association property="user" javaType="user" column="uid"
select="com.itheima.dao.UserMapper.findById" fetchType="lazy">
<id property="id" column="uid"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
</association>
</resultMap>
<select id="findAll" resultMap="orderMapper">
select * from orders
</select>
</mapper>
UserMapper.xml映射文件
<mapper namespace="com.itheima.dao.UserDao">
<!--实现延迟加载的效果, 提供findById查询SQL-->
<select id="findById" parameterType="int" resultType="user">
select * from user where id = #{id}
</select>
</mapper>
java代码执行
public interface OrderMapper {
public List<Order> findAll();
}
public interface UserMapper {
public User findById(int id);
}
//测试只查订单信息不查用户信息
public class OrderDemo {
private SqlSession sqlSession;
@Before
public void init() throws IOException {
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
sqlSession = factory.openSession();
}
@After
public void release() {
session.commit();
session.close();
}
@Test
public void findAll() {
List<Order> orders = mapper.findAll();
for (Order order : orders) {
System.out.println(order.getOrdertime()+"---"+order.getTotal());
//System.out.println(order.getOrdertime()+"---"+order.getUser());
}
}
}
原文:https://www.cnblogs.com/60kmph/p/14051531.html