1、映射接口

public interface ArticleMapper
{

    @Select("SELECT * FROM tb_article WHERE id IN (SELECT article_id FROM tb_item WHERE order_id = #{id} ) ")
    List<Article> selectByOrderId(Integer order_id);

}
public interface OrderMapper
{

    @Select("SELECT * FROM tb_order WHERE ID = #{id}")
    @Results(
    { @Result(id = true, column = "id", property = "id"), @Result(column = "code", property = "code"),
            @Result(column = "total", property = "total"),
            @Result(column = "user_id", property = "user", one = @One(select = "cn.mybatis.mydemo6.mapper.UserMapper.selectById", fetchType = FetchType.EAGER)),
            @Result(column = "id", property = "articles", many = @Many(select = "cn.mybatis.mydemo6.mapper.ArticleMapper.selectByOrderId", fetchType = FetchType.LAZY)) })
    Order selectById(Integer id);

}
public interface UserMapper
{

    @Select("SELECT * FROM tb_user WHERE ID = #{id} ")
    User selectById(Integer id);

}

2、引入映射接口

    <mappers>
        <mapper class="cn.mybatis.mydemo6.mapper.ArticleMapper" />
        <mapper class="cn.mybatis.mydemo6.mapper.OrderMapper" />
        <mapper class="cn.mybatis.mydemo6.mapper.UserMapper" />
    </mappers>

3、测试代码

public class App
{
    public static void main(String[] args)
    {
        // 获取Session实例
        SqlSession session = MySqlSessionFactory.getSqlSession();
        // 获取OrderMapper实例
        OrderMapper om = session.getMapper(OrderMapper.class);
        // 根据id查询Order对象
        Order order = om.selectById(1);
        // 查看查询到的Order对象
        System.out.println(order.getId() + " " + order.getCode() + " " + order.getTotal());
        // 查看Order关联的User对象
        System.out.println(order.getUser());
        // 查看关联的Article集合,因为配置使用的是LAZY懒加载,所以当使用时才执行SQL语句
        order.getArticles().forEach(article -> System.out.println(article));
        // 提交事务
        session.commit();
        // 关闭Session
        session.close();
    }
}

标签: none

仅有一条评论

  1. borjja borjja

    这里的sql是多表查询吧,多对多关系是有中间表的,你直接在关联表里面查询吗?

添加新评论